[C#]kizAPI(きざっぴ)でブログの流行ワードを取得する

いま現在話題のトレンドワードをある程度リアルタイムでとれる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を使うのが良いかと思います。