2012-02-08 12 views
5

Chciałbym wyszukać profile obserwatorów użytkowników na Twitterze za pomocą R (followers> 100000). Chociaż twitteR jest świetnym pakietem, ma problemy z radzeniem sobie z wysokimi poziomami zwolenników, ponieważ trzeba wdrożyć procedurę rutynową, aby uniknąć przekroczenia limitów stawek. Jestem tu względnym nowicjuszem i zastanawiałem się, w jaki sposób można przechodzić przez obiekt ID naśladowcy, wprowadzając numery identyfikacyjne w partiach po 100 (jako że jest to maksymalna wartość, którą Twitter API może przetworzyć na raz)?Wyszukiwanie obserwatorów na Twitterze w R

Edycja: Kod dodany (twitter) biblioteki (plyr) maxTwitterIds = 100 czasspania = 500 # s

user<-getUser("[username]") 
followers<-zz$getFollowerIDs() 
ids_matrix = matrix(zz, nrow = maxTwitterIds, ncol = length(zz)/maxTwitterIds) 
followers<-zz$getFollowerIDs() 
#note: for smaller lists of followers it is possible to use the command "lookupUsers(zz)  at this point 
foll<-getTwitterInfoForListIds = function(id_list) { 
    return(lapply(id_list, 

names <- sapply(foll,name) 
sn<sapply(foll,screenName) 
id<-sapply(foll,id) 
verified<-sapply(foll,erified) 
created<-sapply(foll,created) 
statuses<-sapply(foll,statusesCount) 
follower<-sapply(foll,followersCount) 
friends<-sapply(foll,friendsCount) 
favorites<-sapply(foll,favoritesCount) 
location<-sapply(foll,location) 
url<-sapply(foll,url) 
description<-sapply(foll,description) 
last_status<-sapply(foll,lastStatus))) 
} 
alldata = alply(, 2, function(id_set) { 
    info = getTwitterInfoForListIds(id_set) 
    Sys.sleep(sleeptime) 
    return(info) 
}) 
+0

Myślę, że na stronie 6 http://cran.r-project.org/web/packages/twitteR/twitteR.pdf można znaleźć dobre informacje. – aatrujillob

+0

Tak, problem polega na tym, że gdy mamy do czynienia z dużymi listami obserwujących, szybko przekroczysz limity stawek, więc szukam sposobu na rozbicie bloku ID na partie o wartości 100 i uruchamianie każdego po Sys.sleep. –

Odpowiedz

0

Pozwól mi zacząć mówiąc, że nie był używany pakiet Twitterze. Dlatego mogę podać ci jedynie pseudo-kod, który mówi ci, jak to zrobić. To powinno ci na początek wystarczyć.

library(plyr) 

# Some constants 
maxTwitterIds = 100 
sleeptime = 1 # sec 

# Get the id's of the twitter followers of person X  
ids = getTwitterFollowers("x") # I'll use ids = 1:1000 
ids_matrix = matrix(ids, nrow = maxTwitterIds, 
         ncol = length(ids)/maxTwitterIds) 

getTwitterInfoForListIds = function(id_list) { 
    return(lapply(id_list, getTwitterInfo)) 
} 

# Find the information you need from each id 
alldata = alply(ids_matrix, 2, function(id_set) { 
    info = getTwitterInfoForListIds(id_set) 
    Sys.sleep(sleeptime) 
    return(info) 
}) 

Może datastructure wydostać się z tego potrzebuje niektóre polerowanie (to jest zagnieżdżona lista), ale bez informacji o tym, co chcesz, aby wyodrębnić z rachunków Twitterze, że trudno powiedzieć.

+0

Dzięki za szybką odpowiedź. W miejsce "getTwitterInfo" umieściłem różne parametry zdefiniowane przez pakiet twitteR (getName, getLocation ...). Zwraca jednak błąd "Błąd w splitter_a (.data, .margins, .expand): Nieprawidłowy margines". Czy istnieje funkcja odczytu niezbędna do wprowadzenia danych w partiach po 100 identyfikatorów? –

+0

Proszę podać odtwarzalny przykład, w ten sposób trudno jest doradzić. –

+0

Nie wiem, czy powyższe jest wystarczająco jasne (podejrzewam, że jestem trochę mglisty na częściach). Innym pomysłem może być bezpośredni dostęp do API za pomocą RCurl: wklejanie identyfikatorów partii do adresu URL 100 na raz za pomocą funkcji readLines na macierzy utworzonej powyżej. Do tej pory bezskutecznie się tym zajmowałem. Czy ktoś miałby jakieś pomysły? –