3

我想尝试制作一个简单的 twitter 客户端,它可以了解我的品味并自动找到朋友和有趣的推文,为我提供相关信息。

开始之前,我需要获得大量随机 Twitter 消息,这样我就可以在它们上测试一些机器学习算法。

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

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

4

4 回答 4

2

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

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

于 2011-06-22T20:36:15.053 回答
2

我使用tweepy访问 Twitter API 并收听他们提供的公共流——这应该是所有推文的百分之一样本。这是我自己使用的示例代码。您仍然可以使用基本的身份验证机制进行流式传输,尽管它们可能很快就会改变。相应地更改 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)
于 2011-06-27T02:12:38.200 回答
1

Twitter 有一个用于此目的的流式 API 。它们提供发布到 twitter 的所有消息的一小部分随机样本,并以您所描述的“推送”方式不断更新。如果您这样做是出于某种崇高的目的,那么您可以请求从 Twitter 访问更大的样本。

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

状态/样本

返回所有公共状态的随机样本。默认访问级别“Spritzer”提供了 Firehose 的一小部分,非常粗略地说,占所有公共状态的 1%。“Gardenhose”访问级别提供了更适合数据挖掘和研究应用程序的比例,这些应用程序希望更大比例成为具有统计意义的样本。目前,Gardenhose 非常粗略地返回了所有公共状态的 10%。请注意,随着流量的变化,这些比例可能会不经宣布进行调整。

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

方法:GET

参数:计数、分隔

返回:状态元素流

就个人而言,我使用 python 库tweepy来使用流 API 取得了一些成功。

于 2011-06-22T20:39:58.063 回答
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 已弃用。这是一组新的代码。玩得开心!

于 2014-12-15T13:40:46.217 回答