Как загрузить изображение в Twitter, используя Oauth, API, JSON и PHP, требуется помощь - PullRequest
0 голосов
/ 28 февраля 2012

Я очень новичок в твиттер-API, сегодня я впервые в жизни подписался на твиттер-API. Моя цель - разместить фотографии с моего сайта с сообщением в твиттере. Я скачал его текущую библиотеку из Интернета, он дает мне следующие 2 файла и несколько примеров.

Я включил эти два файла и получил этот код. Photo_tweet.php означает твит с фотографией

вот мой код

<?php
require 'tmhOAuth.php';
require 'tmhUtilities.php';

$tmhOAuth = new tmhOAuth(array(
  'consumer_key'    => 'ZlhOWeCWG2MS5Wxxxxxx',
  'consumer_secret' => 'DIPjoKcIWjpGWmw5jGJSKGAOLxxxxxx',
  'user_token'      => 'xxxxx-OGtPyRSUOUaR6XQRLAFVuv14xxxxxx',
  'user_secret'     => 'xxxxxoimsrNFhlz7mPa9h5pyVSjxxxxxxx',
));

// we're using a hardcoded image path here. You can easily replace this with
// an uploaded image - see images.php in the examples folder for how to do this
// 'image = "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}",

// this is the jpeg file to upload. It should be in the same directory as this file.
$image = 'a.jpg';

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

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

?>

a.jpg на моем сервере.

вот мои настройки в твиттере!

Тип запроса: GET URI запроса: * https://api.twitter.com/1/

когда я загружаю весь этот код и получаю доступ к своему коду, он возвращает пустой экран, когда я повторяю $ code; возвращается 0

это все, что я наблюдал и переживал. Я нуждаюсь в вашей доброй помощи. Я буду очень очень благодарен вам

Примечание. Событие Когда я удаляю свой потребительский ключ и потребительский секрет, этот код не показывает никакой ошибки. просто пустой экран. Я хочу, чтобы это показывало ошибки в случае возникновения каких-либо проблем, но без ошибок


Вот код статуса, только он у меня работает

$consumerKey = $consumer_key;
$consumerSecret = $consumer_secret;
$OAuthToken = $user_token;
$OAuthSecret = $user_secret;

include "OAuth.php";
include "twitteroauth.php";

$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $OAuthToken, $OAuthSecret);

$image = 'a.jpg';

$optsArray['status'] = 'Hi';



if (isset($_GET['msg'])) {
    $tweetmsg = $_GET['msg'];
    $tweet->post('statuses/update',$optsArray);

   if($tweet)
     echo "Your message has been sent to Twitter.";
   else
     echo "Your message has not been sent to Twitter.";

} else {
    echo "Your message has not been sent to Twitter.";
}

но он публикует статус только когда я использую

update_with_media.json

и

$ optsArray ['@ media []'] = "@ {$ image}";

не работает, помогите разобраться с этой проблемой

1 Ответ

1 голос
/ 28 февраля 2012

Возможно, вы захотите проверить эту статью.Он проведет вас по шагам и даст множество примеров.

API предоставляют следующие методы.twitpic logo Размещать изображения в twitpic API с использованием PHP

METHOD: uploadAndPost (http://twitpic.com/api/uploadAndPost)
METHOD: upload (http://twitpic.com/api/upload)
Error codes
    1001 – Invalid twitter username or password
    1002 – Image not found
    1003 – Invalid image type
    1004 – Image larger than 4MB

Приведенное выше описание API на странице API twitpic.Но вам не нужно вдаваться в эти сложные детали.Вместо этого вы можете использовать класс, который позволит вам опубликовать изображение в твитпике и обновить ваш статус в Твиттере в той же учетной записи.Это просто и удобно.Проверьте код ниже.

<?php
class twitpic
{
  /* 
   * variable declarations
   */
  var $post_url='http://twitpic.com/api/upload';
  var $post_tweet_url='http://twitpic.com/api/uploadAndPost';
  var $url='';
  var $post_data='';
  var $result='';
  var $tweet='';
  var $return='';

/*
* @param1 is the array of data which is to be uploaded
* @param2 if passed true will display result in the XML format, default is false
* @param3 if passed true will update status twitter,default is false
*/

  function __construct($data,$return=false,$tweet=false)
  {
    $this->post_data=$data;
    if(empty($this->post_data) || !is_array($this->post_data)) //validates the data
      $this->throw_error(0);
    $this->display=$return;
    $this->tweet=$tweet;

  }

  function post()
  {
    $this->url=($this->tweet)?$this->post_tweet_url:$this->post_url; //assigns URL for curl request based on the nature of request by user
    $this->makeCurl();
  }
  private function makeCurl()
  {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($curl, CURLOPT_URL, $this->url);
    curl_setopt($curl, CURLOPT_POST, 3);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $this->post_data);
    $this->result = curl_exec($curl);
    curl_close($curl);
    if($this->display)
    {
      header ("content-type: text/xml");
      echo $this->result ;
    }

  }
  private function throw_error($code) //handles few errors, you can add more

  {
    switch($code)
    {
      case 0:
        echo 'Think, you forgot to pass the data';
        break;
      default:
        echo 'Something just broke !!';
        break;
    }
    exit;
  }
} //class ends here

?>

Приведенный выше класс PHP выполняет всю хитрость, чтобы загрузить картинку в твитпик и опубликовать статус в твиттере.Вы можете использовать этот класс как с использованием формы HTML, так и с помощью сценария PHP для автоматической загрузки изображения и публикации твита.Вы можете использовать следующую HTML-форму и PHP-скрипт в комбинации для загрузки изображения, принимая данные от пользователя.

// This block of code should be written above the HTML and it will exit after the picture has been uploaded. If //you have turned display on (by passing 3rd param as true) then it will display the success message.
if($_POST)
{

  $file=$_FILES['media'];
  $postfields = array();

  $postfields['username'] = $_POST['username'];

  $postfields['password'] = $_POST['password'];
  $postfields['message'] = $_POST['message'];
  $postfields['media'] = "@$file[tmp_name]";

  $t=new twitpic($postfields,true,true);
  $t->post();
  exit;
}

<style type="text/javascript">
  *{font-family:verdana;}
  span{font-size:12px;color:#393939;}
  h3{font-size:14px;color:#5AAAF7;}
</style>
<body>

  <h3>Upload your pic to twitpic, and post status on twitter</h3>
  <form method="post"  enctype="multipart/form-data" action="<?= $_SERVER[PHP_SELF] ?>"   >
    <p><span style="height:40px;font-weight:bold;margin-right:56px;">Twitter Username :</span><input type="text" name="username" /></p>
    <p><span style="height:40px;font-weight:bold;margin-right:61px;">Twitter Password:</span><input type="password" name="password" /></p>

    <p><span style="vertical-align:text-top;height:40px;font-weight:bold;margin-right:28px;">Message to be posted :</span> <textarea cols="35" rows="2" name="message"></textarea></p>
    <p><span style="vertical-align:text-top;height:40px;font-weight:bold;">Choose an image to upload: </span><input type="file" name="media" /></p>
    <p style="width:250px;text-align:right;margin-top:50px;"><input type="submit" value="Upload&nbsp;&raquo;" /> </p>
  </form>
  <sup>Script powered by <a href="http://www.digimantra.com/">www.digimantra.com</a></sup>
</body>

You can skip posting update to twitter by passing the third argument as false or just by skipping it. If you want to upload image programmatically, without the user input or the form then you can do it using the following code. Make sure the image path is correctly mention, else it will throw an error.

<?php
$file='file_to_be_uploaded.gif';
$postfields = array();

$postfields['username'] = 'twitter_username';

$postfields['password'] = 'twitter_password';
$postfields['message'] = 'Message to be posted' ;
$postfields['media'] = "@$file"; //Be sure to prefix @, else it wont upload

$t=new twitpic($postfields,true,true);
$t->post();
?>

Этот вышеприведенный класс отправляет изображение в двоичном формате, как описано в разделе Отправка двоичных данных с использованием curl php,Вы можете изменить класс в соответствии со своими потребностями, а также улучшить его так, как вам нравится.Надеюсь, этот пост помог вам узнать что-то.

...