2012-05-10 41 views
7

我想使用亞伯拉罕的twitteroauth庫(TwitterOAuth v0.2.0-beta2)從ajax實現upload_with_media請求。我已經受夠了基本的職位沒有問題,但是當我嘗試包括媒體我得到這個作爲響應:update_with_media使用亞伯拉罕的twitteroauth

"{"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的例子嗎?我似乎無法弄清楚我做錯了什麼。

+1

TwitterOAuth對象目前不支持媒體上傳。我希望在未來增加支持。 – abraham

+0

@abraham,當我們希望支持媒體上傳時有任何想法嗎?另外,對於那些仍然希望通過腳本上傳媒體的人,你有什麼建議? – Joey

回答

0

我建議你使用Fiddler2或類似的工具來檢查和比較twitteroauth和tmhOAuth的消息。你會看到不同之處。

根據我的經驗,這是使用 update_with_media。{xml,json}向Twitter發送的HTTP POST的外觀。我相信,你使用的後綴隻影響反對。 (您的應用程序必須以一種特定於 您的應用程序設置的授權頭。)

你想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======-- 
+0

親愛的@Cheeso你會解釋上面的行..在哪裏把這個代碼以及如何運行?其上面的php –

+0

這些是消息。你想讓你的代碼生成這些消息。你不會運行它。這是輸出。 – Cheeso

+0

http://stackoverflow.com/questions/11243612/does-abrahams-twitteroauth-library-work-for-update-with-media什麼問題呢?你可以幫我嗎? –

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)); 
+1

經過一個小時的爭取讓亞伯拉罕twitteroauth做到這一點,我發現你的答案,並在3分鐘內它的工作。謝謝! –

+0

我一直在努力與自動tweeting幾天。現在我發現了你的代碼,它看起來比其他任何代碼都簡單,我仍然無法使它工作。 我下載了codebird文件(codebird.php和cacert.pem),聲明瞭key和token變量,並將$ filename改爲指向我服務器上的映像。它沒有工作:( – ahojvole

+0

@ahojvole對不起,我在一年前使用過這個庫,也許這個庫的作者改變了一些東西,你應該檢查一下codebird的文檔。 – gtsouk

4

在處理時間爲一個解決方案與twitteraouth庫UPDATE_WITH_MEDIA後,我發現下面的解決方案,工作正常:

  • 第一:從Twitter開發here鏈接的PHP原始庫不起作用。

不與UPDATE_WITH_MEDIA

基本性差異的是,原本具有的功能「後」沒有「$多」參數。此參數允許發送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)。

+0

好極了!謝謝,這也適用於我。Natefanaro的庫很不幸地不支持PHP 5.5+由於CURLFile的要求,你的解決方案和庫的鏈接分支是這個線程中唯一的選項這對我有效。我也猜測fopen是處理圖像的一種更好的方式,因爲它應該允許您也拉入遠程圖像。 – Warpstone

0

我想發送網址連結狀態PARAM

這樣的:把你的信息在這裏

+0

你應該[問一個新問題](http://stackoverflow.com/questions/ask)。 –

相關問題