Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

自分のはてなブログの投稿状況データをPowerBIで可視化する:CData XML ODBC Driver

先日公開した以下の記事で書いたのですが、自分のはてなBlogでどんな投稿をしているかPowerBIで可視化してみました。

kageura.hatenadiary.jp

最終的にできあがったのは以下のようなレポートです。

f:id:sugimomoto:20200105231417p:plain

この記事ではこのようなレポートを作成するためのデータ取得方法について解説していきます。

その前にちょっとAPIの解説

はてなBlogにはいくつか外部からはてなBlogにアクセスするためのAPIが提供されています。

最初2つのAtomRSSはおそらく使ったことがある方も多いと思いますが、Blogの更新状況を取得するためのAPIプロトコルです。

AtomPubはAtomのように外部からBlog記事を参照できる機能はもちろんですが、記事の登録や更新にも対応しているのがポイントとなるAPIです。

最後のoEmbed APIこちらの解説記事がわかりやすいかと思いますが、名前の通り外部コンテンツへの埋め込みおよびその記事の参照用に特化したプロトコルです。

今回APIとして必要な要件は、過去の全記事に関する情報が参照でき、かつカテゴリ情報も取得する必要がありました。

そして、実はその要件を満たしたAPIは「AtomPub」一択です。

前2つのAtomRSSは参照用としては優れているのですが、最新の記事参照のみに特化しているため、ページネーション、つまり過去記事の参照ができません。

oEmdedは参照するためにどの記事を参照したいか、といったURLが必要となるため、言わずもがな。

AtomPubはページネーションをサポートし、カテゴリも取得できるので、今回のようなユースケースにはうってつけのAPIとなっていました。

実装方法

それでは実際に実現する方法なのですが、この記事でははてなBlogデータをAtomPub経由で取得するためのコネクタを使うので、特にプログラミングの要素は出てきません。

なので必要なものは、以下の「CData XML ODBC Driver」と

XML ODBC Driver - ODBC | ODBC Drivers | ODBC Connection | ODBC API

XML ODBC Driverを通じてはてなBlog AtomPubに接続できるようにするための設定ファイルだけです。

github.com

あとは分析用に Microsoft Power BIを使いました。Tableauなどでも同じ用に実施できると思います。

powerbi.microsoft.com

API Keyと接続URLの取得方法

それでは実際にデータの取得を行っていきたいと思いますが、AtomPub APIは接続するために「接続用URL」と「API Key」が必要となります。

はてなBlogの管理画面から「設定」→「詳細設定」に移動

f:id:sugimomoto:20200105231432p:plain

AtomPubにルートエンドポイントとAPIキーの情報があるので、これを利用します。

f:id:sugimomoto:20200105231444p:plain

設定ファイルをダウンロード

次に接続用の設定ファイルをダウンロードします。通常設定ファイルは「CData XML Driver」用で都度カスタマイズする必要があるのですが、今回は私が作成してしまっているので、以下のURLからダウンロードして利用できます。

github.com

上記URLから「HatenaBlogFeeds.rsd」というファイルをダウンロードし、任意のフォルダに配置(例:C:\CData_REST\Hatena)します。

f:id:sugimomoto:20200105231451p:plain

CData XML ODBC Driverのインストールとセットアップ

続いて「CData XML ODBC Driver」をインストールします。有償の製品ですが、30日間のトライアルバージョンがあるので、今回はそれを利用します。

以下のURLから評価版をダウンロードし

http://www.cdata.com/jp/drivers/xml/odbc/

f:id:sugimomoto:20200105231457p:plain

ダウンロードしたexeファイルを実行して、セットアップを行います。

f:id:sugimomoto:20200105231507p:plain

セットアップ完了後、DSN構成画面が表示されるので、以下のように必要な情報を入力します。

f:id:sugimomoto:20200105231513p:plain

以上で下準備は完了です。

PowerBI からはてなBlog AtomPub APIに接続

それではPowerBIに はてなBlogのデータをロードしてみましょう。

PowerBIを立ち上げて、「データを取得」をクリックし

f:id:sugimomoto:20200105231520p:plain

ODBC」接続を選択します。

f:id:sugimomoto:20200105231527p:plain

先程設定したDSN名を選択して「OK」をクリックすると

f:id:sugimomoto:20200105231533p:plain

以下のようにはてなBlogのデータがフラット化されて取得できるテーブルが選択できるようになっています。これを読み込みます。

f:id:sugimomoto:20200105231538p:plain

以下のような感じでデータが取得されました。設定ファイルが自動的にAtomPubのページネーションもするようになっているので、過去の全記事を取得してくるようになっています。

f:id:sugimomoto:20200105231544p:plain

あとはこのデータを使って、PowerBIの機能でビジュアライズするだけです。

f:id:sugimomoto:20200105231555p:plain

その他:カテゴリの取り方

ちなみに、デフォルト状態のカテゴリ情報は以下のようにカンマ区切りになっているのですが、

f:id:sugimomoto:20200105231603p:plain

これだとリレーショナルなデータになっていないので、うまく可視化できない部分が出てきますよね?

これを以下のようにBlogIDとリレーションされた形式にする方法もあります。

f:id:sugimomoto:20200105231612p:plain

方法は簡単で、まず元になっているクエリを複製し、適当に「Category」といった名前に変更、IdとCategoryTerm以外の列を削除します。

f:id:sugimomoto:20200105231619p:plain

次に「列の分割」から「区切り記号による分割」を選択し

f:id:sugimomoto:20200105231626p:plain

「コンマ」の区切りごとで列を分割します。

f:id:sugimomoto:20200105231631p:plain

以下のようなデータができあがるので、この項目を選択して、「列のピボット解除」を実行します。

f:id:sugimomoto:20200105231636p:plain

すると以下のようにIDに各カテゴリがリレーションされた形のデータができあがります。「属性」列は最終的に消してしまっても大丈夫です。

f:id:sugimomoto:20200105231651p:plain

f:id:sugimomoto:20200105231658p:plain