office 2013[Excel 2013]Web関数を使ってマッシュアップ
このリクエストURLから得られる結果(XML)をWEBSERVICE関数で取得するには
=WEBSERVICE("http://api.twitter.com/1/statuses/user_timeline/kinuasa.xml")
とすれば良いのですが、結果の文字数が多すぎるとエラーになってしまうのでcountオプションを付けて取得する件数を指定することにします。
=WEBSERVICE("http://api.twitter.com/1/statuses/user_timeline/kinuasa.xml?count=5")
"office2013 20216-1-30-1"
office 2013でユーザーIDは自由に入力できるようにしたいので、セル(B2)で指定します。
=WEBSERVICE("http://api.twitter.com/1/statuses/user_timeline/" & $B$2 & ".xml?count=5")
"office2013 20216-1-30-2"
このXMLから目的の値を取得するにはFILTERXML関数を使って、XPath形式で指定します。
=FILTERXML($B$4,"/statuses/status[1]/text")
※ セルB4のXMLから目的の値(最初のツイート)を取得
"office2013 20216-1-30-3"
WEBSERVICE関数とFILTERXML関数をまとめると下記のようになります。
=FILTERXML(WEBSERVICE("http://api.twitter.com/1/statuses/user_timeline/" & $B$2 & ".xml?count=5"),"/statuses/status[1]/text")
"office2013 20216-1-30-4"
これでTwitter APIを利用してツイートを取得できることが確認できました。
次はネガポジAPIの確認です。
このAPIを利用するにはAPIキーが必須になるので、利用登録フォームからメールアドレスを登録してAPIキーを取得します。
(※ メールアドレスを登録するとすぐに下記のようなメールが送られてきます。)
Mextractr APIキー発行お知らせメール
ご登録手続きありがとうございます。
次のAPIキーをご利用ください。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
なお、JSONP版ご利用時のURL登録の追加または変更をしたい場合は、
下記お問い合わせ先までご希望をお寄せください。
APIの使い方はMextractr ネガポジAPIにある通りで、
http://ap.mextractr.net/ma8/negaposi_analyzer?out=atom&apikey=xxxxx&text=(URLエンコードした文字列)
のようにapikeyパラメータにAPIキーを、textパラメータにURLエンコードした文字列を渡すだけです。
この結果をTwitter APIのようにWEBSERVICE関数を使って取得する場合は下記のようになります。
=WEBSERVICE("http://ap.mextractr.net/ma8/negaposi_analyzer?out=atom&apikey=" & $B$2 & "&text=" & ENCODEURL($B$3))
※ B2:APIキー , B3:対象文字列
"office2013 20216-1-30-5"
FILTERXML関数でネガポジ度のみを取得する式は下記のようになります。
=FILTERXML(WEBSERVICE("http://ap.mextractr.net/ma8/negaposi_analyzer?out=atom&apikey=" & $B$2 & "&text=" & ENCODEURL($B$3)),"/feed/entry/content/negaposi/@value")
"office2013 20216-1-30-6"
これで2つのAPIの動作確認ができたので、後は組み合わせるだけです。
セルB4:Twitter ユーザーID
セルC4:Mextractr APIキー
セルC7:
=IF(ISERROR(FILTERXML(WEBSERVICE("http://api.twitter.com/1/statuses/user_timeline/" & $B$4 & ".xml?count=5"),"/statuses/status[1]/text"))=TRUE,"",FILTERXML(WEBSERVICE("http://api.twitter.com/1/statuses/user_timeline/" & $B$4 & ".xml?count=5"),"/statuses/status[1]/text"))
セルD7:
=IF(ISERROR(FILTERXML(WEBSERVICE("http://ap.mextractr.net/ma8/negaposi_analyzer?apikey=" & $C$4 & "&out=atom&text=" & ENCODEURL($C7)),"/feed/entry/content/negaposi/@value"))=TRUE,"",FILTERXML(WEBSERVICE("http://ap.mextractr.net/ma8/negaposi_analyzer?apikey=" & $C$4 & "&out=atom&text=" & ENCODEURL($C7)),"/feed/entry/content/negaposi/@value"))
"office2013 20216-1-30-7"
※ ファイルはコチラからダウンロードできます。
以上のように、Office Excel 2013ではWeb関数を利用することでマクロを使わずに簡単にマッシュアップすることができます。
ただし、WEBSERVICE関数の動作は非常に遅いため、Web APIを組み合わせれば組み合わせるほど結果を取得するまでに時間が掛かるようになりますので、その点だけは注意が必要です。
※ 計算方法が自動になっていると再計算処理にもかなりの時間が掛かるため、個人的には自動計算を切って必要な時だけ手動で計算することをお薦めします。