Извлечение старых твитов с использованием потокового API Twitter с использованием фильтра географической локации

Моя цель - извлечь старые твиты за весь январь 2017 года для Нью-Йорка ('location':'-74,40,-73,41'), используя python. Я могу получить живые твиты с помощью следующего кода:

    import json
    import pandas as pd
    import numpy as np
    from TwitterAPI import TwitterAPI

    #Set up the variables for the 'application'
    consumerkey = 'cfKguErYawo2WB7cfNtAT2lKl'
    consumersecret = 'my_consumer_secret'
    access_token_key = '2195434704-Wov69oF2iIBRgUjWJhD0KThqcLApYCJXqtbYI4K'
    access_token_secret = 'my_access_token_secret'

    #Setup the API key
    api = TwitterAPI(consumerkey,consumersecret,access_token_key,access_token_secret)

    # Breaking after extracting 10 live tweets from New York City

    r = api.request('statuses/filter', {'locations':'-74,40,-73,41'})
    for row,item in enumerate(r):
        print(row, item['text'])
        if row >= 10:
            break

Но это не то, что я ищу. Может кто-нибудь предложить, как извлечь старые твиты для этого фильтра местоположения, используя потоковый API Twitter или любой другой пакет в python? Спасибо!

1 ответ

Решение

Вы можете выполнить часть того, что вы просите, используя REST API Twitter. Ниже приведен пример, который использует пакет TwitterAPI, с которым вы использовали потоковую передачу. Однако, когда вы ищете старые твиты, есть некоторые ограничения. Вы можете получить только около недели старых твитов. Кроме того, вы должны предоставить строку поиска (с q параметр) независимо от того, указали ли вы местоположение. Вы увидите только результаты, которые соответствуют как строке, так и местоположению. При потоковой передаче вы можете указать строку фильтра, местоположение или и то, и другое. В этом случае результаты могут соответствовать либо строке, либо местоположению, но не обязательно обеим.

Этот код будет загружать твиты до тех пор, пока вы не достигнете ограничения примерно в одну неделю. Это делается путем последовательных запросов, которые рассчитаны так, чтобы не превышать ограничение скорости Twitter. Вам также может пригодиться пакет TwitterGeoPics.

from TwitterAPI import TwitterAPI, TwitterRestPager

SEARCH_TERM = 'pizza'
GEOCODE = '40,74,10km'

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN_KEY = ''
ACCESS_TOKEN_SECRET = ''

api = TwitterAPI(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET)

pager = TwitterRestPager(api, 'search/tweets', {'q': SEARCH_TERM, 'geocode':GEOCODE})

for item in pager.get_iterator():
    print(item['text'] if 'text' in item else item)

Теперь вы не можете извлекать 30-дневные твиты, используя потоковый API Twitter. Твиттер сделал это платным.

Вы можете извлекать твиты за последние 30 дней, используя план подписки на 30 дней поиска в API премиум-класса Twitter.

Кроме того, вы можете купить премиум-подписку в Твиттере, только если вы одобрили аккаунт разработчика в Твиттере.

Чтобы получить одобрение, вы можете увидеть эту ссылку: https://developer.twitter.com/en/apply-for-access.html

Если у вас есть одноразовое требование, я предложу вам использовать сторонние сервисы, такие как https://www.trackmyhashtag.com/ или https://tweetreach.com/.

Другие вопросы по тегам