scrAPI日本語ってゆーかASCII(なのかすら不明)でハマる
id:secondlife:20060922:1158923779に書いてあるデモを試してみると問題無い.
けれども,YouTubeで日本語のタイトルのビデオの題名(長いよ)をスクレイピングしようと思うと,アッサリとハマった.YouTubeとhatenaの違い,それは,文字コードでした.本当によく邪魔をしてくれるヤツだ.hatenaがEUC-JPなのに対し,YouTubeはUTF-8.時代はUTF-8…じゃないのか….
例えば,http://www.youtube.com/watch?v=2g2SkaOOXmIで試してみる.題名は,「1992 - tokusô exceedraft (特捜エクシードラフト) OP」.まさにおあつらえ向きである.
これを,以下のようにスクレイピングして取ってくると,こうなる.
uri = URI.parse("http://www.youtube.com/watch?v=2g2SkaOOXmI") body = Net::HTTP.get_response(uri).body title = Scraper.define { process "title", :title => :text result :title }.scrape(body) puts title => "YouTube - 1992 - tokusô exceedraft (特捜エクシードラフト) OP"
どうみてもUTF-8じゃないし,そもそもUTF-8なら,ボクのターミナルはこういう風に出力しない約束になっているはずだ.そうだ,NKF#guessしてみよう.
> NKF.guess(title) => 5 > NKF::ASCII => 5
orz
おかしいやろ,ASCIIでôなんかどう考えても無理やろ….何が変なんだろう.そりゃscrAPIが変なんだろうけども.
これは,もちろんKconv#guessでも結果は同じで,ASCII.ASCIIをUTF-8に変換する方法なんてあるのか?KconvでもIconvでも変換できないし,どうすれば良いんだろう.
正直言うと,titleぐらいは正規表現で速攻で取って来れるから良いものの,もっと細かい部分になるとなぁ.とりあえず,今はできないと言う事で.また調べるべきか.
追記
解決した.変だったのは,scrAPIではなくHTMLのパースに使っていたライブラリだった.
id:omochist:20060926:1159282415