2012-02-08 2 views
5

Tôi muốn tìm kiếm hồ sơ của người theo dõi trên Twitter của người dùng bằng R (người theo dõi> 100000). Mặc dù twitteR là một gói tuyệt vời, nó có vấn đề khi đối phó với mức độ cao của những người theo như là một trong những nhu cầu để thực hiện một thói quen ngủ để tránh vượt quá giới hạn tốc độ. Tôi là một người mới tương đối ở đây và tự hỏi làm thế nào người ta có thể lặp qua đối tượng ID người theo dõi, nhập vào id người theo dõi theo lô 100 (vì đây là tối đa mà API Twitter có thể xử lý tại một thời điểm)?Tra cứu người theo dõi trên Twitter trong R

Chỉnh sửa: Mã thêm (Twitter) thư viện (plyr) maxTwitterIds = 100 sleeptime = 500 # giây

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

Tôi nghĩ ở trang 6 của http://cran.r-project.org/web/packages/twitteR/twitteR.pdf bạn có thể tìm thấy thông tin tốt. – aatrujillob

+0

Vâng, vấn đề là khi giao dịch với các danh sách lớn người theo dõi, bạn nhanh chóng vượt quá giới hạn tốc độ, vì vậy tôi đang tìm cách phá vỡ khối ID thành các lô 100 và chạy mỗi sau Sys.sleep. –

Trả lời

0

Hãy để tôi đầu tiên bắt đầu bằng cách nói rằng tôi đã không sử dụng gói Twitter. Vì vậy, tôi chỉ có thể cung cấp cho bạn một số mã giả cho bạn biết cấu trúc của cách thực hiện điều này. Điều đó sẽ giúp bạn bắt đầu.

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) 
}) 

Có thể cơ sở hạ tầng bạn cần phải đánh bóng (đó là danh sách lồng nhau), nhưng không có thông tin về nội dung bạn muốn trích xuất từ ​​tài khoản twitter khó nói.

+0

Cảm ơn bạn đã trả lời nhanh. Thay cho "getTwitterInfo" tôi đã đặt các tham số khác nhau được xác định bởi gói twitteR (getName, getLocation ...). Tuy nhiên, nó trả về lỗi "Lỗi trong splitter_a (.data, .margins, .expand): Lề không hợp lệ". Có chức năng đọc nào cần thiết để nhập dữ liệu theo lô 100 id không? –

+0

Vui lòng cung cấp một ví dụ tái sản xuất, theo cách này rất khó để tư vấn. –

+0

Tôi không biết nếu ở trên là đủ rõ ràng (tôi nghi ngờ tôi là một chút sương mù trên các bộ phận). Nhưng một ý tưởng khác có thể là truy cập trực tiếp vào API bằng cách sử dụng RCurl: dán các ID theo lô vào URL 100 tại một thời điểm bằng cách sử dụng hàm readLines trên ma trận được tạo ở trên. Tôi đã thất bại với điều này cho đến nay không thành công. Có ai có một số ý tưởng? –