はじめに
Flickrは、人気の高い写真共有Webサイトです。Web 2.0やソーシャル系のWebサイトの多くがそうであるように、Flickrもプログラミングインターフェースを提供しており、これによって、他のプログラムやWebサイトから、Flickrの写真、コメント、グループ、タグなどのデータを表示したり操作したりできます。筆者が最近作業を進めているあるWebサイトでは、ユーザーは写真や経歴や連絡先をアップロードしてホームページをカスタマイズでき、Flickrなど他のソーシャルWebサイトとも連携できます。具体的には、Flickrのスクリーンネームを指定すれば、Flickrで公開している写真をこのサイトのカスタムホームページにランダムに表示できます。
FlickrのAPIには多数のメソッドが含まれており、例えば、特定のFlickrユーザーの情報を返すflickr.people.findByUsername
や、特定の写真の情報を返すflickr.photos.getInfo
などがあります。このようなメソッドを呼び出すには、所定の書式のメッセージをFlickr API URLに送信します。結果はFlickr API URLから指定の書式で返されます。詳細については、Flickr APIのドキュメントを参照ください。
ASP.NETを使ったWebサイトからFlickrにアクセスしたいが、低水準の操作にはあまり興味がない、という人には、Flickr APIへのアクセスに便利なオープンソース.NETライブラリがあります。これらのライブラリをASP.NETアプリケーションから利用すれば、Flickr APIの詳細を知らなくても、低水準の書式化やメッセージ送信はライブラリに任せることができます。
この記事では、Sam Judson氏作のFlickr.NetというオープンソースFlickr APIライブラリについて説明します。前述の筆者のプロジェクトでもこのライブラリを利用しました。ここでは、特定のFlickrユーザーの写真をランダムに選択して表示するASP.NET Webサイトを作成する方法と、特定の写真のコメント(コメントがある場合)を表示する方法について解説します。また、Visual Basic版とC#版のサンプルコード一式を、この記事の冒頭のリンクからダウンロードできるサンプルファイルに収録しています。では始めましょう。
Flickr APIの概要
Flickr APIは、アプリケーション開発者がFlickr上のデータ(写真、ユーザー、コメント、ブログ、グループなど)を操作するために用意されています。Flickr APIを使用するには「APIキー」が必要です。このキーは、「Flickr API Keys page」から無料で入手できます。
Flickr上のデータには、各種許可設定とアクセスレベルが指定されています。例えば、Flickrアルバムに写真を追加したユーザーは、自分の写真を、公開、非公開、友人や家族といった限定ユーザーに公開、などに指定できます。また、自分の写真やユーザーアカウント情報をパブリック検索できないようにアカウントを設定することもできます。Flickr APIは、公開データと非公開データの両方へのアクセスを提供しています。ユーザーの非公開データにアクセスしたり、公開または非公開のデータを編集したりするには、アプリケーションからそのユーザーアカウントにアクセスするための認証を得ておく必要があります。それには、そのアプリケーションからのアクセスを許可することを示す「トークン」をユーザーから入手します。認証を得たら、ユーザーの代わりに、アプリケーションからアカウントに写真をアップロードしたり、写真を削除したり、コメントを追加したり、非公開写真を表示したりできるようになります。
この記事では認証の詳細は説明せず、Flickr.NetライブラリからFlickr APIを使って公開データを表示する方法のみ説明します。
Flickr.Netの概要
Flickr APIキーを取得したら、今度はFlickr.Netライブラリをダウンロードします。これはCodePlexのページからダウンロードできます。このプロジェクトのホームページから[Downloads]タブに移動し、Flickr.Net Binariesをダウンロードします。この中に入っているFlickrNet.dllファイルをASP.NETアプリケーションのBinフォルダにコピーします。
Flickr.Netライブラリの中心となっているのはFlickrというクラスです。このクラスを使用するとき、Flickr APIキーを指定する必要があります。これは、Flickrクラスのコンストラクタで次のようにして行います。
// C#: Create a Flickr object Flickr flickr = new Flickr("my_Flickr_API_Key"); ' VB: Create a Flickr object Dim flickr As New Flickr("my_Flickr_API_Key")
もっとよい方法として、Web.configでFlickr APIキーを設定する方法もあります。Web.configで設定しておくと、Flickr.Netライブラリを使用するページごとにAPIキーをコピー&ペーストする必要がなくなり、新しいキーを使うことになったとしても、1か所を修正するだけで済みます。この記事のサンプルコードでは、Web.configでキーを設定しています。また、Flickr.Netプロジェクトページの「Example Config File demo」には、Web.configでこの設定を行うための詳しい情報が示されています。
Flickrクラスをインスタンス化したら、そのインスタンスを使用してFlickr APIを呼び出すことができます。例えば、FlickrクラスのPhotosGetInfo(photo_id)
メソッドは、特定の写真の情報を返します(Flickrに表示されている写真のphoto_id
はその写真のURLを見ると分かります。URLはhttp://www.flickr.com/photos/your_nickname/photo_id/
という形式です)。例えば、次のようにすると写真の情報を取得できます。
// C#: Create a Flickr object Flickr flickr = new Flickr(); // Get information about photo 936265426 PhotoInfo photoInfo = flickr.PhotosGetInfo("936265426"); // Display the title lblPhotoTitle.Text = photoInfo.Title; ' VB: Create a Flickr object Dim flickr As New Flickr() ' Get information about photo 936265426 Dim photoInfo As PhotoInfo = flickr.PhotosGetInfo("936265426") ' Display the title lblPhotoTitle.Text = PhotoInfo.Title
上記のコードのFlickrコンストラクタでFlickr APIキーを明示的に指定していないのは、Web.configで既に指定してあるからです。コンストラクタはWeb.configから暗黙にAPIキーを取得できます。
PhotosGetInfo(photo_id)
メソッドは、PhotoInfo
オブジェクトを返します。このオブジェクトには、写真の情報を提供するDateUploaded
、Title
、Description
、ViewCount
などのプロパティと、Flickrサーバ上の写真のURLを返すThumbnailUrl
、SmallUrl
、MediumUrl
、LargeUrl
、OriginalUrl
などのプロパティがあります。ここから取得できるURLは実際のJPG画像の場所を示し、これをImage Webコントロールで使うことによって、自分のウェブサイトに写真を表示できます。Flickr.Netライブラリのオブジェクト、プロパティ、メソッドの一覧については、Flickr.Netライブラリプロジェクトの[Downloads]タブから入手できるドキュメントを参照ください。
ここで大切なのは、Flickr.Netライブラリを使えば、低水準の操作方法がわからなくてもFlickr APIを利用できるということです。作成するアプリケーションとFlickrサーバの間でどのようにデータが行き来するかも知る必要がありません。Flickrオブジェクトを作成し、メソッドを呼び出し、Flickrからの結果をモデリングするオブジェクト(またはオブジェクトの配列)に戻ればいいだけです。