Обновите изображение профиля в Твиттере, используя OAuth - PullRequest
1 голос
/ 30 апреля 2010

Я пытаюсь заставить твиттер update_profile_image работать, используя OAuth. Я использовал curl с обычной аутентификацией, и все работало нормально, но я переключился на OAuth, используя эту библиотеку , и теперь все, кроме update_profile_image, работает.

Я что-то читал о том, что twitter OAuth испытывает проблемы с многочастными данными , но это было некоторое время назад, и плагин должен был решить эту проблему .

Моя рабочая обычная проверка подлинности с кодом curl

$url      = 'http://api.twitter.com/1/account/update_profile_image.xml';
  $uname    = $_POST['username'];
  $pword    = $_POST['password'];
  $img_path = 'xxx';

  $userpwd  = $uname . ':' . $pword;
  $img_post = array('image' => '@' . $img_path . ';type=image/jpeg',
            'tile'  => 'true');
  $format = 'xml'; //alternative: json
  $message = 'Test update with a random num'.rand();

  $opts = array(CURLOPT_URL => $url,
          CURLOPT_FOLLOWLOCATION => true,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_HEADER => true,
          CURLOPT_POST => true,
          CURLOPT_POSTFIELDS => $img_post,
          CURLOPT_HTTPAUTH => CURLAUTH_ANY,
          CURLOPT_USERPWD => $userpwd,
          CURLOPT_HTTPHEADER => array('Expect:'),
          CURLINFO_HEADER_OUT => true);

  $ch = curl_init();
  curl_setopt_array($ch, $opts);
  $response = curl_exec($ch);
  $err      = curl_error($ch);
  $info     = curl_getinfo($ch);
  curl_close($ch);

Мой текущий код OAuth [мне пришлось его урезать, поэтому не нужно искать незначительные синтаксические ошибки]

include 'EpiCurl.php';
include 'EpiOAuth.php';
include 'EpiTwitter.php';
include 'secret.php';

$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);

$twitterObj->setToken($_GET['oauth_token']);
$token = $twitterObj->getAccessToken();
$twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);

try{
  $img_path = 'xxx';
  //$twitterObj->post_accountUpdate_profile_image(array('@image' => "@".$img_path));    

   $twitterObj->post('/account/update_profile_image.json', array('@image' => "@".$img_path));

   $twitterObj->post_statusesUpdate(array('status' => 'This is my new status:'.rand())); //This works
   $twitterInfo= $twitterObj->get_accountVerify_credentials();  
   echo $twitterInfo->responseText;
}catch(Exception $e){
    echo $e->getMessage();
  }

Я пытался выяснить это некоторое время, ЛЮБАЯ помощь будет принята с благодарностью. Я никак не связан с этой библиотекой , поэтому не стесняйтесь рекомендовать других.

1 Ответ

1 голос
/ 01 мая 2010

Версия библиотеки, которую я использовал, была устаревшей. После обновления мне пришлось столкнуться с парой других проблем, включая ошибку 401 из-за неправильного времени на сервере, и теперь все работает нормально. Распечатка $ response-> responseText очень помогает.

...