https://www.flickr.com/services/api/upload.api.html をみてその通りにやっても上手くいかないのでやったことを書いておきます
APIを使うための準備
Appsを作成する
ここで得られるkeyとsecretを使って進めていきます
request_tokenの取得
request_token.phpとでもして、Appsを作成した画面に出てくる key と secret を使って oauth_token と oauth_token_secret を取得します。
<?php
$key = ' key ';
$secret = ' secret ';
try {
$oauth = new OAuth($key, $secret);
$request_token_info = $oauth->getRequestToken("https://www.flickr.com/services/oauth/request_token", 'call_back_url');
if(!empty($request_token_info)) {
print_r($request_token_info);
} else {
print "Failed fetching request token, response was: " . $oauth->getLastResponse();
}
} catch(OAuthException $E) {
echo "Response: ". $E->lastResponse . "\n";
}
// Array ( [oauth_callback_confirmed] => true [oauth_token] => hogehoge [oauth_token_secret] => hogehoge )
※ローカルで実行していたので、コールバックで戻ってこなくても済むようにしています。
※phpのOAuthモジュールが必要です。
$ yum install php-pecl-oauth
※yumで追加するコマンド
User Authorization
oauth_verifierを取得するために、authorizeします
https://www.flickr.com/services/oauth/authorize?oauth_token=[oauth_token] へブラウザでアクセス
[oauth_token]はrequest_token で取得したものを使います
ブラウザでアクセスすると call_back_url へリダイレクトされますが、それは存在しないURLでも問題ないので適当な文字を入れてけば構いません
call_back_url
?oauth_token=hogehoge
&oauth_verifier=[oauth_verifier]
とブラウザのURL欄に表示されるので、[oauth_verifier] をメモります
access_tokenの取得
<?php
$key = ' key ';
$secret = ' secret ';
$request_token = ' oauth_token ';
$request_token_secret = ' oauth_token_secret ';
$oauth_verifier = ' oauth_verifier ';
try {
$oauth = new OAuth($key,$secret);
$oauth->setToken($request_token, $request_token_secret);
$access_token_info = $oauth->getAccessToken("https://www.flickr.com/services/oauth/access_token", null, $oauth_verifier);
if(!empty($access_token_info)) {
print_r($access_token_info);
} else {
print "Failed fetching access token, response was: " . $oauth->getLastResponse();
}
} catch(OAuthException $E) {
echo "Response: ". $E->lastResponse . "\n";
}
//Array ( [fullname] => fugafuga [oauth_token] => homuhomu [oauth_token_secret] => hohuhohu [user_nsid] => user_id
結果に oauth_token と oauth_token_secret が返ってきます。
注意点としては、request_tokenと帰ってくる変数名が一緒っていうね・・・とりあえずAPI叩くのに使うのは、access_tokenで返ってくる方の値です
画像アップロードする
rezzza/flickr というモジュールが一番使われていそうだったのでこれを使います
composer install
composer.jsonに以下を追加し composer install をする
{
"require": {
"guzzle/guzzle": "*",
"guzzle/http": "*",
"rezzza/flickr": "1.1.0"
}
}
アップロードするPHPのサンプル
$apikey と $sercret は Appsを作成した時に得られたもの
$oauth_token と $oauth_token_secret は access_token の取得で得られたものを使います
$from_path はアップロードしたいファイルのパス
$filename はアップロード後のファイル名です
<?php
require "vendor/autoload.php";
$metadata = new Rezzza\Flickr\Metadata($apikey, $secret);
$metadata->setOauthAccess($oauth_token, $oauth_token_secret);
$factory = new Rezzza\Flickr\ApiFactory($metadata, new Rezzza\Flickr\Http\GuzzleAdapter());
$return = $factory->upload($from_path, $filename);
if ( (string) $return->attributes()->stat == 'fail') {
echo 'アップロードに失敗しました。';
} else {
echo (string) $return->attributes()->photoid;
}
これで無事Flickrへ画像アップロード出来ました
コメント