PHPを使用してDataMarketのデータを呼び出す
DataMarketのAPIはODataに対応しています。ODataはHTTP層の上でATOMPubやJSONやXMLの技術を使用してデータを交換していて、C#以外の言語でも使用可能です。本稿では参考としてDataMarketのAPIをPHPから呼び出すサンプルを紹介します。なお、筆者はXAMPP1.7.3を使用して動作確認を行っています。
準備
OData用のSDKは各種用意されています。ダウンロードページへのリンクを参考のため紹介します。
今回はPHP用のため、ダウンロードページからOData SDK for PHPをダウンロードしてください。
OData SDK for PHPを解凍したらframeworkフォルダ内のすべてのファイルを任意のフォルダにコピーしてください。そして、この任意のフォルダをPHP.iniのinclude_pathディレクティブに追加してください。また、PHP.iniファイルにODataSDKのライブラリ類を参照するためのODataphp_pathディレクティブを新規に追加して、include_pathディレクティブ同様にframeworkフォルダ内のすべてのファイルをコピーした任意のフォルダを指定してください。
また、OData SDK dor PHPはCURLエクステンションとXSLエクステンションが必要となるので有効化してください。
phpt.iniの設定例を以下に示します。なお、frameworkフォルダ内のファイルはC:\PHPLib\odataphpフォルダ以下に解凍しています。また、XSLエクステンションはPHPのバージョンにより設定方法が異なります。筆者の環境のようにXAMPP1.7.3の場合はデフォルトで有効化されているため、設定例に記載していません。
extension=php_curl.dll include_path = ".;C:\PHPLib\odataphp" ;OData SDK for PHP Library Path ODataphp_path = "C:\PHPLib\odataphp"
プロキシクラスの作成
PHPの場合はコマンドラインからプロキシクラスのファイルを生成します。なお、PHPDataSvcUtil.phpファイルはframeworkフォルダ以下に存在します。/uriには[Service root URI]を使用します。/outにファイルの出力先フォルダを指定します。今回は「2006 - 2008 Crime in the United States (Data.gov)」のデータを使用しますが、その際のコマンドラインは以下のようになります。
php PHPDataSvcUtil.php /uri=https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes/ /out=C:\PHPLib\odataphp
実行すると「datagovCrimesContainer.php」というファイルが作成されます。これをプロクシクラスのファイルとして使用します。
コードの作成
プロキシクラスのファイルを使用して以下のコードを実装します。
<?php
require_once 'datagovCrimesContainer.php';
$svc = new datagovCrimesContainer();
$svc->Credential = new WindowsCredential
(YOURLIVEID, YOURACCOUNTKEY);
$qry = $svc->CityCrime();
$qry->OrderBy("Year");
$qry->Filter("State eq 'Texas' and City eq 'Dallas'");
$response = $qry->Execute();
echo "<table border=3>";
echo "<tr>";
echo "<th>Year</th>";
echo "<th>State</th>";
echo "<th>City</th>";
echo "<th>Population</th>";
echo "<th>ViolentCrime</th>";
echo "</tr>";
foreach ($response->Result as $row)
{
echo "<td>" . htmlspecialchars($row->Year) . "</td>";
echo "<td>" . htmlspecialchars($row->State) . "</td>";
echo "<td>" . htmlspecialchars($row->City) . "</td>";
echo "<td>" . htmlspecialchars($row->Population) . "</td>";
echo "<td>" . htmlspecialchars($row->ViolentCrime) . "</td>";
echo "</tr>";
}
echo "</table>";
?>
認証情報を定義するWindowsCredentialクラスでは、それぞれの環境に合わせて、第1引数にDataMarketに登録しているLiveIDに、第2引数にアカウントキーを設定してください。
このコードをそのままサーバ上で実行すると以下のような表示になると思います。

サンプルコードではフィルタリングを行ってテキサス州のダラスのデータのみを取得していますが、フィルタリング以外のクエリオプションをサポートしているので、自由に改変して呼び出してください。
主なクエリオプションは以下のとおりです。
| オプション | 内容 |
| $top | 結果から取得するデータの最大数を指定します |
| $skip | 結果から指定分のデータをスキップして取得します |
| $filter | フィルタリングを行います |
| $orderby | 特定の列でソートを行います |
| $select | 特定のデータのみを取得します |
| $count | 取得するデータの数を指定します |
なお、DataMarketがサポートしているクエリオプションの詳細はmsdnのサイトを参照してください。
その他の言語からもOData SDKを使用することで容易にDataMarketを使用できるので、皆様も得意な言語を使用してみてはいかがでしょうか。
まとめ
さて、実際に使用してみましたが、いかがだったでしょうか。思った以上に簡単に使用できることに驚かれたのではないかと思います。DataMarketでは統一された使い方でさまざまなデータに容易にアクセスできます。また、無償のデータもかなりの数が揃えられているので、無償のデータだけでも使用することで面白い結果がでてくるのではと期待しています。まずは触ってみないと感触がつかめません。幸いなことにDataMarketはインターネットに接続する環境さえあれば無償で使用でき、言語もかなり対応しているため、後は我々開発者の発想の勝負です。
最後に、データを所有している事業者の方は、ぜひ登録してみてください。筆者の聞いた限りでは日本のマイクロソフト社でもデータ登録に協力していて、既に自社データを登録した企業もあります。自社のサイトでマッシュアップ基盤として提供しているデータを「市場」に出すことで多くの人の目に触れることができるようになります。もちろん課金することで収入にすることもできますが、想像した以上の使い方をしてもらうことで、自社で眠っていたデータが世の中に広くアピールできるとともに社会貢献になる点も見逃さないでください。しかも、DataMarketという場所を使用することで英語圏という新しい市場に対して簡単に自社及び自社のデータをアピールすることが可能です。ぜひ、日本からも登録する企業が増えることを期待しています。
