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})
分享到:
相关推荐
基于 Python 的智能应答机器人的设计与实现的研究背景及研究意义 智能应答机器人是人工智能(AI)领域中的一种重要技术,它能够模拟人类对话,回答用户提问,具有广泛的应用前景。在当今社会,智能应答机器人已经被...
基于Hadoop、Nodejs的智能应答机器人 -------- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目...
国内外对智能应答机器人的研究现状显示,这一领域的探索始于20世纪90年代末,国外学者如D.Whitey、Bansal, A, Patel, K, Gopal Gupta等人进行了开创性工作,将智能应答机器人应用于化学生产流程和Web服务模型。...
在Python中,我们可以使用Python-AIML库来处理Aiml文件,实现机器人的学习和应答功能。 首先,让我们深入了解Python-AIML库。Python-AIML库是Python对Aiml标准的一个实现,它提供了方便的接口来创建、训练和运行...
【Skype应答机器人】是一种基于Skype平台的自动化程序,它能够接收并回应用户的语音通话,同时还能播放预设的语音文件。这种技术在客服、教育、家庭自动化等多个领域有着广泛的应用前景,使得人与机器之间的交互变得...
标题中的“设计与实现部分基于python的智能应答机器人的设计与实现”指的是构建一个智能应答机器人系统,该系统部分地依赖于Python编程语言来完成其核心功能。描述中的重复内容强调了这个主题,表明文档详细介绍了...
QQ聊天机器人接口文件是用于构建自动化聊天机器人的关键组件,主要涉及编程接口(API)和配置文件,使得开发者能够创建程序来与QQ即时通讯软件进行交互。这些文件提供了与QQ平台进行通信的桥梁,允许机器人自动回复...
人工智能-hadoop
在基于Web的呼叫中心中,IP PBX取代了传统的电话交换机,提供了呼叫路由、呼叫排队、自动应答和呼叫管理等功能。通过IP PBX,企业能够统一管理通过互联网发起和接收的电话呼叫,实现更灵活、成本更低的呼叫中心运作...
Java Socket Server 机器人是一种利用Java编程语言实现的网络通信服务,它基于Socket接口来构建。Socket在计算机网络中扮演着客户端和服务端之间的桥梁角色,允许两者进行双向数据传输。在这个项目中,Java Socket ...
机器人取名为Season house,他的主要功能是预测用户当时的心情或用户性格。类似于占卜类分析游戏。过程为:机器人感应用户到来,屏幕上出现交互界面。用户刷卡或投币后,在屏幕上出现一些简单的问答题目。根据这些...
基于WEB的雷达培训系统是一种创新的教学模式,它主要面向航海人员进行操作程序和操作规则的基本技能培训。与传统的雷达模拟器相比,基于Web的雷达培训系统突破了时间和地点的限制,具有显著的优点。 首先,该系统...
- **结构**:AIML包含各种元素,如`<pattern>`、`<template>`、`<category>`等,用于定义用户可能的输入和机器人的应答。 - **优点**:灵活、可扩展,能处理复杂对话情境,并允许开发者定制特定的对话模式。 **2....