Twitter API -> обновление профиля bg с php

До сих пор я пытался обновить профиль twitter bg image tw twit api с php … и без успеха

Многие примеры в Интернете, в том числе:
Обновление фона Twitter через API
и этот
Загрузка фонового изображения Twitter с помощью API и данных с несколькими форматами
не работают вообще, большинство ppl выкидывают ответы без фактического тестирования кода.

Я обнаружил, что непосредственно отправьте изображение в форму twitter.com thr html, он будет работать:

<form action="http://twitter.com/account/update_profile_background_image.xml" enctype="multipart/form-data" method="post"> File: <input type="file" name="image" /><br/> <input type="submit" value="upload bg"> </form> 

(хотя браузер подскажет вам имя пользователя и пароль учетной записи Twitter)

Однако, если я хочу перейти к одному и тому же процессу с php, он не работает

 <?php if( isset($_POST["submit"]) ) { $target_path = ""; $target_path = $target_path . basename( $_FILES['myfile']['name']); if(move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) { // "The file ". basename( $_FILES['myfile']['name']). " has been uploaded<br/>"; } else{ // "There was an error uploading the file, please try again!<br/>"; } $ch = curl_init('http://twitter.com/account/update_profile_background_image.xml'); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD, $_POST['name'] . ':' . $_POST['pass']); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode(file_get_contents($target_path)))); $rsp = curl_exec($ch); echo "<pre>" . str_replace("<", "&lt;", $rsp) . "</pre>"; } ?> <form enctype="multipart/form-data" method="post"> <input type="hidden" name="submit" value="1"/> name:<input type="text" name="name" value=""/><br/> pass:<input type="password" name="pass" value=""/><br/> File: <input type="file" name="myfile" /><br/> <input type="submit" value="upload bg"> </form> 

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

Большое спасибо за это. Будет здорово, если вы сможете помочь. Просьба сначала проконтролировать ваш код, прежде чем выкидывать ответы, много благодарностей.

Related of "Twitter API -> обновление профиля bg с php"

Это то, что работает для меня (отладочные материалы остались):

 $url = 'http://twitter.com/account/update_profile_background_image.xml'; $uname = 'myuname'; $pword = 'mypword'; $img_path = '/path/to/myimage.jpg'; $userpwd = $uname . ':' . $pword; $img_post = array('image' => '@' . $img_path . ';type=image/jpeg', 'tile' => 'true'); $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); echo '<pre>'; echo $err . '<br />'; echo '----------------' . '<br />'; print_r($info); echo '----------------' . '<br />'; echo htmlspecialchars($response) . '<br />'; echo '</pre>'; 

Подтвердили ли вы, что изображение, которое вы ожидаете, присутствует и отправляется (т. Е. Эхо из кодированных данных base64 для проверки)? Это GIF / PNG / JPG и ограничение 800 килобайт, установленное API?

Я думаю, что вы неправильно используете метод CURLOPT_POSTFIELDS. Вам нужно поставить и @ подписать полный путь к файлу в соответствии с документацией для curl PHP. Вы не должны выводить содержимое всего файла.

Полные данные для отправки в HTTP-режиме «POST». Чтобы опубликовать файл, добавьте имя файла с помощью @ и используйте полный путь. Это может быть либо передано как строка с urlencoded, как «para1 = val1 & para2 = val2 & …», или как массив с именем поля в качестве ключа и данных поля как значение. Если значением является массив, заголовок Content-Type будет установлен в multipart / form-data.

Это пример из документации.

 <?php /* http://localhost/upload.php: print_r($_POST); print_r($_FILES); */ $ch = curl_init(); $data = array('name' => 'Foo', 'file' => '@/home/user/test.png'); curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); ?> 

Надеюсь, это поможет.

Сейчас никто не может реально обновить фоновое изображение профиля или образ профиля. Twitter работает над устранением этой проблемы до тех пор, пока не будет исправлено.