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

[size=large]fetion-robot是基于web飞信接口的飞信机器人(一小段ruby脚本)。最初目标是做一个可以发新浪微博的飞信机器人。 目前实现了
[list]
[*]登录(验证码)
[*][b]收[/b]信息
[*]发信息等功能
[/list]
做[b][color=red]应答机器人[/color][/b]最合适
源码仅仅145行--意味着任何人都可以很容易地修改以便于自用
本脚本目标定位于应答机器人,所以我会尽量不增加不必要的功能,保证代码量不膨胀。
[b]最新源码[/b][url]http://code.google.com/p/fetion-robot/[/url][/size]

#! /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})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值