как получить более 100 твитов из поиска в твиттере или потокового API с помощью Twython

Как я могу использовать Twython для получения всех твитов, в которых упоминается, например, «#Accounting», скажем, в Нью-Йорке?

Я использовал API поиска Twitter, но мне было разрешено получить только 100 твитов.

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

Вот мой код:

from twython import Twython

TWITTER_APP_KEY = 'XXXX'
TWITTER_APP_KEY_SECRET = 'XXXX'
TWITTER_ACCESS_TOKEN = 'XXXX'
TWITTER_ACCESS_TOKEN_SECRET = 'XXXX'

t = Twython(app_key=TWITTER_APP_KEY, 
            app_secret=TWITTER_APP_KEY_SECRET, 
            oauth_token=TWITTER_ACCESS_TOKEN, 
            oauth_token_secret=TWITTER_ACCESS_TOKEN_SECRET)

search = t.search(q='#Accounting', 
                    geocode='-74,40,-73,41',
                    since_id='1',
                    max_id='504082008759488512'
                  )

tweets = search['statuses']
count=0
for tweet in tweets:
    count+=1
    print tweet['id_str'], '\n', tweet['text'], '\n\n\n'

print count

А вот мой код для Streaming API:

from twython import TwythonStreamer
APP_KEY = 'XXXX'
APP_SECRET = 'XXXX' 
OAUTH_TOKEN = 'XXXX'
OAUTH_TOKEN_SECRET = 'XXXX'

class MyStreamer(TwythonStreamer):
  tweets=[] 
  def on_success(self, data):
    if 'text' in data:
        tweet= data['text'].encode('utf-8')
        if 'Accounting' in tweet:
          tweets.append(tweet)
          print tweet

  def on_error(self, status_code, data):
    print status_code
    self.disconnect()

stream = MyStreamer(APP_KEY, APP_SECRET,
                    OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

stream.statuses.filter(location=['-74,40,-73,41'])

Спасибо


person jxn    schedule 11.05.2014    source источник


Ответы (2)


Вы можете запрашивать только 100 за раз, но у вас есть возможность указать, с какого идентификатора этот запрос должен начинаться (или быть больше или меньше).

Итак, что вы делаете, это запускаете свои первые 100, затем ищите самый низкий идентификатор и запускаете другой запрос, на этот раз устанавливая этот идентификатор (меньше 1) в качестве вашего максимального идентификатора. Это вернет следующие 100, которые вы добавите к предыдущим результатам.

Затем вы можете запускать этот цикл столько раз, сколько вам нужно, с учетом ограничений скорости Twitter.

Если вы хотите получить самые последние твиты, вы должны использовать t.setMaxId() или t.setSinceId(), установленные ниже или выше, чем ваш текущий самый низкий/самый высокий идентификатор соответственно.

person Yupsiree    schedule 20.05.2015

По https://dev.twitter.com/docs/api/1.1/get/search/tweets

Счетчик необязательно

Количество твитов, возвращаемых на страницу, максимум до 100. По умолчанию 15. Раньше это был параметр rpp в старом API поиска.

Примеры значений: 100

Похоже, вы можете получить только максимум 100 :(

person Mike Helmick    schedule 21.05.2014