1/26/2012

[php で OAuth を使ってみる:第七回] Flickr に画像を post する

Flickr に OAuth を使って画像を post してみる。
※この情報は 2012 年 1 月現在のものです。仕様が変更される可能性は充分にあるので、ご了承ください。

1. Flickr アプリを登録する
The App Garden にアクセスし、アプリの登録を行う。商用でなければ「APPLY FOR A NON-COMMERCIAL KEY」をまずクリックする。
What's the name of your app?: アプリ名
What are you building?: アプリの説明
下 2 つのチェック: チェックする

※登録後、アプリ名は変えられない模様。

2. Flickr の使うキーを確認する
登録後に表示されたページで、「Key」と「Secret」を確認する。これが今後必要となるキー。

3. 書き込みできる権限に変更する
登録後に表示されたページの「Edit app details」をクリックし、続いて右側にある「Edit」をクリックして、入力し、保存する。
App Type: 用途により選ぶ
Callback URL: ユーザによる認証動作後にリダイレクトする URL(「4.」でアップする php)
App Logo: アイコン(GIF のみw)

3. 必要となるライブラリをインストールする
下記からダウンロードし、アプリとするディレクトリにアップする。
phpflickr: phpflickr, /アプリのディレクトリ/Flickr

4. 認証受け渡し用の php を用意する
下記に必要な事項を埋め、アプリのディレクトリにアップする。
<?php
$api_key = 'xxxxxxxxxxxxxxxx'; // 「2.」で確認した「Key」
$api_secret = 'xxxxxxxxxxxxxxxx'; // 「2.」で確認した「Secret」
$permissions = 'write'; // 書き込むので write。読み込むだけなら read、削除もするなら delete
$path_to_phpFlickr_class = './Flickr/';

ob_start();
require_once($path_to_phpFlickr_class . 'phpFlickr.php');
unset($_SESSION['phpFlickr_auth_token']);

if (isset($_SESSION['phpFlickr_auth_redirect']) && !empty($_SESSION['phpFlickr_auth_redirect'])) {
  $redirect = $_SESSION['phpFlickr_auth_redirect'];
  unset($_SESSION['phpFlickr_auth_redirect']);
}

$f = new phpFlickr($api_key, $api_secret);

if (empty($_GET['frob'])) {
  $f->auth($permissions, false);
} else {
  $f->auth_getToken($_GET['frob']);
}

if (empty($redirect)) {
// ユーザの認証後、リダイレクトで帰ってきた後
  $f->auth("read");

  echo "<script type='text/javascript'>location.href = 'アプリ本体の URL';</script>";
} else {
// ユーザの認証前、Flickr にリダイレクトする
  header('Location: '. $redirect);
}
?>

5. post する
下記の php をアプリのディレクトリにアップする(予め tmp ディレクトリを 707 で作っておく)
※html の form 要素内での input type='file' は name='img' としている。
<?php
$title = 'テストタイトル';
$status = 'テスト';
$tag = 'テスト画像';

$key = 'xxxxxxxxxxxxxxxx'; // 「2.」で確認した「Key」
$secret = 'xxxxxxxxxxxxxxxx'; // 「2.」で確認した「Secret」

// 一度自分のサーバにアップ
$uploaddir = './tmp/';
$photo = $uploaddir. basename($_FILES['img']['name']);
move_uploaded_file($_FILES['img']['tmp_name'], $photo);

require_once './Flickr/phpFlickr.php';

$f = new phpFlickr($key, $secret);
$f->auth('write');
$f->sync_upload($photo, $title, $status, $tag);
// 自分のサーバにアップした画像を削除
unlink($photo);

echo "<script type='text/javascript'>alert('画像「". $_FILES['img']['tmp_name']. "」をpostしました!');</script>\n";
?>

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.