Загрузка исторических твитов через rtweet из Premium API через R - PullRequest
0 голосов
/ 02 июня 2019

Мне нужно извлечь твиты с "#bitcoin" с 2013-04-28 до сегодняшнего дня из Twitter, чтобы провести анализ настроений.

Для этого у меня есть доступ к Premium API Twitter.

Я использую пакет rtweet, который предлагает функцию search_fullarchive.

Мои вопросы: 1. Как я могу обеспечить загрузку, например, 50 000 твитов с каждого дня в интервале с 2013-04-28 до сегодняшнего дня?

Должен ли я считать аргумент retryonratelimit = T как в "search_tweets"? Какой токен должен быть вставлен в аргумент "token" Можно ли создать фрейм данных "df_tweets", и функция будет связывать в нем все новые загруженные твиты?

Будет ли эта функция загружать 50000 твитов каждый день в период с 2013-04-28 по 2019-06-02 (примечание: мне нужно искать имя среды, df_tweets должен быть пустым data.frame):

bitcointweets <-search_fullarchive(q = "bitcoin", 
n = 50000, 
fromDate = "20130428",
toDate = "20190602",
env_name = "XXX",
parse = T, 
token ="????", 
safedir = df_tweets)

Возможно ли подсчитать, сколько времени займет загрузка?

Большое спасибо.

1 Ответ

2 голосов
/ 08 июля 2019

Сначала (точка 3) всех аргументов токена, похоже, требует токен на предъявителя:

Токен, связанный с созданным пользователем APP (требуется учетная запись разработчика), который преобразуется в токен на предъявителя для выполнения премиальных API-запросов

, которые, как вы можете прочитать здесь: https://developer.twitter.com/en/docs/basics/authentication/guides/bearer-tokens,, генерируются посредством запроса скручивания:

curl -u 'API key:API secret key' \
  --data 'grant_type=client_credentials' \
  'https://api.twitter.com/oauth2/token'

с заменой ваших ключей API и секретного ключа API.


Второй (точка 2) , премиум-аккаунт позволяет разбиение по страницам твитов, т. е. предоставляет токен, если количество возвращаемых твитов больше, чем число, которое ваша учетная запись разрешает на запрос, например, 100. Это можно прочитать в справочнике API для расширенного поиска: https://developer.twitter.com/en/docs/tweets/search/api-reference/premium-search Поскольку эта функция не упоминается в справочнике rtweet , я не уверен, что она реализована на данном этапе.Чтобы использовать эту нумерацию страниц , вы должны предоставить аргумент next с предоставленным токеном.Ссылка на твиттер гласит:

Этот параметр используется для получения следующей «страницы» результатов.Значение, используемое с параметром, извлекается непосредственно из ответа, предоставленного API, и не должно изменяться.

Так что вы можете вставить свой первоначальный запрос с аргументом разбиения на страницы, если можетеполучить этот следующий токен через rtweet , например,

# initial example query looking for the term rtweet, filtering for tweets associated with news, excluding retweets and replies, starting on July 1, 2006 and ending on July 2, 2019
query <- "rtweet filter:news -filter:retweets -filter:replies since:2006-07-01 until:2019-07-02"

# next_token retrieved by request
next <- paste0("next:", next_token)

# search
search_fullarchive(query, n = 100, env_name = "your_developer_environment", token = "your_bearer_token")

# something happens and hopefully you get pagination token
.
.
.

# paste token with initial query
query <- paste0(query, " ", "pagination_token")

# search again, but now with pagination token in query
search_fullarchive(query, n = 100, env_name = "your_developer_environment", token = "your_bearer_token")

Очевидно, этот запрос должен быть зациклен до тех пор, пока не будет возвращен маркер пагинации .

Поскольку у меня нет опыта использования функции search_fullarchive () на этом этапе, и я действительно не уверен, реализована ли возможность получения токена pagiation ,Я бы предложил использовать curl для поиска в полном архиве твиттера.


Что касается (точка 4) , я бы предложил использовать rbind () в цикле, используяпроанализированный фрейм данных твитов (используя arugment parse = TRUE внутри функции search_fullarchive () пакета rtweet ).


Ина ваш начальный вопрос (поint 1) : Просто зацикливайтесь, пока не дойдете до 50 000 твитов.Я не думаю, что есть какая-либо возможность, кроме зацикливания.

...