Flickr APIがなぜか動作しなくなった場合の確認ポイントについて【2016年】

  • 投稿 : 2016-01-28
古いWordpressのプラグインが動作しなくなって、何とか動作させることができないか?と試行錯誤した時の確認ポイントをまとめました。

1.APIの呼び出しはhttpsでないとダメ
2.APIキーが削除されていると、認証できない
3.PHPのバージョンが5.5以上の場合は、画像のアップロードがうまくいかない場合がある

1.httpからhttpsへの変更

http://flickr.com/services/auth/
http://api.flickr.com/services/rest/

APIを呼び出しているURLがhttpの場合エラーになります。httpsに変更しないとダメです。
2014年あたりにhttpでは呼び出せないようになったかと思います。

2.APIキー関係

var $api_key = "xxxxxxxxxxx";
var $secret = "xxxxxxxxxxx";

認証ができない場合は、API_KEYが削除されている可能性があります。実際に、認証しようとすると英語でそれらしいメッセージが表示されるかと思います。自身でAPIキーを取得しないでも使えるようになっている場合は、ソースのどこかに書かれていると思うのでそれを修正する必要があります。

The App Garden on Flickr

このケースでは、上記URLから自身で使えるAPIキーを取得する必要はあります。非商用の場合は審査なしで無料で取得できます。

3.PHPのバージョン

Flickr APIの認証は成功したが、画像のアップロードだけできないというケースは、PHPのバージョンを疑ってください。PHPのバージョンを5.4以下にするだけで動作するようになる可能性があります。

cURL でのファイルアップロード
@file 構文によるファイルアップロードを行う際には、CURLOPT_SAFE_UPLOAD を FALSE に設定しなければいけなくなりました。 この機能を使うのではなく、CURLFile を使うべきです。
PHP: 下位互換性のない変更点 - Manual

PHP5.5あたりから上記の仕様が変更されています。
ファイルのアップロードをcURLで実装している場合はおそらく原因はこれです。

//変更前
$params = array_merge($params, array('photo' => $photo, 'api_sig' => $this->getSignature($params)));
//変更後
$params = array_merge($params, array('photo' => new CURLFile(ltrim($photo, '@')), 'api_sig' => $this->getSignature($params)));

初めてしりましたが、パラメーターに@から始まる文字はファイルと解釈して、アップロード動作?するようになっているという仕様のようです。

でそういう仕様は廃止になったので、CURLFile を使ってくださいねという話のようです。

$photoが@付きのファイル名です。
で、@を削除して、単にnew CURLFile()の中に入れてあげればOKです。

参考:
if(strpos($value, '@') === 0)
{
  // Get the file name
  $filename = ltrim($value, '@');
  // Convert the value to the new class
  $postfields[$key] = new CURLFile($filename);
}
PHP: CURLFile - Manual

CURLFile にそれらしいソースが掲載されていたので、そのまま使いました。
上記のほうが何をしているかわかりやすいかと思います。
スポンサーリンク