いま現在話題のトレンドワードをある程度リアルタイムでとれるAPI的なやつで
なんか手軽なのないかなと探してみたら、
kizasi.jpのサービスで「kizAPI(きざっぴ)」ってのがあった。
利用規約はこちら(PDF)。
ブログエントリーからの統計ってことで、リアルタイム性でいえば
ツイッターとかのが良いのかもしれないけども、まあ手軽そうなので試してみた。
いくつかAPIがあるけども、注目語のランキングとるのは
「http://kizasi.jp/kizapi.py?type=rank」をGETするだけで良いようだ。
もちろん直接ブラウザに打ってもXMLが返ってくるけども、
なんかゴミが多いというか、いろいろ邪魔くさいので必要なとこだけ取りたい。
C#からLINQ to XMLでパースするとこんな感じ。
var url = "http://kizasi.jp/kizapi.py?type=rank"; var req = WebRequest.Create(url); using (var res = req.GetResponse()) using (var stream = res.GetResponseStream()) { var root = XElement.Load(stream); var items = root.Element("channel") .Elements("item") .Select(e => new { Word = e.Element("title").Value, Date = DateTime.Parse(e.Element("pubDate").Value) }); //とりあえず出力 foreach (var item in items) { Console.WriteLine(item.Word + " (" + item.Date + ")"); } }
ところがこのまま実行するとWebExceptionが返る。
サーバーによってプロトコル違反が発生しました. Section=ResponseHeader Detail=CR の後には LF を指定しなければなりません。
どうやらサーバ側の規約違反っぽいやつ。
なおしてよーって言うわけにもいかないので無視する方法を探す。
調べた感じ、useUnsafeHeaderParsingをアプリ構成ファイル(app.config)に
書くのが一般的みたいだが、ここではコードから設定してしまう。
//※System.Configurationの参照を追加 var conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var section = conf.GetSection("system.net/settings") as SettingsSection; section.HttpWebRequest.UseUnsafeHeaderParsing = true; conf.Save();
これで↓のように取れました。
>プロ野球開幕 (2016/03/26 16:47:38) >開幕戦勝利 (2016/03/26 16:47:38) >日本死ね (2016/03/26 16:47:38) >ショーンK (2016/03/26 16:47:38) >花冷え (2016/03/26 16:47:38) >陽光桜 (2016/03/26 16:47:38) >球春到来 (2016/03/26 16:47:38) >金本監督 (2016/03/26 16:47:38) >都庁前 (2016/03/26 16:47:38) >民進党 (2016/03/26 16:47:38) >野球賭博 (2016/03/26 16:47:38) >トサミズキ (2016/03/26 16:47:38) >修了式 (2016/03/26 16:47:38) >人材紹介会社 (2016/03/26 16:47:38) >開幕投手 (2016/03/26 16:47:38) >青函連絡船 (2016/03/26 16:47:38) >キャッシング会社 (2016/03/26 16:47:38) >第63回 (2016/03/26 16:47:38) >人工知能 (2016/03/26 16:47:38) >ショウジョウバカマ (2016/03/26 16:47:38) >エイジング (2016/03/26 16:47:38) >開花状況 (2016/03/26 16:47:38) >復活祭 (2016/03/26 16:47:38) >ジャスティス (2016/03/26 16:47:38)
titleとpubDate以外にkizasi.jpのページへのリンクとか
関連語とかも取れるけど、まあ使わなそうかな。
pubDateってのもこれランキング自体の更新時刻なので、
全項目で取る意味はあんまないかも。
このrankAPIの関連語はちょっとフォーマットが親切でないので、
ほしいときには「関連語検索」ってほうのAPIを使うのが良いかと思います。