APIサービス

[APIサービス] 登録だけで使えるWebAPIサービス一覧

ページや記事作成時に、自動でデータを取得したいなーと思う事などよくあります。大手のWebサービスのデータベース情報や、掲示板などのデータを共有して使う事が出来るのがWebAPIサービスで、アプリケーションキー発行だけで無料で使えるものが色々あります。と、いうわけで便利そうなものをまとめてみました。

APIの概要

「RestAPI」では、クロスドメイン間でのリクエストに対応するため「jsonp」を使ってGETリクエストによる通信を行っています。jsonpはAjax通信のため、javascriptで記述したり、PHPのcUrlによるリクエスト処理が可能です。アプリケーションIDを発行し、GETリクエスト用パラメータを生成して通信を実行します。

OAuth認証を使うケースでは、シリアルキー(一般的にpublicと、private)を発行して、サーバー間で通信を実行します。リクエスト単位でトークンを発行して、セキュアに通信を行う手段として採用されています。PHPではOAuthを取り扱うための「OAuthクラス」があるので、比較的簡単にOAuthを使った処理を記述できると思います。

どちらもXMLを取り扱い、それぞれのアプリケーション固有のスキーマを持つため、PHPならSimpleXMLクラスや、json_decodeなどを使って解析したり、PEARのパッケージを使ったりします。

独自のプログラムを組まなくても手軽に使えるサービスを提供しているところ(ウィジットや、ブログパーツなどを配布)もあるので、その場合はiframeやXFBMLなどをHTMLのソースコードに埋め込めば簡単に使うことができます。

APIサービスを利用する際は、マナーとして提供元の「クレジット表示」を行う事を忘れないようにします。

ソーシャルサービス

FacebookAPI

アプリ登録を行うと、管理用ページが用意され、Facebook用の各種言語SDKを使ってfacebook上のあらゆるデータへアクセスできるようになります。ログイン認証の共有や、投稿管理なども可能ですが、個々のユーザーにアプリケーションとの連動を許可してもらう必要があります。Rest、OAuthに対応しています。PEARにもfacebook向けパッケージ(α版)が公開されています。

TwitterAPI

twitter上のツイート取得、検索、ハッシュタグ取得などのアクセスができるようになります。また、twitterアカウントとの連動を行って、ログイン認証の共有や、投稿管理なども可能ですが、個々のユーザーにアプリケーションとの連動を許可してもらう必要があります。RestAPIとStreamingAPI(twitterAPIを通さずサーバー上のデータへ直接アクセスするもの)の2つが利用可能なようです。PEARにもtwitter向けパッケージ(β版)が公開されています。

はてなブックマーク API

はてなブックマーク上のブックマークデータ、ユーザー検索、人気ブックマーク検索などができます。Rest以外にも、POSTや、atom、OAuthなど様々な通信プロトコルによってリクエストを行うようです。PEARにもはてなブックマーク向けパッケージ(α版)が公開されています。

画像・動画共有サービス

Youtube API

Googleが提供するWebサービスの1つで、Youtube上の動画データにアクセスし、ページにYoutube動画を埋め込むためのAPIです。プレイヤーのコントローラーなども拡張できます。PEARにもYoutube向けパッケージ(α版)が公開されています。

Picasa Web Albums Data API

Googleが提供するWebサービスの1つで、picasa上のユーザーデータ、画像データ、ビデオデータ、タグ検索などを利用できます。ログイン認証共有も可能なため、写真を加工するサービスや、データを取り込みたい際に使えると思います。

flickr API

Yahooが提供するWebサービスの1つで、flickr上のユーザーデータ、画像データ、グループデータ、ブログデータなどを利用できます。ログイン認証共有も可能なため、写真を加工するサービスや、データを取り込みたい際に使えると思います。

プロダクト・商品情報など

Amazon Product Advertising API

amazonから商品やレビュー、ランキング、ショッピングカート、欲しいものリストなどの情報を取得できます。SOAPでの通信も可能です。AmazonAPI専用のWebアプリケーションなども色々あるため、そちらを使う方が効率がいいかもしれません。PEARにもAmazonWebサービス向けパッケージ(β版)が公開されています。アフィリエイトに対応しているため、Amazonアフィリエイトアカウントを保有していれば、商品検索とアフィリエイトコード生成を同時に行う事が出来ます。

YahooショッピングAPI

YahooJapanのショッピングカテゴリーから商品名検索やカテゴリー検索、ランキング検索などを行ってデータを取得できます。1つのアプリケーションIDで、Yahoo検索、Yahooニュース、地図、天気予報、知恵袋、オークションAPIなど様々なものが利用できます。ショッピングAPIはアフィリエイトにも対応しているため、Yahooアフィリエイトアカウントを保有していれば、商品検索とアフィリエイトコード生成を同時に行う事が出来ます。PEAR上にもYahooJapan用のパッケージ(α版)が公開されています。
バリューコマースAPI
バリューコマース社が提供するサービスです。アカウント登録を行うと、Yahoo以外にもトラベル系の広告や、提携企業広告などの管理、コード生成がオンラインで使えるようになります。データベースへのアクセスも可能なようです。

楽天ショッピングAPI

楽天のデータベースから、商品名検索やカテゴリー検索、ランキング検索を行って情報を取得できます。楽天トラベル、楽天オークション、楽天ブックスなども合わせて利用可能です。

価格.com WEBサービス

価格.comから商品検索、アイテム情報取得、掲示板データ取得、プロバイダ検索を利用できます。

グルメ情報

食べログAPI

住所(経度、緯度)を元に近場のレストラン検索を行ったり、食べログ上の「口コミ」「画像」などのデータを利用できます。

ぐるなびWebサービス

ぐるなびのデータベース上から、レストラン検索、都道府県、業種カテゴリー検索などを行う事が出来ます。取得できる情報は「店舗情報」が主なようです。

その他いろいろ

GoogleAPI

Googleは様々なWebアプリケーション開発のための機能を提供しています。GoogleMapsAPI以外にも、AndroidAPI(アンドロイド向けサービス開発用プラットフォーム)、CalendarAPI(Googleカレンダーとの連動)、GmailAPI(Gmailとの連動)、GoogleWebFonts(オンラインフォントストレージ)、GoogleLibraries(javascriptライブラリをGoogle上からロード)、など色々あります。Googleが提供するサービスのほとんどは、APIを使って開発を行う事が可能だと思います。Web開発だけでなく、Chrome用の拡張機能開発や、ゲーム開発など様々です。目的に応じて色々検索してみると楽しいです。

[GoogleGEO] PHPを使って住所から経度と緯度を取得する方法

GoogleMapsAPIを使ってGoogleMapを埋め込む際、経度と緯度の情報が必要になります。わざわざ1つ1つ手動で取得するのは大変なので、住所文字列からGEO情報を取得します。後でGoogleMapにバイアスをかけて情報を得たり、マーカー(ポイントフラグ)を地図上に配置したり、ストリートビューと組み合わせて使うなど色々便利です。この記事は、PHPでGEOの情報を取得した時の覚書きです。

Google Geocoding API公式ドキュメント

GEOを使用する際のルール

Googleの規約で、GEOを使う際は1日1,500回までという上限が定められています。同ipから1500回までのアクセスが許可されている、という事です。Google Maps API Premierに登録(アクセス数に応じて課金方式)すると、1日あたりの上限が10万回になります。また、GEOを使ったデータ取得を行った際は必ずGoogleマップと組み合わせて使用する事というルールがあり、一般利用でGoogleMapsの表示回数は25,000回までとなっています。

JSONを使ってデータを取得

[googleGEO] http://maps.googleapis.com/maps/api/geocode/json

[googleGEO SSL] https://maps.googleapis.com/maps/api/geocode/json

SSLまたは普通のURLにGETパラメータを渡してリクエストを行います。GETに指定するパラメータは、sensorとaddressが必須です。個人情報が含まれるページからのアクセスの場合、SSLで通信します。

GETのパラメータ

  • address

    都道府県~番地までの住所(日本語可)

  • latlng

    経度と緯度が事前にわかっていて、GEOの詳細データを取得したい場合はaddressの代わりに指定

  • bounds

    地図の矩形ポイント(北東と南西)を指定して、大きいバイアスをかけた情報を得たい場合。

  • region

    地域コード。日本ならjp。おおよその判定基準になります。

  • language

    結果を返す言語。指定がなければリクエスト元のドメインによって自動判定。日本語ならja。指定しなくても問題ありません。

  • sensor

    必須です。GPS搭載のデバイスなどから現在の位置などを元にリクエストする時はtrue、そうでなければfalse

PHPでデータを取得

  1. <?PHP
  2. // GET用のパラメータ作成
  3. $parametar = "?sensor=false&region=jp&address=".urlencode(mb_convert_encoding('住所の文字', 'UTF8', 'auto'));
  4. $datas = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json'.$parametar);
  5. // JSONデータをPHPの値に変換する
  6. $geo = json_decode($datas);
  7. $results = $geo->results[0];
  8. $status = $geo->status;
  9. ?>

レスポンスデータの解析

住所(address)から判定された結果($geo)には、resultsとstatusが含まれています。ステータスエラーが発生した場合、statusは"OK"以外の文字列になります。PHPにデコードすると、オブジェクト形式で操作する事ができるようになり、結果$resultsには次のような値が格納されています。

($resultsの内容)

  • address_components (オブジェクトを格納したインデックス配列)

    住所を構成する部品についての情報が格納されています。(国、都道府県、市町村、番地など) 各オブジェクトには、それぞれの部品にあたる long_name(文字列)、short_name(文字列)、types(インデックス配列)をキーとした値が格納されています。typesには住所を分割した際どこの区分に当たるのか?を参照できる情報が格納されています。(countryやlocality)

  • formatted_address (文字列)

    address_componentsの値を組み合わせて、カンマ区切りにした文字列。国,都道府県,市町村,番地の順)

  • geometry (オブジェクト形式)

    GEOに関する重要な情報が含まれます。バイアス矩形を表すbounds(オブジェクト形式)、経度と緯度の情報を含むlocation(オブジェクト形式)、GEOの正確さがどのレベルなのかを表すlocation_type(定数文字列)、ビューポートの開始位置として適しているおおよその矩形を表すviewport(オブジェクト形式)をキーとして構成されています。矩形の場合、さらにnortheast(北東)とsouthwest(南西)をキーとするオブジェクトが含まれています。

今回は、経度と緯度が知りたいので、$resultsをベースに次のように記述します。$latと$lngはそれぞれfloat形式(7桁の少数)です。

  1. <?PHP
  2. // GET用のパラメータ作成
  3. $parametar = "?sensor=false&region=jp&address=".urlencode(mb_convert_encoding('住所の文字', 'UTF8', 'auto'));
  4. $datas = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json'.$parametar);
  5. // JSONデータをPHPの値に変換する
  6. $geo = json_decode($datas);
  7. $status = $geo->status;
  8. // エラー判定をして値を取得する
  9. if($status == "OK"){
  10. $results = $geo->results[0];
  11. $geometry = $results->geometry;
  12. $location = $geometry->location;
  13. $lat = $location->lat; // 緯度を取得
  14. $lng = $location->lng; // 経度を取得
  15. }
  16. ?>

後は取得した経度と緯度の値を使ってGoogleMapを作成し、ページ上に掲載します。保存できるなら保存しておいて、後から取り出して再利用します。(毎回GEOアクセスせずに済みます)