ホーム > php > twitpicへの画像投稿

twitpicへの画像投稿

twitter利用時に画像ストレージとして利用されることが多いTwitPic。
以前は、twitterのID、パスワードを投げる仕様でしたが、OAuth対応後は、token、keyを投げる仕様となっていました。
token、keyをまんま投げたら認証キーを削除できる程度で、ID、パスワード投げるのと変わらないんですけどね。

TwitPic Developers – API Documentation – API v2 » upload

v2ではtwitterとOAuth認証で利用するヘッダを「X-Verify-Credentials-Authorization」として、リクエストURIを「X-Auth-Service-Provider」としてヘッダに含めることでAPIを利用できるようになりました。

以下、PEAR::HTTP_Request2とPEAR::HTTP_OAuthを利用したサンプル。

<?php
require_once 'HTTP/OAuth/Consumer.php';

define('OAUTH_CONSUMER_KEY',    'xxxx');
define('OAUTH_CONSUMER_SECRET', 'xxxx');
define('OAUTH_TOKEN',           'xxxx');
define('OAUTH_TOKEN_SECRET',    'xxxx');
define('TWITPIC_KEY',           'xxxx');

try {

  $consumer_request = new HTTP_OAuth_Consumer_Request();
  $consumer_request->accept(new HTTP_Request2());

  $consumer = new HTTP_OAuth_Consumer(OAUTH_CONSUMER_KEY,
                                      OAUTH_CONSUMER_SECRET,
                                      OAUTH_TOKEN,
                                      OAUTH_TOKEN_SECRET);
  $consumer->accept($consumer_request);
  $resp = $consumer->sendRequest('https://api.twitter.com/1/account/verify_credentials.json', array(), HTTP_Request2::METHOD_GET);

  $headers = $consumer->getLastRequest()->getHeaders();

  $http_request = new HTTP_Request2();
  $http_request->setHeader('X-Auth-Service-Provider', 'https://api.twitter.com/1/account/verify_credentials.json');
  $http_request->setHeader('X-Verify-Credentials-Authorization', $headers['authorization']);
  $http_request->setUrl('http://api.twitpic.com/2/upload.json');
  $http_request->setMethod(HTTP_Request2::METHOD_POST);
  $http_request->addPostParameter('key', TWITPIC_KEY);
  $http_request->addPostParameter('message', 'test');
  $http_request->addUpload('media', '/path/to/image');
  $resp = $http_request->send();
  $body = $resp->getBody();
  $body = json_decode($body);

  var_dump($body);

} catch (Exception $e) {

  var_dump($e->getMessage());

}

twitterとのOAuth認証に必要なAuthorizationヘッダを生成するだけでよいので、実際はtwitter側にリクエストする必要はないのですが、ソース読んだところいろいろ面倒なのでとりあえずこんな形で。

カテゴリー: php タグ: ,
  1. コメントはまだありません。
  1. トラックバックはまだありません。