php - Twitter API -> 使用 php 更新个人资料背景图像

标签 php upload twitter

到目前为止,我一直在尝试使用 php 通过 twitter api 更新 twitter 个人资料 bg 图像...但没有成功

网络上有很多示例,包括这个:
Updating Twitter background via API
还有这个
Twitter background upload with API and multi form data
根本不起作用,大多数人在没有实际测试代码的情况下就抛出答案。

我发现直接将图片以html形式提交到twitter.com,就可以了:

<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>

这段代码的奇怪之处在于......它成功返回了 Twitter XML,没有更新了个人资料背景图像。所以最后还是失败了。

非常感谢您阅读本文。如果你能帮忙那就太好了。请先测试您的代码,然后再给出答案,非常感谢。

最佳答案

这对我有用(调试留下的东西):

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

关于php - Twitter API -> 使用 php 更新个人资料背景图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967831/

相关文章:

python - Tweepy 没有返回给定数量的推文

php - 如何在从mysql下载的文件的每行末尾添加文本?

javascript - 如何使用 CORS 飞行前请求处理自定义 header ? AJAX-代码点火器

upload - ImportError : No module named flask. ext.uploads.UploadSet

javascript - JS - 文件 onload() 不适用于 Android 浏览器

ios - 是否可以通过 API 在应用程序内进行转发?

php - 文本框和按钮 html/php

php - php中的多个条件和赋值

php - 我可以信任 $_FILES 的文件类型吗?

jquery - Twitter 个人资料图片作为 <div> 而非 <img> 的背景