Flickr.NETという.NET Framework用のライブラリを使って、Flickr APIからタグ検索してみた。2年ぐらい前に使った時より、dllのファイルサイズが1.5倍に増えててた。

できたもの => Archive

using Flickr.NET

■dllを手に入れる

FlickrNet API Library – Home

[Release]から2.1.5をダウンロードしてきた。

んで、[参照の追加]でリンクして、

using FlickrNet;

する。

■API keyを手に入れる

Flickr ServicesからAPI keyを手に入れないといけない。メールアドレスを登録してすぐ発行してもらえる。

今回は「デスクトップアプリ用」を選択。

(検索だけなら、secretとtokenを使ってoAuthで認証する必要は無い)

■プログラムを書く

Flickr APIのラッパーなので、基本的な仕様はFlickr APIの方を見た方が良い。

今回はflickr.photos.searchを叩いてみた。

まずFlickrというクラスが全ての根になっている

using FlickrNet;

Flickr flickr = new Flickr(“your-api-key”);

flickr.photos.searchでは色々なパラメータを渡すが、Flickr.NETではPhotoSearchOptionsクラスで集約されている。今回はタグだけでeveryoneから検索するのでこれだけだけど、もっと色々パラメータが指定できる。

PhotoSearchOptions opt = new PhotoSearchOptions();

opt.Tags = “food, sfc”;

opt.TagMode = TagMode.AllTags;

Photos photos = flickr.PhotosSearch(opt); // 検索

Photosクラスで返ってきた結果からURLを取り出して、表示する。

PictureBox.Imageにストリームから読み込ませるための関数 DownloadPicture(“URL”) を利用してダウンロードする。

Photo p = photos.PhotoCollection[0]; // 1枚目

pictureBox.Image = Image.FromStream(flickr.DownloadPicture(p.MediumUrl));

textBoxPhotoUri.Text = p.WebUrl;

今回のメインクラス => FormFlickrSearch.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Net;

using FlickrNet;

namespace FlickrDotNetTest

{

public partial class FormFlickrDotNetTest : Form

{

private Flickr flickr;

private String flickr_apikey = “17bd602a83ec433b0ed9fafd93549e1a”;

private Photos photos;

private int index;

public FormFlickrDotNetTest()

{

InitializeComponent();

buttonNext.Enabled = false;

buttonPrev.Enabled = false;

index = 0;

flickr = new Flickr(flickr_apikey);

}

public void reloadPhoto()

{

try

{

Photo p = photos.PhotoCollection[index];

pictureBoxResult.Image = Image.FromStream(flickr.DownloadPicture(p.MediumUrl));

textBoxPhotoUri.Text = p.WebUrl;

this.Text = “Flickr Search Test (” + index + “/” + photos.PhotoCollection.Length + “)”;

if (index < 1) buttonPrev.Enabled = false;

else buttonPrev.Enabled = true;

if (index >= photos.PhotoCollection.Length – 1) buttonNext.Enabled = false;

else buttonNext.Enabled = true;

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

private void buttonLoad_Click(object sender, EventArgs e)

{

buttonLoad.Enabled = false;

textBoxTags.Enabled = false;

PhotoSearchOptions opt = new PhotoSearchOptions();

opt.Tags = textBoxTags.Text;

opt.TagMode = TagMode.AllTags;

photos = flickr.PhotosSearch(opt);

index = 0;

reloadPhoto();

buttonLoad.Enabled = true;

textBoxTags.Enabled = true;

}

private void buttonPrev_Click(object sender, EventArgs e)

{

index–;

reloadPhoto();

}

private void buttonNext_Click(object sender, EventArgs e)

{

index++;

reloadPhoto();

}

private void textBoxTags_TextChanged(object sender, EventArgs e)

{

if (textBoxTags.Text == “”) buttonLoad.Enabled = false;

else buttonLoad.Enabled = true;

}

}

}