Как получить все исторические общедоступные твиты с помощью API Twitter Premium Search в версии Sandbox (используя следующий токен) - PullRequest
0 голосов
/ 06 июня 2018

Я хочу загрузить все исторические твиты с определенными хэштегами и / или ключевыми словами для исследовательского проекта.Я получил Премиум API Twitter для этого.Я использую удивительный TwitterAPI, чтобы позаботиться об аутентификации и т. Д.

Моя проблема сейчас в том, что я не являюсь опытным разработчиком и у меня есть некоторые проблемы с пониманием работы токена next,и как получить все твиты в CSV.

Чего я хочу добиться, так это чтобы все твиты были в одном csv, без необходимости вручную изменять даты значений fromDate и toDate.Сейчас я не знаю, как получить токен next и как использовать его для объединения запросов.

Пока я попал сюда:

from TwitterAPI import TwitterAPI
import csv

SEARCH_TERM = 'my-search-term-here'
PRODUCT = 'fullarchive'
LABEL = 'here-goes-my-dev-env'

api = TwitterAPI("consumer_key", 
             "consumer_secret", 
             "access_token_key", 
             "access_token_secret")

r = api.request('tweets/search/%s/:%s' % (PRODUCT, LABEL), 
            {'query':SEARCH_TERM, 
            'fromDate':'200603220000',
            'toDate':'201806020000'
            }
            )
csvFile = open('2006-2018.csv', 'a')
csvWriter = csv.writer(csvFile)

for item in r:
    csvWriter.writerow([item['created_at'],item['user']['screen_name'], item['text'] if 'text' in item else item])

Я был бы очень благодаренза любую помощь!Ура!

1 Ответ

0 голосов
/ 07 июня 2018

Прежде всего, TwitterAPI включает вспомогательный класс, который позаботится об этом за вас.TwitterPager работает со многими типами конечных точек Twitter, а не только с расширенным поиском.Вот пример, с которого можно начать: https://github.com/geduldig/TwitterAPI/blob/master/examples/page_tweets.py

Но чтобы ответить на ваш вопрос, стратегия, которую вы должны использовать, заключается в том, чтобы поместить текущий запрос в цикл while.Затем: 1. Каждый запрос вернет поле next, которое вы можете получить с помощью r.json()['next'].2. Когда вы закончите обработку текущей партии твитов и будете готовы к следующему запросу, вы должны включить параметр next, установленный в указанное выше значение.3. Наконец, в конечном итоге запрос не будет содержать next в возвращенном json.В этот момент вырвитесь из цикла while.

Что-то вроде следующего.

next = ''
while True:
    r = api.request('tweets/search/%s/:%s' % (PRODUCT, LABEL), 
                    {'query':SEARCH_TERM, 
                     'fromDate':'200603220000',
                     'toDate':'201806020000',
                     'next':next})
    if r.status_code != 200:
        break
    for item in r:
        csvWriter.writerow([item['created_at'],item['user']['screen_name'], item['text'] if 'text' in item else item])
    json = r.json()
    if 'next' not in json:
        break
    next = json['next']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...