トップ «前の日記(Jul 09, 2009 (Thu)) 最新 次の日記(Aug 21, 2009 (Fri))» 編集


Aug 15, 2009 (Sat)

{}

_ RSS読みこんでTwitterに連投するだけのプログラムを書いた、ただしRで

みなさんおひさしぶりです。「アタシだけのヒト」みつかりましたか? 僕は数年前に、そうだと思った人に逃げられてしまいました、てへっ。それ以来というもの、週末は、ひとりじめの時間に自分へのこほうび! とばかりに仕事やハック、読書に明けたり暮れたりしちゃってます! 贅沢ですね。

ひさしぶりに日記のようなものを書いてしまった。これははずかしいね (キャラかわってね?)。いや、最近はついったーばかりで、ブログを書かなくなりましたねー。

さて、そんなわけで、みんな大好きついったーとRがらみのクイックハックしてみました。自由な時間をすべて自分のために使える独身帰属貴族なおいらですが、おとなの夏休みの自由研究ですね。「おとなの」とつくとなんだか微エロな気がしてくるので日本語ってば不思議!

。。。小ネタのためにくだらない前置きを読ませてしまってすみません><

具体的には RSXML でどっかの RSS を parse して twitteR でついったーに連投します。apply family を2つ使うだけの簡単なお仕事でした! 試しに書いたスクリプトをさらしておきますね。

自動的についったーに投稿するプログラムをボットと呼びますが、これはボットではありません。なぜなら、「この子がロボット三原則に縛られることのないようにしたかった」からです!(元ネタしらないひとごめんなさい

http://twitter.com/chii_pc

library("twitteR")
library("XML") 

# tweet id database for redundancy check
posted_ids.file <-  '/home/itoshi/Projects/chii_pc/posted_ids.rdat'
if ( file.exists(posted_ids.file) ) {
  load(posted_ids.file)
} else {
  posted_ids <- 0
  save(posted_ids, file=posted_ids.file)
}  

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

# twitter search
cat("Get rdf file...\n")
rdf.file <- "/home/itoshi/Projects/chii_pc/tl.rdf"
url <- '"http://pcod.no-ip.org/yats/search?query=%E3%81%A1%E3%81%83+(%E3%81%8A%E3%81%BC%E3%81%88%E3%81%9F+or+%E8%A6%9A%E
3%81%88%E3%81%9F)&lang=ja&fast&rss"'
cmd <- paste('curl -o', rdf.file, url, sep=" ")
cat(cmd, "\n")
system(cmd)

# parsing
cat("Parsing...\n")
doc <- xmlTreeParse(rdf.file, getDTD=F)
tweets <- xmlSApply(doc[["feed"]],
  function(entry) {
    if (xmlName(entry) == "entry") {

      author.name <- xmlValue( entry[["author"]][["name"]] )
      if (author.name != myuser) {
        # make tweet
        tweet <- xmlValue(entry[["summary"]])
        tweet <- sub("^.+ : ", "", tweet)
        tweet <- gsub("^@", ".@ ", tweet)

        # id
        entry.id <- xmlValue( entry[["id"]] )
        entry.id <- as.numeric( sub(".*/", "", entry.id) )
        cat(paste(entry.id, tweet), "\n")
        c(entry.id, tweet)
      }
    }
  }
)

# post
cat("Posting...\n")
posting_ids <- lapply(rev(tweets),
  function(tweet) {
    entry.id <- tweet[[1]]
    tweet    <- tweet[[2]]
    
    if ( ! is.null(tweet) ) {

      # redundancy check
      if ( ! any(posted_ids == entry.id) ) {
        cat(paste("Post", entry.id, tweet, sep="\t"), "\n")
        # post new tweet
        Sys.sleep(5)
        updateStatus(tweet, session=mysession)
        return(entry.id)
      } else {
        cat(paste("Skip", entry.id, tweet, sep="\t"), "\n")
      }
      
    }
    
  }
)

# save tweet id database
posted_ids <- unique( c(posted_ids, unlist(posting_ids)) )
save(posted_ids, file=posted_ids.file)

cat("Done\n" )

以上のRプログラムを cron にしこむだけ。

*/5 * * * *   R --vanilla -q -f /home/itoshi/Projects/chii_pc/chii_pc.r

そのうち人工無能かしてみたいなー。

参考文献: ちょびっツ 1 (ヤングマガジンコミックス)(CLAMP) ちょびっツ 1 (ヤングマガジンコミックス)(CLAMP)

追記: 以下のエントリにインスパイアされました。ども。

  1. ついったーBOT作者にお願いしたいこと
  2. twitter bot3原則
Tags: Twitter R
本日のツッコミ(全4件) [ツッコミを入れる]
_ KY (Aug 17, 2009 (Mon) 10:22)

久しぶりの登場で、ややハイテンション?(笑)<br>前フリ、子ネタの方にだけ反応して笑ってた。。。w

_ itoshi (Aug 18, 2009 (Tue) 01:23)

ども、ひさしぶりです! これからはハイテンションのイタイ子キャラでいきたいと思いますよw

_ うさぴょんの育ての親 (Aug 18, 2009 (Tue) 02:33)

お久し振りです。<br>コネタにも少し思うところがあって反応しちゃいましたがw、<br>それ以上にchiiがいったいどんなrssを読んでいるのかが気になってしまう(^^;

_ itoshi (Aug 18, 2009 (Tue) 03:06)

ごぶさたです! いまのところは、ついったー検索で ちぃ について発言をそのまま echo しているだけです><


トップ «前の日記(Jul 09, 2009 (Thu)) 最新 次の日記(Aug 21, 2009 (Fri))» 編集

Google
 
Web itoshi.tv

リンクは誰にも妨げられないあなたの権利です。お好きにどうぞ。 CC 表示2.1 日本
このサイトの各種商品のリンクは Amazonアソシエイト楽天アフィリエイト を利用している場合があります。