8

Abraham の twitteroauth ライブラリ (TwitterOAuth v0.2.0-beta2) を使用して、ajax から upload_with_media リクエストを実装しようとしています。基本的な投稿には問題はありませんでしたが、メディアを含めようとすると、次のような応答が返されます。

"{"request":"\/1\/statuses\/update_with_media.json","error":"Error creating status."}"

メディアを投稿するための私のコードは次のようになります。

   $image = $_FILES["media"]["tmp_name"];

    $parameters = array(
        'media[]'  => "@{$image};type=image/jpeg;filename={$image}",
        'status'   => $status
      );

    if(isset($reply_id)) {
        $parameters['in_reply_to_status_id'] = $reply_id;
    }
    $post = $twitteroauth->post('https://upload.twitter.com/1/statuses/update_with_media.json', $parameters);
    echo json_encode($post);

すべてのデータがこのスクリプトに正しく送信されていることを確認し、上記の同じデータと tmhOAuth ライブラリを使用して update_with_media 投稿を機能させることさえできましたが、ウィジェットの残りの部分は twitteroauth を使用しているため、統一性を維持したいと考えています。また、末尾に .json を付けて、付けずに試してみましたが、違いはありませんでした。twitteroauth を使用した update_with_media の実装の成功例を教えてもらえますか? 私は自分が間違っていることを理解できないようです。

4

5 に答える 5

5

twitteraouth ライブラリを使用した UPDATE_WITH_MEDIA の解決策を何時間も処理した後、問題なく動作する次の解決策を見つけました。

  • まず、ここの Twitter Dev からリンクされている PHP オリジナル ライブラリが機能しません。

UPDATE_WITH_MEDIA で動作していません

基本的な違いは、オリジナルには「$multipart」パラメーターのない関数「post」があることです。このパラメーターは、ドキュメントで Twiiter が要求するものを送信できるようにするものです: マルチパート enctype ポスト。したがって、基本的なコードは次のようになります。

$image_path="folder/image.jpg";

$handle = fopen($image_path,'rb');
$image  = fread($handle,filesize($image_path));
fclose($handle);

$params = array(
  'media[]' => "{$image};type=image/jpeg;filename={$image_path}",
  'status'  => "Put your message here, must be less than 117 characters!"
);
$post = $connection->post('statuses/update_with_media', $params, true);

重要!元のライブラリでこのコードを試すと、エラーが見つかります。上記のリンクからダウンロードし、プロジェクト内の両方のファイル (OAuth.php と twitteroauth.php) を置き換える必要があります。

于 2014-07-10T13:11:46.013 に答える
4

codebird-php を使ってみてください https://github.com/mynetx/codebird-php

Twitter によって提案された php ライブラリのリストの最後にあるにもかかわらず、それはうまくいくことがわかりました。git リポジトリから codebird.php と cacert.pem を取得するだけです。

    include_once('codebird.php');
    \Codebird\Codebird::setConsumerKey($consumer_key, $consumer_secret);
    $cb = \Codebird\Codebird::getInstance();
    $cb->setToken($token, $token_secret);
    $status = 'Gamo, I just tweeted with an image!';
    $filename = '/home/asdf/test.png';
    $cb->statuses_updateWithMedia(array('status' => $status, 'media[]' => $filename));
于 2013-02-21T17:57:37.473 に答える
2

元のライブラリには、メディアのアップロード機能がまだ含まれていません。https://github.com/natefanaro/twitteroauthを確認してください。

于 2013-11-07T12:35:24.193 に答える
0

Fiddler2 または同様のツールを使用して、twitteroauth および tmhOAuth で送信されるメッセージを調べて比較することをお勧めします。違いがわかります。

私の経験では、update_with_media.{xml,json} を使用した、Twitter への HTTP POST は次のようになります。使用する接尾辞は、応答のみに影響すると思います。(アプリに固有の方法で Authorization ヘッダーを設定する必要があります)。

次のようなものを投稿するためにtwitteroauthを取得したい

POST https://upload.twitter.com/1/statuses/update_with_media.xml HTTP/1.1
Authorization: OAuth oauth_callback="oob", oauth_consumer_key="xxxxxxxxxxxx", oauth_nonce="7774328k", oauth_signature="pUYjRnccmrBYiO1j9cliETsw%2B5s%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318300521", oauth_token="59152613-vrlZ2edX56PudQtBmpAWd3SPDt9cPyAhibO7ysl6W", oauth_version="1.0"
Content-Type: multipart/form-data; boundary=======c49479438c600bf59345e======
Host: upload.twitter.com
Content-Length: 7320
Connection: Keep-Alive

--======c49479438c600bf59345e======
Content-Disposition: form-data; name="status"

working on a Tweet tool that uses the OAuth Manager library.
--======c49479438c600bf59345e======
Content-Disposition: file; name="media[]"; filename="ThisIsAPicture.png"
Content-Type: image/png

  ...binary png data here...

--======c49479438c600bf59345e======--
于 2012-05-10T13:10:39.973 に答える