Showing posts with label Flickr. Show all posts
Showing posts with label Flickr. Show all posts

Mar 9, 2006

XML2JSONサービスを使ってFlickr Badgeを作る

XML を JSON に変換するサービス - ベータ版を公開 :: Drk7jpの意義がいまひとつ分からなかったので、ひとまずFlickr Badgeを作ってみた。

<div id="flickr-badge"></div>
<script type="text/javascript">
var flickr_method = 'flickr.people.getPublicPhotos';
var flickr_api_key = 'your flickr api key';
var flickr_user_id = '00000000@N00';
var flickr_per_page = 5;
var flickrUrl = 'http://www.flickr.com/services/rest/?method=' + flickr_method
    + '&api_key=' + flickr_api_key
    + '&user_id=' + flickr_user_id
    + '&per_page=' + flickr_per_page;
 
var flickrBadge = {};
flickrBadge.init = function() {
    var name = 'flickrBadge';
    var proxy = 'http://app.drk7.jp/xml2json/';
    var script = document.createElement('script');
    script.charset = 'utf-8';
    script.src = proxy + '&var=' + name + '&url=' + encodeURIComponent(flickrUrl);
    document.body.appendChild(script);
};
flickrBadge.onload = function(data) {
    var photos = data['photos']['photo'];
    var res = '';
    for (var idx in photos) {
 var photo = photos[idx];
 res += '<a href="http://www.flickr.com/photos/'+ flickr_user_id + '/'
     + idx + '/" title="' + photo["title"]
     + '"><img src="http://static.flickr.com/' + photo["server"]
     + '/' + idx + '_' + photo["secret"] + '_s.jpg" /></a>';
    }
    var ele = document.getElementById('flickr-badge');
    ele.innerHTML = res;
};
 
if (window.addEventListener) {
    window.addEventListener('load', flickrBadge.init, false);
} else if (window.attachEvent) {
    window.attachEvent('onload', flickrBadge.init);
} else {
    var old = window.onload;
    window.onload = (typeof old != 'function') ?
        flickrBadge.init : function(e) { old(e); return flickrBadge.init(e);};
}
</script>

うーん、動くね。この例の場合には、Flickr ServicesへのリクエストがXML 2 JSON serviceでキャッシュされるのはありがたい。だけどこのコードをユーザが書くのは少し無理があるような...。

追記: またもInternet Explorerでうまく動かないや。後で修正しよう。

→修正完了。ポイントは、script要素のappendをドキュメントのロード後まで遅延したということ。Mapper Pluginもそうなのだけど、IEやSleipnirでは必須っぽい。

Jan 7, 2006

Flickr2pics: Flickrから livedoor PICSに画像をコピーするスクリプト

livedoor PICSですが、あまり使われていないそうなので(笑)、Flickrの画像をダウンロードしてきてlivedoor PICSにアップロードするスクリプトを作ってみました。50MBとはいえ貴重なネットワークストレージ、有意義に使いましょう。多分ある時点でlivedoor Blog並に(2GBくらいに)一気に増量されるのではないかと勝手に思っています。

http://ogawa.googlecode.com/svn/trunk/flickr2pics/

Flickrの画像情報を取り出すのにFlickr Servicesを、livedoor PICSにアップロードするのにlivedoor PICS WebServiceをそれぞれ使っています。「2.0」ぽいですね。Webでサービスしてもよいのですが、トラフィックが洒落にならんのとBrute force attackをされるとかなわんので止めておきます。

スクリプトを動作させるには以下のPerlモジュールがインストールされている必要があります。

スクリプトの冒頭の変数$FLICKR_USERNAME, $PICS_USERNAME, $PICS_PASSWORDを自分の環境に合わせて修正した後、コマンドラインから起動すれば動作するはずです。

注意事項

このスクリプトはflickr.people.getPublicPhotosを使って$FLICKR_USERNAMEで指定されたユーザのPublic Photoのリストを取得し、それぞれの画像に対してflickr.photos.getInfoで詳細情報を取得しています。したがって以下のような制限・留意点があります。

  • Publicでない画像はコピーできない。
    →我慢してください。
  • $FLICKR_USERNAMEに他人のユーザ名を指定してももちろんコピーできてしまう。
    →絶対にやめましょう、特にこのスクリプトを使ってやるのは。
  • 場合によってはカップ麺が作れるくらい時間がかかる。
    →文句はFlickrにどうぞ。念のため、今のところPICS APIがやたら速いせいで確かにFlickrの遅さが目立ちますが、PICSユーザがそこそこ増えればPICS APIもビジーになってどうせ気にならなくなるはずと予想しておきます。

また、PICSに反映される情報は今のところタイトルと画像ファイルだけです。Flickr2picsでは、Flickr APIを用いて画像に付加されたDescriptionやTagsなどの情報も取得していますが、PICSのAtomPPのインタフェースにそれらを追加する機能がないので反映しようがないためです。リバースエンジニアリングすれば見つかるかもしれません。これができると本当は面白いのですけれどね。

2006-01-12追記:
ひょっとしてdc:subjectでいいのかもと思った。後で試してみよう。

試してみたけど、×だった。XML::Atomでdc:subjectを複数追加するのが面倒な感じがした。

May 5, 2005

FlickrPublicPhotos Plugin

FlickrのPublic Photosをリストアップするプラグインを公開します。

FlickrPublicPhotos_Plugin - ogawa - Google Code

FlickrのPhotosetsをリストアップするプラグインとしてはFlickrPhotosets Pluginがよく知られていますが、私の知る限り、単純にして最も有用と思われる、自分の公開している写真(Public Photos)をリストアップするプラグインはありませんでした。

FlickrPublicPhotos Pluginは、指定したユーザー(username、メールアドレス、NSIDのいずれかで指定できます)のPublic Photosをリストアップする機能を提供します。リストアップ時に最新のN件だけ、もしくはランダムに選んだN件だけを表示することもできます。

また、Flickr APIのアクセスを抑制するために前回の取得結果をキャッシュし、一定期間内は再利用するようにしたり、イメージファイルを自動的にローカルサイトにキャッシュしたりする機能もあります。これらの機能により、再構築時が高速化されるだけでなく、Flickr Serviceが停止している場合やFlickrの負荷が高い場合にもストレスなく、プラグインが機能します。

論より証拠、ユーザー名「Hirotaka Ogawa」さんの最新の5件のPublic PhotoをSquareサイズで表示するにはテンプレートに以下のように記述します。

<p class="image">
<MTFlickrPublicPhotos user="Hirotaka Ogawa" lastn="5">
<a href="<$MTFlickrPublicPhotoURL$>"
   title="<$MTFlickrPublicPhotoTitle encode_html="1"$>">
<img src="<$MTFlickrPublicPhotoImgURL size="sq"$>" />
</a>
</MTFlickrPublicPhotos>
</p>

出力結果は以下のようになります。

Apr 19, 2005

Flickr: free 1 year Pro Account

greenplastic.netyosshiさんから、free 1 year Pro Accountをいただきました。大感謝です。

もともとMovable Typeにはろくに画像ファイルをハンドリングする機能がないので、私は一旦Flickrにポストしておき、必要に応じてブログから参照するという使い方をしていました。それくらいの用途なら無料アカウントの容量でも平気だったわけです(月10エントリーくらいしか書かないし)。今後はPro Accountを有効に使えるよう、もうちょい頻繁に写真をアップロードしていきたいですね。アキバのエウリアンのスナップ写真とかね。

つうか、全然気が付いていませんでしたが、FlickrのPro Accountが41.77USDから24.95USDに値下げになった上、アップロード上限が月1GBから2GBに増えていたんですね。

FlickrBlog: New prices, Freebies and Rock

それにしてもオンラインディスクのコストモデルってよく分かりません。確かに現在市場価格は1GBあたりディスク単価で1USD弱なので、1(USD)×2(GB)×12(か月)=24USDくらいというのはユーザーにとって妥当な感じがする良い価格設定なのですが、nettでは1%くらい頑張っても10%くらいの平均使用率にしかならない気もするわけで…。