PHP 使用 REST API 从 DM Twitter 获取图像?



我想获取发送到我的DM的图像时遇到问题。 因此,当我从 API 获取 DM 数据时,我获得了图像的媒体 ID,但如何获取它?

我想获取图片并将其推特到我的帐户。

所以基本上:

  • 有人用媒体向我发送 DM
  • 我从 API 读取了我的帐户 DM
  • 将 DM 内容发推到我的帐户

这是我的代码

$AMConnection = new TwitterOAuth(AM_CONSUMER_KEY, AM_CONSUMER_SECRET);
$AMConnection->setAccessToken($amService->token, $amService->secret);
$jsonData = json_decode(file_get_contents("./fetchDM.json"));
foreach ($jsonData as $json) {
if (!isset($json->entities->media)) continue;
$medias = $json->entities->media;
$postParam['status'] = $json->text;
foreach ($medias as $image) {
$postParam['status'] = str_replace($image->url, "", $postParam['status']);
$postParam['media_ids'][] = $image->id_str;
}
echo "SEND TWEET".PHP_EOL;
$return = $AMConnection->post('statuses/update', $postParam);
var_dump($return);
if (isset($return->errors) and count($return->errors) > 0) {
foreach ($return->errors as $error) {
if ($error->code == 89) {
$amService->token = null;
$amService->secret = null;
$amService->save();
break;
}
}
}
}

在我的代码上,我试图使用media_id推特媒体,但它不起作用。 对不起,英语不好

终于解决了。
所以我一直在一些论坛上寻找这个,但只有 2 个论坛有答案,1 个在 Twitter 论坛上(对不起我没有链接)和另外 1 个 StackOverflow

我正在使用库并尝试弄乱它,但死胡同。我用来请求 REST API 的库,使用来自 URL 和 POST 数据的 OAuth 请求。是的,这完全是工作(仅适用于 REST API),但这个完全不同。

要从 DM 获取图像,您必须使用标头授权请求,而不是其他方式。

在我的样本上,我想尝试获取 https://ton.twitter.com/1.1/ton/data/dm/863758539021365258/863758532109246464/VSSysEvy.jpg(这是来自 DM 的图像 URL,所以只有我和向我发送该图像的人只能看到它)。

我正在使用 CURL PHP 来获取图像,因此请求将是这样的

<?php
$this->http_info = array();
$ci = curl_init();
$url = 'https://ton.twitter.com/1.1/ton/data/dm/863758539021365258/863758532109246464/VSSysEvy.jpg';
$headerAuth = 'Authorization: OAuth oauth_version="1.0",
oauth_nonce="{autoGeneratedNonce}",
oauth_timestamp="{time()}",
oauth_consumer_key="{yourAppToken}",
oauth_token="{userToken}",
oauth_signature_method="HMAC-SHA1",
oauth_signature="{autoGeneratedSignature}"';
/* Curl settings */
curl_setopt($ci, CURLOPT_USERAGENT, 'LShaf User Agent');
curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ci, CURLOPT_HTTPHEADER, [$headerAuth]);
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ci, CURLOPT_HEADER, FALSE);
curl_setopt($ci, CURLOPT_URL, $url);
$response = curl_exec($ci);
curl_close ($ci);

注意:您必须使用方法GET并将授权放在标头上。
最后一件事,我很抱歉我的英语不好。

最新更新