Google で画像を検索してURLのリストを出力する

import java.net.HttpURLConnection
import java.net.URL
import java.net.URLEncoder
import scala.io.Source

val paramMap = Map(
    "q" -> "富士山",                            // 検索する語
    "tbs" -> "itp:photo,isz:lt,islt:10mp",      // "islt:10mp" は "10メガピクセル以上" を表す
    "hl" -> "ja", "source" -> "lnt",
    "biw" -> "1024", "bih" -> "768"
)
val url = new URL("http://www.google.co.jp/images?" + paramsMapToQueryString(paramMap, "UTF-8"))
val html = getHtml(url, "UTF-8", Map("User-Agent" -> "Mozilla/5.0 (Windows; U; Windows NT 6.1) Firefox/3.6.8"))
val rLink = """<a class=rg_l [^>]+>""".r
val rUrl = """.+[?;]imgurl=([^&]+).+""".r
val imgUrls = (for (rUrl(imgUrl) <- rLink.findAllIn(html)) yield imgUrl).toList
imgUrls.foreach(println)
printf("%,d件%n", imgUrls.size)
exit

// 以下は関数定義

def paramsMapToQueryString(params: Map[String, String], enc: String) = {
    val pairs = for ((name, value) <- params) yield List(name, value).map(URLEncoder.encode(_, enc))
    pairs.map(_.mkString("=")).mkString("&")
}

def getHtml(url: URL, enc: String, headers: Map[String, String]) = {
    val connection = url.openConnection.asInstanceOf[HttpURLConnection]
    try {
        for ((name, value) <- headers) connection.setRequestProperty(name, value)
        val in = connection.getInputStream
        try { Source.fromInputStream(in, enc).mkString } finally { in.close }
    } finally {
        connection.disconnect
    }
}