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 - ManualCURLFile にそれらしいソースが掲載されていたので、そのまま使いました。
上記のほうが何をしているかわかりやすいかと思います。
スポンサーリンク
コメントを残す