Извлечение старых твитов с помощью 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? Спасибо!


person Utkarsh    schedule 22.11.2017    source источник
comment
Tweet-ID похожи на временные позиции. Можно ли ограничить поиск только твитами старше указанного идентификатора? Думаю, есть max_id аргумент.   -  person keepAlive    schedule 22.11.2017


Ответы (2)


Вы можете выполнить часть того, о чем просите, используя 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)
person Jonas    schedule 22.11.2017

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

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

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

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

Если у вас есть разовая потребность в этом, я предлагаю вам использовать сторонние сервисы, такие как TrackMyhashtag.com или Tweetreach.com

person Arjun Jain    schedule 15.03.2019