Flickrから写真のリストを取得する(ASP.NET編)

昨日のこの記事では、JavaScript(jQuery)を用いてクライアントサイドでFlickr写真の一覧を取得する、なんてやっていましたが、今回はサーバサイドで同じことをやってみます。

サーバコントロールのボタンにイベントハンドラを定義して、そのボタンを押したらサーバサイドで一覧取得、適当なTextboxに結果を表示する、といった感じに単純化しましょう。

やや無駄の多いコードですが、やっていることは単純です。クエリの引数の意味は、jQueryの例と同じです。

string url_base = "http://www.flickr.com/services/rest/?api_key=28b65234b525030f0000000000000000&user_id=4639000000000&per_page=500&";
string query_base = "method=flickr.photos.search&min_taken_date={0}&max_taken_date={1}";
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
string query = String.Format( query_base, "2010-07-12 00:00:00", "2010-07-12 23:59:59" );
xml.Load(url_base + query);
tbResult.Text = "";
string status = string.Format( "Stat: {0}\n", xml.SelectSingleNode("rsp").Attributes["stat"].Value );
tbResult.Text += status;
System.Xml.XmlNodeList list = xml.GetElementsByTagName("photo");
foreach (System.Xml.XmlNode node in list)
{
    string photos = string.Format("id={0}, owner={1}, secret={2}, server={3}, farm={4}, title={5}\n",node.Attributes["id"].Value, node.Attributes["owner"].Value,node.Attributes["secret"].Value,node.Attributes["server"].Value,node.Attributes["farm"].Value,node.Attributes["title"].Value);
    tbResult.Text += photos;
}

基本的に、サービスAPIのURLを生成し、REST方式つまり単純にXMLドキュメントをゲット、あとはDOMにて各要素にアクセスするだけです。

今回、取得したドキュメントの整形は不要なのでそのままにしてありますが、URLを生成したいとかいう場合には、XSLTで変換してやればよいでしょう。

なお、Flickrの写真にダイレクトにアクセスするためのURLは、以下のような規則で生成します。

http://farm{farm}.static.flickr.com/{server}/{id}_{secret}_{size}.jpg

これによると、farm, server, id, secretがあればURLを生成できます。XMLドキュメントに含まれないsizeについては、s(小)、b(大)、t(サムネール)、m(中)などを指定してやれば、相当するサイズの画像にアクセスできます。


http://farm5.static.flickr.com/4082/4742072835_3ddc8b7711_s.jpg

取得したデータをデータベース化して、この生成規則さえ覚えていれば、何か面白いことができそうですね。それについては、また。

コメント