【问题标题】:Getting a steady flow of messages from twitter从 twitter 获得稳定的消息流
【发布时间】:2011-06-22 20:07:57
【问题描述】:

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

首先,我需要获得大量随机 Twitter 消息流,以便在它们上测试一些机器学习算法。

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

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

【问题讨论】:

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


    【解决方案1】:

    我使用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】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        状态/样本

        返回一个随机的 所有公共状态的样本。这 默认访问级别,“Spritzer” 提供了一小部分 Firehose,非常粗略,占全部的 1% 公开状态。 “花园软管” 访问级别提供了一个比例 更适合数据挖掘和 需要一个研究应用程序 较大的比例要统计 显着样本。目前 Gardenhose 的回报率,非常粗略,10% 所有公共状态。注意 这些比例受制于 交通意外调整 量不等。

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

        方法:GET

        参数:计数、分隔

        返回:状态元素流

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

        【讨论】:

          【解决方案4】:
          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 已弃用。这是一组新的代码。玩得开心!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-15
            • 2021-01-04
            • 1970-01-01
            • 2015-01-17
            • 2011-04-16
            • 2022-10-26
            相关资源
            最近更新 更多