API Upload/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はついっぷるでは便宜上v1と呼ばれます。 もう一つのAPIはリクエストヘッダに含む形で実装され、それはv2と呼びサイト上で区別します。

詳細

エンドポイント

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

パラメータ

フィールド名 対応する値 必須項目 説明
media binary data Yes gif,jpg,pngいずれかのフォーマットに multipart/form-data 処理を施された画像データ(4MBまで)
verify_url signed url Yes Twitterのverify_credentialへの署名済みURLです。 Twitter API 1.1のURLを使用してください。 https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials を参照
auth oauth No 他社APIとの互換の為に存在します、未指定でも問題ありません。
username twitter screen_name No 他社APIとの互換の為に存在します、未指定でも問題ありません。
upload_from - No アップロード元を特定する識別子。未指定でも問題ありません。

戻り値

成功時

画像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 v1を利用した実際の投稿方法について記載します。

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();
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://p.twipple.jp/api/upload');
 
$post = array (
    'verify_url' => $signed_url      // signed url
    'media' => '@/path/to/image.jpg' // upload media file
);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
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)
 
c = pycurl.Curl()
c.setopt(c.URL,  "http://p.twipple.jp/api/upload")
c.setopt(c.POST,  1)
c.setopt(c.VERBOSE,  1)
c.setopt(c.HTTPPOST,  [
        ('auth',  'oauth'),
        ('verify_url',  req.to_url()),
        ('media',  (c.FORM_FILE,  '/path/to/image.jpg'))
        ])
c.perform()
c.close()

curl を利用した例

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

curl -v -F "media=@/path/to/image.jpg" 
-F "verify_url=https://api.twitter.com/1.1/account/verify_credentials.json?oauth_consumer_key=[CONSUMER KEY]
&oauth_nonce=[NONCE]&
oauth_signature=[SIGNATURE]&
oauth_signature_method=HMAC-SHA1&
oauth_timestamp=[timestamp]&
oauth_token=[OAUTH TOKEN]&oauth_version=1.0" 
 http://p.twipple.jp/api/upload

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

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