flickholdr と wordpress

flickrholdr_400_300_camera_vintage_2
  • ????????????????????

flickholdr は flickr のクリエイティブ・コモンズな画像を取得するサービスです。URL のパラメータとしてサイズとかタグを指定して画像を表示することができる。たとえばこんな感じ

http://flickholdr.com/400/150/books/1

のアドレスを入れると 400×150 の本に関連した画像が取得できます。

flickholdrデモ画像
実際の画像はこんなかんじです。著作権?も自動的に挿入されるので非常に手軽に使うことができます。上の例は img タグの src に上のアドレスを書いただけです。本文中で使う場合はこれで何の問題もありません。img タグを貼りつければそのまま使用できます。

しかし,wordpress の機能であるアイキャッチ画像(サムネイル)として使う場合は問題があります。なぜならアイキャッチ画像はローカルのファイルしか指定できないからです。

したがって flickholdr 画像を wordpress アイキャッチ画像としてつかうには、

  1. flickholdr からローカルに画像をダウンロード。
  2. ダウンロードした画像を自分のサーバにアップロード
  3. アイキャッチとして利用

という非常にわずらわしいことをしないといけません。

Grab & save プラグイン

なにかよさげなプラグインがないかなーと探してみたところ grab & save というプラグインを見つけました。このプラグインは画像の URL から直接 wordpress のサーバ上のメディアディレクトリにアップロードを可能にするというプラグインです。プラグインをインストールするとメディアの挿入画面が下のように変化します。
grab & save
ここに画像のアドレスを張れば無事、アップロードが完了します。

ところが…

これをつかえば簡単じゃないか、と思っていたら落とし穴がありました。その理由は

  • Grab & save に入力する URL は画像の拡張子が付いていないとだめ。
  • しかし,flickholdr の URL は上に示したように “.jpg” などの拡張子がない

ということでした。flickholdr の URL を入力しても「(flickholdrのURL) is not a valid image」みたいなエラーが出て、アップロード時にエラーになってしまいます。ほかのプラグインをあたるのも面倒だったので、簡単な hack をしてこの問題を回避しました。

Grab & save で flickholdr を利用可能にするための hack

grab & save のソースコードにある media_process 関数を以下のように修正しましょう。(grab & save のソースコードのバージョンは 1.0.0,wordpress のバージョンは 3.1.1 です;変更は自己責任でお願いします)

    $filename = wp_unique_filename( $uploads['path'], basename( $imageurl ), $unique_filename_callback = null );
if ( ereg( "flickholdr", $imageurl ) ){
    $ary = split("/",$imageurl);
    $fntmp = "flickrholdr_" . join("_",array_slice( $ary,3 ) ) . ".jpg";
    $fntmp = str_replace( ",", "_", $fntmp );
} else {
    $fntmp = basename( $imageurl );
}

$filename = wp_unique_filename( $uploads['path'], $fntmp, $unique_filename_callback = null );

ようするに、flickholdr を正規表現で判別してその場合だけは強引にリネームしてやる、という修正です。これで問題なく flickholdr.com の URL を指定してアップロードすることができるようになります。

これでかなり気楽に画像を使えるようになるなー。めでたしめでたし。

はてなブックマーク - flickholdr と wordpress
Pocket