API Upload2/ja

From TwippleWiki

Jump to: navigation, search

Contents

Lang English / 日本語

概要

本APIはHTTP経由で画像データ及びOAuth Echoによるユーザ情報への参照権限の委譲によって投稿を受け付け、レスポンスに投稿された画像のURLをXMLにて返却するAPIになります。

tweetの取り込みに関しては本APIでは行わず、画像ページ表示時にTwitter社から取得を行います。 本APIを利用するにあたっては、RESTful API及びOAuth Echoの知識が必要になります。

本APIはOAuth Echoの実装として、verify_credentialへの署名済みURLをリクエスト ヘッダに含む形で実装しました。 本APIはついっぷるでは便宜上v2と呼ばれます。 もう一つのAPIはリクエストに含む形で実装され、それはv1と呼びサイト上で区別します。

詳細

エンドポイント

http://p.twipple.jp/api/upload2

パラメータ

フィールド名 対応する値 必須項目 説明
media binary data Yes gif,jpg,pngいずれかのフォーマットに multipart/form-data 処理を施された画像データ(4MBまで)
upload_from - No アップロード元を特定する識別子。未指定でも問題ありません。

リクエストヘッダ(Twitter API v1 の場合)

Twitter API v1 は近々廃止されます。Twitter API v1.1 を使用して下さい。

リクエストヘッダ(Twitter API v1.1 の場合)

ヘッダ名 対応する値 必須項目 説明
X-AUTH-SERVICE-PROVIDER AUTH PROVIDERへのURL Yes https://api.twitter.com/1.1/account/verify_credentials.json 固定
X-VERIFY-CREDENTIALS-AUTHORIZATION AUTH PROVIDERへの署名情報 Yes 後記

X-VERIFY-CREDENTIALS-AUTHORIZATIONの詳細

次のような署名情報になります

OAuth realm="http://api.twitter.com/",
oauth_consumer_key="[YOUR CONSUMER KEY]",
oauth_signature_method="HMAC-SHA1",
oauth_token="[OAUTH TOKEN]",
oauth_timestamp="[TIMESTAMP]",
oauth_nonce="[NONCE]",
oauth_version="1.0",
oauth_signature="[SIGNATURE]"

戻り値

成功時

画像IDとそれを含むURLを返却します。

 <?xml version="1.0" encoding="UTF-8"?>
 <rsp stat="ok">
     <mediaid>XYZ012</mediaid>
     <mediaurl>http://p.twipple.jp/XYZ012</mediaurl>
 </rsp>

失敗時

エラーコードとメッセージを返します。

 <?xml version="1.0" encoding="UTF-8"?>
 <rsp stat="fail">
     <err code="0001" msg="error message" />
 </rsp>
エラーコード一覧
エラーコード 説明
1001 verify_urlでのユーザ名の取得に失敗
1002 画像が与えられていない。
1004 画像サイズが上限(4MB)を超えている

参考URL

サンプルコード

upload api v2を利用した実際の投稿方法について記載します。

PHP を利用した例

次のようなコードでPHPからついっぷるフォトに投稿できます。

<?php
//abraham OAuth
//http://github.com/abraham/twitteroauth
require_once('OAuth.php');
 
// fix your application setting
define(CONSUMER_KEY, '[YOUR CONSUMER KEY]');
define(CONSUMER_SECRET, '[YOUR CONSUMER SECRET]');
define(TOKEN_KEY, '[CLIENT TOKEN]');
define(TOKEN_SECRET, '[CLIENT SECRET]');
 
$sha1_sig = new OAuthSignatureMethod_HMAC_SHA1();
$consumer = new OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
$token    = new OAuthConsumer(TOKEN_KEY, TOKEN_SECRET);
 
$request = OAuthRequest::from_consumer_and_token($consumer, $token, 'GET',
	'https://api.twitter.com/1.1/account/verify_credentials.json', array());
$request->sign_request($sha1_sig, $consumer, $token);
 
$signed_url = $request->to_url();
parse_str(parse_url($signed_url, PHP_URL_QUERY), $signed_query);
 
$header = array(
    'X-Auth-Service-Provider: https://api.twitter.com/1.1/account/verify_credentials.json',
    'X-Verify-Credentials-Authorization: OAuth realm="http://api.twitter.com/",' .
    sprintf('oauth_consumer_key="%s",', urlencode($signed_query['oauth_consumer_key'])) .
    sprintf('oauth_nonce="%s",', urlencode($signed_query['oauth_nonce'])) .
    sprintf('oauth_signature="%s",', urlencode($signed_query['oauth_signature'])) .
    'oauth_signature_method="HMAC-SHA1",' .
    sprintf('oauth_timestamp="%s",', urlencode($signed_query['oauth_timestamp'])) .
    sprintf('oauth_token="%s",', urlencode($signed_query['oauth_token'])) .
    'oauth_version="1.0"'
);
 
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://p.twipple.jp/api/upload2');
 
$post = array (
    'media' => '@/path/to/image.jpg' // upload media file
);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
 
$response = curl_exec($ch);
curl_close ($ch);
 
var_dump($response);

Python を利用した例

次のようなコードでpythonからついっぷるフォトに投稿できます。

import oauth2 as oauth
# simplegeo / python-oauth2
# https://github.com/simplegeo/python-oauth2
import time, pycurl
 
consumer = oauth.Consumer(key="[YOUR CONSUMER KEY]",  secret="[YOUR CONSUMER SECRET]")
token    = oauth.Token(key="[CLIENT TOKEN]",  secret="[CLIENT SECRET]")
 
url = "https://api.twitter.com/1.1/account/verify_credentials.json"
 
req = oauth.Request(method="GET",  url=url,  parameters={
        'oauth_version': "1.0",
        'oauth_nonce': oauth.generate_nonce(),
        'oauth_timestamp': int(time.time()),
        'oauth_token': token.key,
        'oauth_consumer_key': consumer.key
        })
 
signature_method = oauth.SignatureMethod_HMAC_SHA1()
req.sign_request(signature_method,  consumer,  token)
 
header = [
    'X-Auth-Service-Provider: ' + url,
    'X-Verify-Credentials-Authorization: ' + req.to_header('http://api.twitter.com/')['Authorization']
]
 
c = pycurl.Curl()
c.setopt(c.URL,  "http://p.twipple.jp/api/upload2")
c.setopt(c.POST,  1)
c.setopt(c.HTTPHEADER, header)
c.setopt(c.VERBOSE,  1)
c.setopt(c.HTTPPOST,  [
        ('media',  (c.FORM_FILE,  '/path/to/image.jpg')),
        ])
c.perform()
c.close()

curl を利用した例

curlでは署名済みURLを用意できるのが前提になります、これはDebugに有効です。

curl -v 
-H 'X-Auth-Service-Provider: https://api.twitter.com/1.1/account/verify_credentials.json' 
-H 'X-Verify-Credentials-Authorization: OAuth realm="http://api.twitter.com/", oauth_consumer_key="[CONSUMER KEY]", 
oauth_signature_method="HMAC-SHA1", oauth_token="[OAUTH TOKEN]", oauth_timestamp="[TIMESTAMP]", oauth_nonce="[NONCE]", 
oauth_version="1.0", oauth_signature="[SIGNATURE]"' 
-F "media=@/path/to/image.jpg" http://p.twipple.jp/api/upload2

閲覧のために改行を行っていますが、実際には1行です。

Lang English / 日本語
Namespaces
Variants
Views
Actions
Navigation
API