ScalaでTwitterタイムライン検索

新しい言語の勉強を初めようと入門書を読むと文法は分かるけど、結局どう使っていいかわからない、らしい。

言われてなるほどと思ったので、入門書に載ってる(であろう)内容だけでTwitterのタイムライン検索をやってみました。

import scala.io.Source
import scala.xml.XML

val url = "http://search.twitter.com/search." // TwitterSearch
val format = "atom"                           // XML形式で取得
val q = "?q=scala"                            // 検索キーワード"Scala"
val lang = "&lang=ja"                         // 日本語
val rpp = "&rpp=10"                           // 最新10件の検索(max100)
val api = url + format + q + lang + rpp
val source = Source.fromURL(api, "utf-8")
val xml = XML.loadString(source.getLines.mkString)
// XML.save("timeline.xml", xml, "utf-8")

for(elem <- (xml \\ "entry" \ "title")) {
  println(elem.text)
}
source.close

TwitterAPIについては、

[観] Twitter API 仕様書 (勝手に日本語訳シリーズ)

こちらのページが詳しいです。検索ならOAuthでの認証も必要なので気軽に試せます。

簡単な解説

scala.io.Source

scala.io.Sourceは入門書ではローカル上のファイル入出力にしか使ってないことが多いですが、.fromURLでネット上のデータにも簡単にアクセスできます。

言語によっては同じ関数で読み込めたりしますが、Scalaのように明示的に指定できる方が読みやすくて好み。

XML

source.getLinesで一行ごとにIteratorとして読み込んで.mkStringで文字列に変換。

その文字列をXML.loadStringの引数に渡すことでXML.Elemを生成できます。

あとは、XML.Elemのメソッド\や\\を使ってscala.xml.NodeSeqとしてヒットした順番に格納されるので、それをfor文で回して.textメソッドで要素に囲まれてるテキスト部分のみを出力してるだけです。

ね、簡単でしょ?

人にプログラミングを教えようとするとき、相手にとって興味を引かれる対象がバラバラなので、こうした入門書の内容だけでできるちょっと楽しいことをたくさんストックしておくのは大事かもしれないですね。