Получение постоянного потока сообщений из твиттера - PullRequest
3 голосов
/ 23 июня 2011

Я хотел бы попытаться создать простой твиттер-клиент, который узнает мои вкусы и автоматически найдет друзей и интересные твиты, чтобы предоставить мне необходимую информацию.

Для начала мне нужно получить хороший поток случайных твиттер-сообщений, чтобы я мог протестировать на них несколько алгоритмов машинного обучения.

Какие методы API я должен использовать для этого? Нужно ли регулярно опрашивать, чтобы получать сообщения, или есть способ заставить твиттер выдвигать сообщения по мере их публикации?

Мне также было бы интересно узнать о любом подобном проекте.

Ответы [ 4 ]

2 голосов
/ 27 июня 2011

Я использую tweepy для доступа к API Twitter и прослушивания предоставляемого ими публичного потока , который должен составлять один процент от всех твитов. Вот мой пример кода, который я использую сам. Вы все еще можете использовать базовый механизм аутентификации для потоковой передачи, хотя они могут скоро измениться. Измените переменные 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)

Я также установил тайм-аут модуля сокета, думаю, у меня были некоторые проблемы с поведением тайм-аута по умолчанию в Python, поэтому будьте осторожны.

import socket
socket.setdefaulttimeout(timeout)
2 голосов
/ 23 июня 2011

Я не думаю, что вы можете получить доступ к мировой временной шкале Twitter.Но вы, безусловно, можете посмотреть твиты своих друзей и списки настроек для игры, я бы порекомендовал использовать библиотеку Twitter4J http://twitter4j.org/en/index.html

Я мог ошибаться, getPublicTimeline () может быть тем, что вам нужно.

1 голос
/ 23 июня 2011

Твиттер имеет потоковый API только для этой цели. Они предоставляют небольшую случайную выборку всех сообщений, публикуемых в твиттере, которые постоянно обновляются в режиме «push», как вы описываете. Если вы делаете это для какой-то благородной цели, тогда вы можете запросить доступ из Twitter к более крупной выборке.

Из документов API вы хотите statuses/sample:

статусы / образец

Возвращает случайный образец всех публичных статусов. уровень доступа по умолчанию, «Spritzer» обеспечивает небольшую долю Пожарный шланг, очень грубо, 1% от всех публичные статусы. «Садовый шланг» уровень доступа обеспечивает пропорцию больше подходит для интеллектуального анализа данных и исследовательские приложения, которые желают большая пропорция будет статистически значительный образец. В настоящее время Gardenhose возвращается, очень примерно, 10% всех публичных статусов. Обратите внимание, что эти пропорции подлежат необъявленная корректировка как трафик объем меняется.

URL: http://stream.twitter.com/1/statuses/sample.json

Метод (ы): ПОЛУЧИТЬ

Параметры: count, разделитель

Возвращает: поток элемента статуса

Лично я добился определенного успеха, используя библиотеку python tweepy для использования потокового API.

0 голосов
/ 15 декабря 2014
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)

BasicAuthHandler Tweepy устарела.Вот новый набор кода.Веселись!

...