2012-03-22 38 views
6

Làm cách nào tôi có thể tải hình ảnh lên Twitter Wall bằng cách sử dụng consumer_keyconsumer_secret mà không cần đăng nhập bằng PHP?Tải hình ảnh lên Twitter bằng cách sử dụng PHP

Hãy giúp tôi & cảm ơn rất nhiều.

+0

Guys nếu câu hỏi này hữu ích, bạn cũng có thể upvote không chỉ câu trả lời ... –

Trả lời

9

Tôi nhận được câu trả lời, Tải xuống Twitter Api cho php & đã tạo một hàm.

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

tôi đã có thêm một 'headers' biến $ đến $ tmhOAuth-> yêu cầu'() 'gọi. Tôi đã lấy lại một lỗi 417 từ Twitter, và Googling đã dẫn tôi để dính vào 'mảng ('Mong đợi' => '')' sau khi multipart 'true'. Nó hoạt động hoàn hảo sau đó. –

+1

là cái này vẫn hoạt động? –

+0

Tôi đã sử dụng cho ứng dụng iphone, đây là trên cửa hàng ứng dụng & có nó vẫn đang hoạt động. –

3

Người dùng của bạn phải được ủy quyền với OAuth với APP của bạn, sau đó bạn sử dụng API để đăng tweet. Theo số POST statuses/update & POST statuses/update_with_media, nhưng tôi đã gặp sự cố khi đăng hình ảnh (khoảng một năm trước, họ có thể đã sửa hình ảnh đó ngay bây giờ).

2

Bạn có thể sử dụng Oauth để cho phép ứng dụng của bạn. Tôi đã tìm thấy this hướng dẫn hữu ích, vì nó cho thấy cách kết nối với API và cách đăng lên twitter. Sử dụng update_with_media sẽ cho phép bạn đăng bằng hình ảnh

1

update_with_media bị phản đối, bạn nên xem xét sử dụng phương pháp sau đây: https://dev.twitter.com/rest/public/uploading-media

Sử dụng hybridauth thư viện xuất sắc và cập nhật Twitter.php setUserStatus chức năng với những điều sau đây, bạn có thể đạt được những gì bạn muốn:

/** 
* 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)); 
    } 
} 

Chỉ cần sử dụng nó như vậy:

$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); 

Hoặc cho một Twitt văn bản đầy đủ:

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

Chỉ dành cho những kẻ như tôi tình cờ gặp vấn đề này, tính năng truyền thông đã được hợp nhất một năm trước ;-) https://github.com/hybridauth/hybridauth/blob/master/hybridauth/Hybrid/Providers/Twitter.php#L191 – Can

Các vấn đề liên quan