加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – EventMachine和Twitter流媒体API

发布时间:2020-12-17 03:21:23 所属栏目:百科 来源:网络整理
导读:我正在使用Twitter流API运行EventMachine流程.如果流的内容不频繁,我总是有问题. 这是脚本的最小版本: require 'rubygems'require 'eventmachine'require 'em-http'require 'json'usage = "#{$0} user password track"abort usage unless user = ARGV.shift
我正在使用Twitter流API运行EventMachine流程.如果流的内容不频繁,我总是有问题.

这是脚本的最小版本:

require 'rubygems'
require 'eventmachine'
require 'em-http'
require 'json'

usage = "#{$0} <user> <password> <track>"
abort usage unless user = ARGV.shift
abort usage unless password = ARGV.shift
abort usage unless keywords= ARGV.shift

def startIt(user,password,keywords)
EventMachine.run do
  http = EventMachine::HttpRequest.new("https://stream.twitter.com/1/statuses/filter.json",{:port=>443}).post(
                    :head =>{ 'Authorization' => [ user,password ] },:body =>{"track"=>keywords},:keepalive=>true,:timeout=>-1)

  buffer = ""
  http.stream do |chunk|
    buffer += chunk
    while line = buffer.slice!(/.+r?n/)
      if line.length>5
          tweet=JSON.parse(line)
          puts Time.new.to_s+"#{tweet['user']['screen_name']}: #{tweet['text']}"
      end
    end

  end
   http.errback {
        puts Time.new.to_s+"Error: "
        puts http.error
   }
end  
    rescue => error
      puts "error rescue "+error.to_s
end

while true
    startIt user,keywords
end

如果我搜索像“iphone”这样的关键字,一切都运作良好
如果我搜索一个不太常用的关键字,我的流将在最后一条消息后大约20秒左右快速关闭.
注意:http.error总是为空,因此在关闭流时很难理解…
在另一端,神圣相似的PHP版本没有关闭,所以似乎可能与eventmachine / http-em有问题,但我不明白哪一个…

解决方法

您应该添加设置以防止连接超时.
试试这个 :

http = EventMachine::HttpRequest.new(
  "https://stream.twitter.com/1/statuses/filter.json",:connection_timeout => 0,:inactivity_timeout => 0
).post(
  :head => {'Authorization' => [ user,:body => {'track' => keywords}
)

祝好运,基督教

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读