2009/08/28

Twitterで自動フォロー返しするよ、ただしRで

「protected なひと」と、「発言数が100回以下のひと(SPAMアカウント対策)」は自動でフォローされませんよー。

twitteRには Twitter API の friendship methods まわりが実装されていないので、curl で直接API叩いちゃってます。ただ、RCurlでPOSTメソッドでアクセスする方法がよくわからないので、curl -d を system からコールしてます。やりかた知っているひとがいたら教えてください。

あと、userFriends() とか user object な list を返すくせに、こいつがなぜか unlist できない。S4オブジェクトを格納した list は unlist できないとかですかね?

R ムズカシイネ\(^o^)/

<<<
library("twitteR")

# make twitter's session
myuser <- "chii_pc"
mypassword <- "ちょびっツ"
mysession <- initSession(myuser, mypassword)

myfriends <- userFriends(myuser, session=mysession)
myfriends <- unlist(lapply(myfriends, function(x) x@screenName))

myfollowers <- userFollowers(myuser, session=mysession)

addusers <- lapply(myfollowers,
function(myfollower) {
# new friend or not?
if (! any(myfriends == myfollower@screenName) ) {
# protected or not?
if (! myfollower@protected) {
# spam or not?
if (myfollower@statusesCount > 100) {
return(myfollower)
}
}
}
}
)

createFriendship <- function(user, password, friend) {
url <- paste("http://twitter.com/friendships/create/", friend, ".xml", sep="")
user.and.pass <- paste(user, password, sep=":")
cmd <- paste("curl", "-u", user.and.pass, "-d", '""', url, sep=" ")

cat(cmd, "\n")
system(cmd)
return(cmd)
}

devnull <- lapply(addusers,
function(myfollower) {
if ( ! is.null(myfollower) ) {
createFriendship(myuser, mypassword, myfollower@screenName)
Sys.sleep(3)
return(myfollower)
}
}
)
>>>
あとは cron でぐーるぐる。
*/5 * * * * R --vanilla -q -f /どっか/ディレクトリ/chii_pc/following.r