年賀状を出す相手が急に増えてしまったので。
ソースコード
コピペしてすぐに遊びたいせっかちさんのために。
import java.io.FileReader import scala.xml.XML import au.com.bytecode.opencsv.CSVReader object Main extends App { val reader = new CSVReader(new FileReader("ファイルの場所/foobar.csv")) val csv = Stream.continually { reader.readNext() } takeWhile { null != } tail // 1行目は不要(はがきデザインキットで使っているCSVの場合、列名が入っているので) val postals = csv map { _(6) } // 郵便番号が入っているのは6列目(はがきデザインキットで(ry for (pos <- postals) { val uri = "http://zip.cgis.biz/xml/zip.php" + "?zn=" + pos val result = XML.load(uri) \ "ADDRESS_value" Thread.sleep(5000) val addr = List(result \\ "@state", result \\ "@city", result \\ "@address") println(addr.mkString(",")) } }
OpenCSVについて
JavaのCSV用ライブラリ OpenCSV - dirablueの日記ここさえ読めばなんとかなります。
String[] <=> Array[String] であることさえ注意していれば、もう何も恐くない。
なんでStreamで読み込んでるの?
僕も最初はListBuffer作ったり、 var line = ""; while({line = reader.readNext; line})以下略 とか書いてました。
そのとき、ふとニコニコ生放送で見たこのスライドを思い出したので。
ドワンゴ社内 scala勉強会 で「クリエイティブで高品質なScalaプログラマになるための10のTips」 という発表をした - ゆろよろ日記
03.whileとStream
XMLの使い方は?
僕もよくわかってません(ぉぃ)。
日本語情報はこのあたりでしょうか。
ScalaでWebスクレイピングしようとしたメモ - Scala覚書
そして、
受け取りデータ説明(XML編) 郵便番号検索API
ここをみながら適当にデータを抽出して、遊びます。