PHP:推特上的媒体发布


PHP: media posting on twitter?

我一直在尝试使用PHP和twitteroauth.php将带有简单消息的图像发布到twitter上。

然而,每次我运行代码时,我只会得到在twitter提要上发布的$tweetMessage,而没有任何图像。

我搜索了又搜索,阅读了他们自己的文档,但甚至没有让我开始学习他们自己的文件!这就像一个梦游的人在写他们的文档。只是一堆行话。。

STO上的大多数信息要么已经过时,要么指向图书馆!

我不想使用任何库,因为我也必须尝试学习其他人的代码,twitter肯定会允许在不使用任何第三方库的情况下使用他们自己的API发布照片?!

不管怎样,这是我的完整代码:

// Include twitteroauth
require_once('inc/twitteroauth.php');
// Set keys
$consumerKey = 'xxxxxxxxxxxxxxxxxxx';
$consumerSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$accessToken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$accessTokenSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
// Create object
$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
// Set status message
$tweetMessage = 'This is a tweet to my Twitter account via PHP.';
$image_path="https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
$handle = fopen($image_path,'rb');
$image  = fread($handle,filesize($image_path));
fclose($handle);
// Check for 140 characters
if(strlen($tweetMessage) <= 140)
{
    // Post the status message
    $tweet->post('statuses/update', array('media[]' => "{$image};type=image/jpeg;filename={$image_path}", 'status' => $tweetMessage));
}

有人能就这个问题提出建议吗?

提前谢谢。

编辑:

我已经将我的代码更改为以下内容,我得到了这个错误:

{"errors":[{"code":195,"message":"Missing or invalid url parameter."}]}

但我确信图像在指定的URL/目录上!

这是代码:

require_once 'inc/twitteroauth.php';
define("CONSUMER_KEY", "xxxxxxxxxxxxxxxxx");
define("CONSUMER_SECRET", "xxxxxxxxxxxxxxxxxxxxxxxxxx");
define("OAUTH_TOKEN", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
define("OAUTH_SECRET", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET);

$content = $connection->get('images/sign-in-with-twitter-l.png');

$image = 'images/sign-in-with-twitter-l.png';
$status_message = 'Attaching an image to a tweet';
$status = $connection->post('statuses/update_with_media', array('status' => $status_message, 'media[]' => file_get_contents($image)));
echo json_encode($status);

知道为什么会显示这个错误吗?

将媒体上传到Twitter有点复杂。从本质上讲,这是一个三阶段的过程。

  1. 将照片上传到Twitter
  2. 从Twitter收到media_id回复
  3. 将您的statusmedia_id发布到Twitter上

这在https://dev.twitter.com/rest/reference/post/media/upload

一般来说,使用CodeBird这样的库更容易使用,因为他们已经完成了查找所有边缘案例的艰苦工作。

但是,假设你不想那样做。。。

  • 将图像POST到/1.1/media/upload.json
  • 接收一些类似JSON的内容

{ "media_id": 553656900508606464, "media_id_string": "553656900508606464", "size": 998865, "image": { "w": 2234, "h": 1873, "image_type": "image/jpeg" } } *发布状态时使用media_id_string。例如

tweet->post('statuses/update', array('media_ids' => $media_id_string, 'status' => $tweetMessage));

希望这能让你足够了解发生了什么。

我这样解决了它:

$tweet_img = 'Path/to/image';
$handle = fopen($tweet_img,'rb');
$image = fread($handle,filesize($tweet_img));
fclose($handle);
$parameters = array('media[]' => "{$image};type=image/jpeg;filename={$tweet_img}",'status' => 'Picture time');

$returnT = $connection->post('statuses/update_with_media', $parameters, true);

可怕的twitter API文档需要改进!!它需要由人类来写,而不是一群梦游的僵尸!!!

当我们试图使用他们的API时,他们让我们陷入了一个非常令人沮丧的境地。。。

他们要么需要停止对API的支持并将其全部从公众中删除,要么只需改进文档并为公众编写,而不仅仅是使用术语供自己使用。

无论如何,使用最新的twitteroauth ,上面的代码运行得很好

我希望这能帮助其他处于我这种情况的人。我觉得我浪费了5个小时在他们的网站上做一些应该清晰明了并用通俗英语提及的事情!!!

Rant and Answer over&祝你好运