Google サジェストを使ってみる

30分プログラム、その735。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_259にインスパイアされて、Googleサジェストの候補をScalaで取得してます。
ScalaにはXMLリテラルがあって、パターンマッチもできるので楽ですね。属性をパターンマッチでとりだせなかったけれども。

使い方

scala> GoogleSuggest.search("hoge")
res7: Seq[String] = ArrayBufferRO(
  捕鯨,
  hogeとは,
  hogehoge,
  hogehoge 由来,
  捕鯨問題,
  捕鯨国 一覧,
  捕鯨問題 まとめ,
  捕鯨 反対 理由,
  hoゲージ,
  保元の乱)

ソースコード

import java.net.URL
import scala.xml._


object GoogleSuggest {
  def url(q : String) =
    String.format("http://google.com/complete/search?output=toolbar&hl=ja&q=%s",
		  q)

  def load(url : String) = {
    val conn = new URL(url)
    val in = conn.openStream()
    XML load in
  }

  def extract(xml : Elem) = {
    xml match {
      case <toplevel>{ suggests @ _*}</toplevel> =>
	suggests \\ "@data"
    }
  }

  def search(query : String) : Seq[String] = {
    val u = url( query )
    val xml = load( u )
    extract(xml).map(_.text)
  }
}