从twitter获得稳定的消息流

时间:2011-06-22 20:07:58

标签: web-services twitter machine-learning recommendation-engine

我想尝试创建一个简单的Twitter客户端,了解我的口味,并自动找到朋友和有趣的推文,为我提供相关信息。

要开始使用,我需要获得一系列随机的Twitter消息,因此我可以测试一些机器学习算法。

我应该使用哪些API方法?我是否必须定期轮询以获取消息,或者有没有办法让Twitter在发布消息时推送消息?

我也有兴趣了解任何类似的项目。

4 个答案:

答案 0 :(得分:2)

我认为您无法访问世界Twitter时间表。但你可以肯定看看你的朋友推文和设置列表,我建议使用Twitter4J库http://twitter4j.org/en/index.html

我可能错了,getPublicTimeline()可能就是你想要的。

答案 1 :(得分:2)

我使用tweepy访问Twitter API并收听他们提供的public stream - 这应该是所有推文的百分之一样本。这是我自己使用的示例代码。您仍然可以使用基本身份验证机制进行流式传输,尽管它们很快就会改变。相应地更改USERNAME和PASSWORD变量,并确保您遵守Twitter返回的错误代码(此示例代码可能不符合Twitter在某些情况下所需的指数退避机制)。

import tweepy
import time

def log_error(msg):
    timestamp = time.strftime('%Y%m%d:%H%M:%S')
    sys.stderr.write("%s: %s\n" % (timestamp,msg))

class StreamWatcherListener(tweepy.StreamListener):
  def on_status(self, status):
      print status.text.encode('utf-8')

    def on_error(self, status_code):
      log_error("Status code: %s." % status_code)
      time.sleep(3)
      return True  # keep stream alive

    def on_timeout(self):
      log_error("Timeout.")


def main():
    auth = tweepy.BasicAuthHandler(USERNAME, PASSWORD)
    listener = StreamWatcherListener()
    stream = tweepy.Stream(auth, listener)
    stream.sample()

if __name__ == '__main__':
    try:
      main()
    except KeyboardInterrupt:
      break
    except Exception,e:
      log_error("Exception: %s" % str(e))
      time.sleep(3)

我还设置了socket模块的超时,我相信我在Python中遇到了一些默认的超时行为问题,所以要小心。

import socket
socket.setdefaulttimeout(timeout)

答案 2 :(得分:1)

Twitter就是为了这个目的而拥有streaming API。它们提供了发布到Twitter的所有消息的小型随机样本,并按照您所描述的“推送”方式不断更新。如果你出于某种崇高目的而这样做,那么你可以从Twitter request access获得更大的样本。

从API文档中,您需要statuses/sample

  

状态/样本

     

返回一个随机数   所有公共状态的样本。该   默认访问级别,'Spritzer'   提供了一小部分   Firehose,非常粗略,占总数的1%   公共状况。 “Gardenhose”   访问级别提供了一个比例   更适合数据挖掘和   研究需要的应用程序   比例较大的统计数据   重要样本。目前   Gardenhose非常粗略地返回10%   所有公共状况。注意   这些比例受制于   突击调整为交通   量不一。

     

网址:http://stream.twitter.com/1/statuses/sample.json

     

方法:GET

     

参数:count,delimited

     

返回:状态元素流

就个人而言,我使用python库tweepy成功使用了流媒体API。

答案 3 :(得分:0)

import tweepy, sys, time

ckey = ''
csecret = ''
atoken = ''
asecret = ''
def log_error(msg):
    timestamp = time.strftime('%Y%m%d:%H%M:%S')
    sys.stderr.write("%s: %s\n" % (timestamp,msg))

class StreamWatcherListener(tweepy.StreamListener):
  def on_data(self, status):
    try: #Some of the object are deletion of tweet, won't have 'text' in the dict
      print getData['text']
    except Exception, e:
      pass
    #print text.encode('utf-8')
  def on_error(self, status_code):
    log_error("Status code: %s." % status_code)
    time.sleep(3)
    return True  # keep stream alive
  def on_timeout(self):
    log_error("Timeout.")

def main():
  auth = tweepy.OAuthHandler(ckey, csecret)
  auth.set_access_token(atoken, asecret)
  listener = StreamWatcherListener()
  stream = tweepy.Stream(auth, listener)
  stream.sample()

if __name__ == '__main__':
    try:
      main()
    except Exception,e:
      log_error("Exception: %s" % str(e))
      time.sleep(3)

不推荐使用Tweepy的BasicAuthHandler。这是一组新的代码。玩得开心!