BLOG



flickrxflash_bnr.jpgSINAP 柿内です。 この連載では写真共有サイトFlickrのAPIを使い、FlickrとFlashを連携させて、FlashへFlickrの画像を読み込んだり、Flashから写真をアップする等のアプリケーションを作る方法をご紹介します。

第1回目はFlickr APIを使用するため、Flickrアカウント及びAPI KEYの取得方法をご紹介しました。今回はFlickr APIの基本的な仕組みをお話しして行きます。

APIの仕組み

APIの仕組みとはいっても、実際は複雑な動作をしている訳ではありません。クライアントからのHTTP Requestに対し、対応したHTTP Responseをユーザーが選択したフォーマットで返すだけです。セッション管理も行われません。またソケット通信の様な永続的な通信もFlickr APIでは用意されてません。1つのリクエストに対し1つのレスポンスを返すという非常にシンプルな仕様になっていますので、理解しやすいでしょう。逆にセッション管理が必要な複雑なアプリケーションを作成するには、自分で用意する必要があります。

APIのリクエストでは必ず次のパラメーターが必要です。

メソッド:APIのなかでどの機能を使うかを選択します。変数名は"method"です。
API KEY:APIへのアクセス権限がある事を証明する、キーとなるものです。変数名は"api_key"です。
その他パラメータ:選択するメソッドによって、必要なパラメータが変わってきます。上記2つは必須ですが、その他パラメータはメソッドにより必須であったり、オプションであったりします。


サポートされているリクエストのフォーマット

Flickr APIではリクエストのフォーマットとして3つサポートされています。

REST
GETとPOSTを使ったHTTP リクエストに対して、XML形式のデータが返される方法です。通常のブラウザへURLを入力してアクセスした場合と同じ形式です。通常のWebページではhtml形式のデータが返されますが、ここではXML形式のデータが返されます。
Flickr APIにアクセスするには一番シンプルな形で、もちろんFlashでもGET POSTを含んだリクエストはサポートされています。
今回の連載ではこのRESTを使用します。

XML-RPC
HTTPリクエストのボディ部分がXML形式のデータで表現されていて、そのレスポンスもXML形式のデータとなってます。
FlashではXML−RPC通信を実行するコンポーネントは用意されていませんので、独自のクラスを開発するか、既に開発されたライブラリを利用する必要があります。

SOAP
XML-RPCを拡張した通信の方式です。XML−RPCと同様にXML形式のデータをやり取りし、XML-RPCより細かな制御ができますが、その分データのフォーマットは複雑になります。
XML-RPC同様、FlashではSOAP通信を実行するコンポーネントは用意されていません。

サポートされているレスポンスのフォーマット

Flickr APIではレスポンスのフォーマットとして5つサポートされています。レスポンスのフォーマットはリクエストで指定する事ができます。

REST
XML形式のデータで、各パラメータの値はテキストノードもしくは属性として渡されます。

XML-RPC
XML−RPC規格のXML形式のデータで、各パラメータの値はノード名もしくはテキストノードとして渡されます。

SOAP
SOAP規格のXML形式のデータで渡されます。特徴としてはNameSpaceXMLの形式として記述されています。

JSON
Flickr APIではJSON形式のデータ出力をサポートしています。JSONはJavaScriptのサブセットとして機能しますので、eval関数を使用する事でオブジェクトに変換できます。
AS3ではeval関数がサーポートされていませんが、オブジェクトの記述はJavaScriptと全く同じなので、外部のライブラリで用意されているeval関数を使用する事でobjectに変換することができます。

APIのテスト

それでは実際にAPIへリクエストを送信して、どんなレスポンスが帰ってくるのか見てみましょう。Flashとの連携ではもちろんFlashからリクエストを送るのですが、まずはブラウザを使ってAPIへの接続テストをしてみます。
今回はメソッドのなかで最も良く使われる、"flickr.photos.search"を使いAPIへ接続します。

flickr.photos.search
用途
Flickr上で公開されている写真を検索するメソッドです。レスポンスに写真本体のURLは含まれず、photoIDなどが返されます。

パラメータ

api_key(必須):API KEYの値です
user_id(オプション):検索する写真のユーザーIDを指定出来ます。NSIDを指定します。
tags(オプション):写真に付けられたタグで絞り込みを行います。
.
.
.

この他にもたくさんのパラメータが有りますので、詳しくはFlickr Serviceのページをご覧下さい。

NSID??
user_idにはNSIDという値を入れる必要があります。しかしながら、Flickrのページには自分のNSIDを参照するページが準備されていません。なかなか不親切な仕様です。ではNSIDはどうやって調べればいいのでしょうか。
アップロードした写真を表示すると以下の様なURLになっています
http://www.flickr.com/photos/37x7x46x@N0x/12345677/
このURLのなかの"37x7x46x@N0x"があなたのNSIDになります。

RESTのフォーマット

Flickr APIへRESTのリクエストを送るには下記のURLへアクセスします。

http://api.flickr.com/service/rest/


今回は例として、自分のIDで公開されている写真のリストを取得するとします。
その時のパラメーターは

method : flickr.photos.search
api_key : あなたのapi_key(仮に1234f56cdalとします)
?user_id : あなたのNSID(仮に12345678@N00とします)

となります。

これをGETのパラメータに埋め込んだクエリストリングは

http://api.flickr.com/services/rest/?
method=flickr.photos.search&api_key=1234f56cdal&user_id=12345678@N00

となります。これをブラウザのアドレス欄に入力してアクセスすると、下記の様なレスポンスが帰ってきます。

<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
<photos page="1" pages="1" perpage="100" total="1">
<photo id="xxxxxxx" owner="xxxxx469@N0x" secret="80xxxxb3b3" server="xxx" farm="4" title="IMG_1347" ispublic="1" isfriend="0" isfamily="0" />
</photos> </rsp>

このようにAPIに接続といっても、処理は普通にブラウザでURLにアクセスしているのと変わりません。次回はこのリクエストをFlashから送り、実際にFlash上で写真を表示する方法を説明します。