前の記事に続き、Flickr.NETを使う。
今度はFlickr Uploaderを作ってみた。Flickr.NETには
・Flickr APIへの認証(read/write/delete権限の取得)
・ファイル名を指定してアップロード
などの機能が揃っているのでさくっと作れた。
できたもの => Archive
ドラッグアンドドロップした写真1枚をアップロードする
■oAuthでの認証のためのtoken発行
今回はAPI keyに加えて、secretも使ってfrobを作ってtokenの発行を行わないといけない。
まずkeyとsecretを取りに行く→Flickr Services
その辺の仕組みは1つ前の記事と、
・Flickr API の認証 – まちゅダイアリー (2005-11-01)
・s.h.log: Flickr::Uploadで写真をアップロード
を参考に。
■プログラムを書く
まずfrobを作る。あとで使うのでとっておく(2回作ると違う値ができてしまうので)
Flickr flickr = new Flickr();
flickr.ApiKey = “your-api-key”;
flickr.ApiSecret = “your-api-secret”;
String flickr_frob = flickr.AuthGetFrob(); // frobの作成
で、認証画面をwebブラウザで開いて「OK」ボタンを押してもらう
System.Diagnostics.Process.Start(flickr.AuthCalcUrl(flickr_frob, AuthLevel.Write)); // 認証画面をブラウザで開く
OK押してもらってから、さっき作ったfrobを使ってtokenを取りに行く。
try{
Auth auth = flickr.AuthGetToken(flickr_frob);
flickr.AuthToken = auth.Token; // token取得
}
catch (FlickrApiException ex)
{
Console.WriteLine(ex.Message);
}
無事tokenを取って、Flickrオブジェクトにセットできたら、ファイル名を指定すればアップロードできる。tagやtitleやdescriptionを適当に付けてみた。
Photo p = new Photo();
p.PhotoId = flickr.UploadPicture(“PhotoFileName”, “test photo”, “これはてすとです”, “test,uploadertest”);
p.UserId = auth.User.UserId;
System.Diagnostics.Process.Start(p.WebUrl);
uploadされた写真のphotoIdが返ってくるので、それを使ってWeb上でのURLを求めることも出来る。今回はまたブラウザで開いてみた。
UploadPictureメソッドはどうやら内部でThread.Sleep()を呼んでいるみたいなので、そのままThreadで実行すればマルチスレッド化できる。
uploadを途中で止めるメソッドが無いみたいだけど、途中で止めたい時はスレッドで実行してAbort()してしまえば止まった。
詳しくは今回作ったアプリのソース参照