Flickr.NETという.NET Framework用のライブラリを使って、Flickr APIからタグ検索してみた。2年ぐらい前に使った時より、dllのファイルサイズが1.5倍に増えててた。
できたもの => Archive
■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;
}
}
}