‘flickr’ タグのついている投稿

sfFlickrPluginのRequest failed.に対処する

symfony 1.4にて、Flickrから画像を取得して使いたかったので、sfFlickrPluginを使ってみました。

sfFlickrPluginのインストール方法はこちらのサイトを参考にチェックアウトできます。

symfonyでFlickrを使用するためのPluginまとめ – Layer8 Reference

基本的には手動によるセットアップです。
plugins/に展開します。
自分はエクスポートしました。

$ cd plugins/
$ svn export http://svn.symfony-project.com/plugins/sfFlickrPlugin

キーに関してはさきほどのサイトを参考に。

あとは

config/ProjectConfiguration.class.php

に、enablePluginsを追加すればOKです。

  public function setup()
  {
    $this->enablePlugins('sfDoctrinePlugin');
    $this->enablePlugins('sfFlickrPlugin');
  }

で、セットアップ完了。

ここから表題の話。

グループから写真を取得したい場合はgetGroupPhotoListを使います。

が、getGroupPhotoListを実行すると、

Request failed. The requested URL returned error: 413

というエラーで停止。

plugins/sfFlickrPlugin/lib/vendor/Phlickrを最新に差し替えることで解決します。

Phlickrはこちらにあります。

Phlickr | Download Phlickr software for free at SourceForge.net

Phlickrの最新版は0.2.8だったので、丸ごと上書きします。

ファイル一式とFramework、TextUiディレクトリも上書き

それ以外のディレクトリは調べてないのでわからないですが、まぁ、置いておけば良いのでは。

Testsは、いらない雰囲気。

これで正常に動くようになりました。

あと、桁あふれの問題があるので、

PhlickrのbuildImgUrlでPhoto IDが桁あふれ : blog.loadlimit – digital matter –

を参考にして修正してください。


PHPでFlickrからPhlickrを使ってグループ検索

Phlickrを使って、グループIDとライセンス指定で写真を検索してくる方法です。

$api = new Phlickr_Api(API_KEY, API_SECRET);

$request = $api->createRequest('flickr.photos.search', array(
    'group_id' => GROUP_ID, // グループID
    'license' => '4,5,6', // ライセンス設定(商用利用可)
));
$photoList = new Phlickr_PhotoList($request, 500); // 1ページ500件

$pageCount = $photoList->getPageCount();
for ($i = 1 ; $i < $pageCount ; $i++) {
    $photos = $photoList->getPhotosFromPage($i);
    foreach ($photos as $photo) {
        // something nice
    }
}

PhlickrのbuildImgUrlでPhoto IDが桁あふれ

PHPでFlickrを簡単に扱えるPhlickrを使っているのですが、Phlickr_PhotoクラスのbuildImgUrlで取得した画像のURLにアクセスしたら、「This photo is currently unavailable」の文字。

URL中のPhoto IDの入る箇所が2147483647(0x7FFFFFFF)になっていました。

ということでPhoto.phpを修正。551行目。

        $url = sprintf("http://farm%d.static.flickr.com/%d/%d_%s%s.%s",
            $this->getFarm(), $this->getServer(), $this->getId(), $this->getSecret(), $sizeStr, $type);

3番目の%dを%sに。

        $url = sprintf("http://farm%d.static.flickr.com/%d/%s_%s%s.%s",
            $this->getFarm(), $this->getServer(), $this->getId(), $this->getSecret(), $sizeStr, $type);

これで解決。