`
鹤惊昆仑
  • 浏览: 228965 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于web飞信接口的飞信应答机器人

    博客分类:
  • ruby
阅读更多
fetion-robot是基于web飞信接口的飞信机器人(一小段ruby脚本)。最初目标是做一个可以发新浪微博的飞信机器人。 目前实现了
  • 登录(验证码)
  • 信息
  • 发信息等功能

应答机器人最合适
源码仅仅145行--意味着任何人都可以很容易地修改以便于自用
本脚本目标定位于应答机器人,所以我会尽量不增加不必要的功能,保证代码量不膨胀。
最新源码http://code.google.com/p/fetion-robot/

#! /usr/bin/ruby
#author newdongyuwei@gmail.com

$KCODE = 'UTF-8'#解决中文乱码问题
%w(rubygems fileutils sinatra sinatra/base net/http net/https json).each{|lib|require lib}

class FetionRobot < Sinatra::Base
    @@Version = 0
    
    enable :sessions
    use Rack::Static, :urls => ["/images","/css","/js" ], :root => "public"
    set  :environment, :development
    set  :run, true
    
    def request(path,method,body,headers,hasVersion)
        if not body
            body =  "ssid=#{session['webim_sessionid']}"
        end
        if not headers
             headers = {
                'Referer' => 'https://webim.feixin.10086.cn/',
                'Content-Type' => 'application/x-www-form-urlencoded'
             }
        end
        http = Net::HTTP.new('webim.feixin.10086.cn', 443)
        http.use_ssl = true
        http.verify_mode = OpenSSL::SSL::VERIFY_NONE # turn off SSL warning
        if hasVersion
            path = "#{path}?Version=#{@@Version}"
            @@Version = @@Version + 1
        end
        
        if method == 'GET'
            return (resp, data = http.get(path, nil))
        else
            return (resp, data = http.post(path, body,headers))
        end
    end
    
    def get_code_img
        resp, data = request( '/WebIM/GetPicCode.aspx?Type=ccpsession','GET',nil,nil,false)
        dir = File.join(File.dirname(__FILE__),"public","images")
        FileUtils.mkdir_p(dir)
        File.open(File.join(dir,"fetion_code.jpeg"), "wb"){|file|
            file.write(resp.body)
            file.close
        }
        cookie = resp.response['set-cookie'].split(';')[0]
        session['ccpsession'] = cookie
    end 
    
    def get_personal_info
        resp, data = request(  "/WebIM/GetPersonalInfo.aspx",'POST',nil,nil,true)
        puts data
        info = JSON(data)
        if info['rc'] == 200
            self.get_contact_list()
        end
    end
    
    def get_contact_list
        resp, data = request(  "/WebIM/GetContactList.aspx",'POST',nil,nil,true)
        info = JSON(data)
        puts data
        if info['rc'] == 200
            self.keep_alive
        end
    end
    
    def keep_alive
        Thread.new { 
            loop { 
                puts "---------------------------------keep_alive-----------------------------------"
                resp, data = request(  "/WebIM/GetConnect.aspx",'POST',nil,nil,true)
                info = JSON(data)
                puts info['rc']
                puts resp,data
                if info['rc']== 200
                    info['rv'].each do|item|
                        data = item['Data']
                        if item['DataType'] ==3 and data
                            self.send_msg(data['fromUid'],data['msg']+' - -feedfack')#ping-pong-test
                        end
                    end
                end
                sleep 5
             }
         }
    end
    
    def send_msg(to='660122812',msg='test中文',isSendSms='0')
        puts '--------------------send msg ------------------------------'
        body = "To=#{to}&IsSendSms=#{isSendSms}&msg=#{msg}&ssid=#{session['webim_sessionid']}"
        resp, data = request(  "/WebIM/SendMsg.aspx",'POST',body,nil,true)
        info = JSON(data)
        puts data
        if info['rc']== 200
            puts 'send msg ok!'
        end
        return data
    end
    
    get '/' do
        self.get_code_img()
         "<form action='/login'>\
            <LABEL for='UserName' >手机或飞信号</LABEL><input name='UserName'/>\
            <LABEL for='Pwd' >密码</LABEL><input name='Pwd'/>\
            <LABEL for='Ccp' >验证码</LABEL><input name='Ccp'/>\
            <img onclick='window.location.reload(true)'  src='/images/fetion_code.jpeg' />\
            <input type='submit' value='登录飞信'/>\
         </form>"
    end

    get '/login' do
        body = "UserName=#{params['UserName']}&Pwd=#{params['Pwd']}&OnlineStatus=400&Ccp=#{params['Ccp']}"
        puts body
        headers = {
            'Cookie' => session['ccpsession'],
            'Referer' => 'https://webim.feixin.10086.cn/',
            'Content-Type' => 'application/x-www-form-urlencoded'
         }
        resp, data = request(  "/WebIM/Login.aspx",'POST',body,headers,false)
        puts data
        rc = JSON(data)['rc']
        if rc == 200
            webim_sessionid = resp.response['set-cookie'].split('webim_sessionid=')[1].split(';')[0]
            session['webim_sessionid'] = webim_sessionid
            puts webim_sessionid
            self.get_personal_info()
            'login ok!'
        else
            redirect "/"
        end
    end
end

FetionRobot.run!({:port => 3000})
3
0
分享到:
评论
4 楼 ganky 2011-02-07  
终于搞定了,我郁闷啊……
我是用JAVA写的,在登录成功后使用getHeaderField("Set-Cookie"),获取到的Set-Cookie只有“webim_userstatus=400; path=/”
但是使用getHeaderFields(),打印所有Header就能获取Set-Cookie里面的webim_sessionid,打印如下
Set-Cookie:[webim_userstatus=400; path=/, webim_usersid=850006634; path=/, webim_sessionid=470824898p6060-7ea82fe1-c208-4588-b24c-98a7c06a470c; path=/]

看来getHeaderField("Set-Cookie")方法只获取字符串集合的第一个元素,居然在这低级问题上白搞了一天。

幸好看到这篇文章,让我确定webim_sessionid是在登录成功后获取的,如果没有找到这篇文章,估计我还会被这问题纠缠几天,差点都吧web飞信的js文件给研究透了
3 楼 ganky 2011-02-07  
之前也有搞了一下,只实现了登录,因为一直找不到webim_sessionid在哪获取,呵呵
研究一下这文章~~
2 楼 kewin 2010-12-03  
现在127行了哦
1 楼 kewin 2010-12-03  
值得膜拜哦  和和

相关推荐

    基于python的智能应答机器人的设计与实现的研究背景及研究意义.pdf

    基于 Python 的智能应答机器人的设计与实现的研究背景及研究意义 智能应答机器人是人工智能(AI)领域中的一种重要技术,它能够模拟人类对话,回答用户提问,具有广泛的应用前景。在当今社会,智能应答机器人已经被...

    基于Hadoop、Nodejs的智能应答机器人

    基于Hadoop、Nodejs的智能应答机器人 -------- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! &lt;项目...

    基于python的智能应答机器人的设计与实现的研究背景及研究意义.docx

    国内外对智能应答机器人的研究现状显示,这一领域的探索始于20世纪90年代末,国外学者如D.Whitey、Bansal, A, Patel, K, Gopal Gupta等人进行了开创性工作,将智能应答机器人应用于化学生产流程和Web服务模型。...

    python aiml web 聊天机器人

    在Python中,我们可以使用Python-AIML库来处理Aiml文件,实现机器人的学习和应答功能。 首先,让我们深入了解Python-AIML库。Python-AIML库是Python对Aiml标准的一个实现,它提供了方便的接口来创建、训练和运行...

    skype 应答机器人

    【Skype应答机器人】是一种基于Skype平台的自动化程序,它能够接收并回应用户的语音通话,同时还能播放预设的语音文件。这种技术在客服、教育、家庭自动化等多个领域有着广泛的应用前景,使得人与机器之间的交互变得...

    设计与实现部分基于python的智能应答机器人的设计与实现.pdf

    标题中的“设计与实现部分基于python的智能应答机器人的设计与实现”指的是构建一个智能应答机器人系统,该系统部分地依赖于Python编程语言来完成其核心功能。描述中的重复内容强调了这个主题,表明文档详细介绍了...

    QQ聊天机器人接口文件

    QQ聊天机器人接口文件是用于构建自动化聊天机器人的关键组件,主要涉及编程接口(API)和配置文件,使得开发者能够创建程序来与QQ即时通讯软件进行交互。这些文件提供了与QQ平台进行通信的桥梁,允许机器人自动回复...

    基于Hadoop、Nodejs的智能应答机器人.zip

    人工智能-hadoop

    基于Web的呼叫中心.pdf

    在基于Web的呼叫中心中,IP PBX取代了传统的电话交换机,提供了呼叫路由、呼叫排队、自动应答和呼叫管理等功能。通过IP PBX,企业能够统一管理通过互联网发起和接收的电话呼叫,实现更灵活、成本更低的呼叫中心运作...

    java socket server 机器人

    Java Socket Server 机器人是一种利用Java编程语言实现的网络通信服务,它基于Socket接口来构建。Socket在计算机网络中扮演着客户端和服务端之间的桥梁角色,允许两者进行双向数据传输。在这个项目中,Java Socket ...

    基于传感器的智能交互机器人小组报告.pdf

    机器人取名为Season house,他的主要功能是预测用户当时的心情或用户性格。类似于占卜类分析游戏。过程为:机器人感应用户到来,屏幕上出现交互界面。用户刷卡或投币后,在屏幕上出现一些简单的问答题目。根据这些...

    基于WEB的雷达培训系统研究

    基于WEB的雷达培训系统是一种创新的教学模式,它主要面向航海人员进行操作程序和操作规则的基本技能培训。与传统的雷达模拟器相比,基于Web的雷达培训系统突破了时间和地点的限制,具有显著的优点。 首先,该系统...

    基于AIML的php聊天机器人源码

    - **结构**:AIML包含各种元素,如`&lt;pattern&gt;`、`&lt;template&gt;`、`&lt;category&gt;`等,用于定义用户可能的输入和机器人的应答。 - **优点**:灵活、可扩展,能处理复杂对话情境,并允许开发者定制特定的对话模式。 **2....

Global site tag (gtag.js) - Google Analytics