2012-03-22 99 views
6

如何使用consumer_keyconsumer_secretTwitter Wall上傳圖像而不使用PHP登錄?使用PHP在Twitter上傳圖像

請幫我&非常感謝。

+0

傢伙,如果這個問題有幫助,你也可以給予好評,不僅答案...... – 2013-03-14 07:26:12

回答

9

那麼我得到的答案,下載Twitter Api爲php &創建了一個函數。

function image_upload(){  

    define('YOUR_CONSUMER_KEY' , 'your twitter app consumer key'); 
    define('YOUR_CONSUMER_SECRET' , 'your twitter app consumer key secret'); 

    require ('twitt/tmhOAuth.php'); 
    require ('twitt/tmhUtilities.php'); 

    $tmhOAuth = new tmhOAuth(array(
      'consumer_key' => "YOUR_CONSUMER_KEY", 
      'consumer_secret' => "YOUR_CONSUMER_SECRET", 
      'user_token'  => "YOUR_OAUTH_TOKEN", 
      'user_secret'  => "YOUR_OAUTH_TOKEN_SECRET", 
    )); 

    $image = 'image.jpg'; 

    $code = $tmhOAuth->request('POST','https://upload.twitter.com/1/statuses/update_with_media.json', 
     array(
      'media[]' => "@{$image};type=image/jpeg;filename={$image}", 
      'status' => 'message text written here', 
     ), 
     true, // use auth 
     true // multipart 
    ); 

    if ($code == 200){ 
     tmhUtilities::pr(json_decode($tmhOAuth->response['response'])); 
    }else{ 
     tmhUtilities::pr($tmhOAuth->response['response']); 
    } 
    return tmhUtilities; 
} 
+0

我只好一個'$ headers'變量添加到'$ tmhOAuth->請求()'調用。我從Twitter上找回了417錯誤,谷歌搜索引導我在multipart'true'之後插入'array('Expect'=>'')'。它在那之後完美運作。 – 2012-12-12 00:12:58

+1

這仍然有效嗎? – 2013-01-10 07:45:48

+0

我用於iPhone應用程序,這是在應用程序商店和是它仍然工作。 – 2013-01-10 07:47:29

2

您可以使用Oauth授權您的應用程序。 我發現this指南很有幫助,因爲它顯示瞭如何連接到API,以及如何在Twitter上發佈。 使用update_with_media應該允許你張貼圖像

1

update_with_media已過時,應考慮使用以下方法:https://dev.twitter.com/rest/public/uploading-media

使用優秀hybridauth庫和更新Twitter.php setUserStatus功能有以下幾點,就可以達到你想要的東西:

/** 
* update user status 
* https://dev.twitter.com/rest/public/uploading-media-multiple-photos 
*/ 
function setUserStatus($status) 
{ 
    if(is_array($status)) 
    { 
     $message = $status["message"]; 
     $image_path = $status["image_path"]; 
    } 
    else 
    { 
     $message = $status; 
     $image_path = null; 
    } 

    $media_id = null; 

    # https://dev.twitter.com/rest/reference/get/help/configuration 
    $twitter_photo_size_limit = 3145728; 

    if($image_path!==null) 
    { 
     if(file_exists($image_path)) 
     { 
      if(filesize($image_path) < $twitter_photo_size_limit) 
      { 
       # Backup base_url 
       $original_base_url = $this->api->api_base_url; 

       # Need to change base_url for uploading media 
       $this->api->api_base_url = "https://upload.twitter.com/1.1/"; 

       # Call Twitter API media/upload.json 
       $parameters = array('media' => base64_encode(file_get_contents($image_path))); 
       $response = $this->api->post('media/upload.json', $parameters); 
       error_log("Twitter upload response : ".print_r($response, true)); 

       # Restore base_url 
       $this->api->api_base_url = $original_base_url; 

       # Retrieve media_id from response 
       if(isset($response->media_id)) 
       { 
        $media_id = $response->media_id; 
        error_log("Twitter media_id : ".$media_id); 
       } 

      } 
      else 
      { 
       error_log("Twitter does not accept files larger than ".$twitter_photo_size_limit.". Check ".$image_path); 
      } 
     } 
     else 
     { 
      error_log("Can't send file ".$image_path." to Twitter cause does not exist ... "); 
     } 
    } 

    if($media_id!==null) 
    { 
     $parameters = array('status' => $message, 'media_ids' => $media_id); 
    } 
    else 
    { 
     $parameters = array('status' => $message); 
    } 
    $response = $this->api->post('statuses/update.json', $parameters); 

    // check the last HTTP status code returned 
    if ($this->api->http_code != 200){ 
     throw new Exception("Update user status failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code)); 
    } 
} 

只是用它像這樣:

$config = "/path_to_hybridauth_config.php"; 
$hybridauth = new Hybrid_Auth($config); 
$adapter = $hybridauth->authenticate("Twitter"); 

$twitter_status = array(
    "message" => "Hi there! this is just a random update to test some stuff", 
    "image_path" => "/path_to_your_image.jpg" 
); 
$res = $adapter->setUserStatus($twitter_status); 

或爲全文twitt:

$res = $adapter->setUserStatus("Just text"); 
+0

只爲像我這樣的人絆倒在這一個,媒體功能已合併一年前;-) https://github.com/hybridauth/hybridauth/blob/master/hybridauth/Hybrid/Providers/Twitter.php#L191 – Can 2015-12-19 08:43:57