基於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 [email protected]

$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})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章