2016-06-16 3 views
0

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

Вот мой код:

library(RColorBrewer) 
library(NLP) 
library(twitteR) 
library(foreign) 
library(wordcloud) 
library(tm) 
library(base64enc) 
library(httr) 

access_token<-"" #not including these, but the oauth works for me 
access_secret<-"" 
consumer_key<-"" 
consumer_secret<-"" 

###Scrapes Twitter Account 

setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret) 
set.seed(123) 
user.tweets<-userTimeline('@HillaryClinton', n=3200) 
df<-twListToDF(user.tweets) 

Этот код хватает 340 твитов со страницы твиттер Хиллари Клинтон. Но у нее более 8000 твитов, поэтому я смущен, почему это только хватало их. Я проверил дату для раннего твита, и это 27 апреля этого года. Является ли это проблемой API только для сбора обратно на эту дату?

Я не думаю, что это, потому что я также использовал этот код в профиле twitter друга. Это собрало всего 106 из его 451 твитов, но до конца этого достигло конца. Но в этом случае он пропускал некоторые твиты, которые он создал (они не были ретвитами).

Я что-то пропустил в своем коде, есть ли ограничение на функцию userTimeline, которую я пропускаю, или что?

Спасибо.

ответ

0

Ваш код кажется правильным, поскольку он также работал на меня, и на самом деле, я ранее работал с этим пакетом и рассматривал подобные проблемы.

После слишком многого, чтобы понять, почему это произошло, я понял, что это связано с ограничениями API, проверьте их here. Я уверен, что этого можно избежать, чтобы вы могли получать больше твитов. Однако это означало бы очищение Twitter и еще несколько строк кода.

Один из способов сортировки это из может быть с помощью некоторого таймера на вашей цикл, например:

user.tweets<-userTimeline('@HillaryClinton', n=3200) 
df<-twListToDF(user.tweets) 
for(i in 1:100){ 
user.tweets<-userTimeline('@HillaryClinton', n=3200) 
df<-rbind(user.tweets) 
Sys.sleep(900) 
} 

Таким образом, каждые 900 секунд, 15 минут, выполняется запрос, но вы можете изменить этот таймер на все, что вы считаете. Или другой вариант, предложенный here, вы можете запустить сценарий с учетом таймера. Я думаю, таким образом, вы бы получить некоторые повторяющиеся твиты, но вы можете легко избавиться от них:

df[duplicated(df), ] 

Это очень вероятно, что это решение не может быть идеальным, но это работает для меня вполне прилично. Дело в том, чтобы быть немного творческим! :)

Надеюсь, это поможет немного, и если у кого есть какие-либо предложения по его улучшению, я буду рад услышать.

+0

Это будет просто повторять одни и те же ответы снова и снова (пока Хиллари не встретятся в твиттере, а затем она возьмет новый твит и потеряет самые старые твиты). Вам нужно будет работать с параметром Max ID и параметрами After_id. Щебетать Предоставляет хорошую документацию относительно этого здесь: https://dev.twitter.com/rest/public/timelines –

Смежные вопросы