我正在构建一个需要将用户上传的图片直接发布到 Instagram 的 php 应用程序,但经过快速搜索后,我发现 API 中没有这样的功能 :( 感觉很奇怪......因为他们应该提供一个。我我不确定是否有任何其他方式(除了android和iOS的应用程序)使用php上传图片。如果有任何可能,请给我任何想法。
我也读过这个,
我正在构建一个需要将用户上传的图片直接发布到 Instagram 的 php 应用程序,但经过快速搜索后,我发现 API 中没有这样的功能 :( 感觉很奇怪......因为他们应该提供一个。我我不确定是否有任何其他方式(除了android和iOS的应用程序)使用php上传图片。如果有任何可能,请给我任何想法。
我也读过这个,
更新:
Instagram 现在正在禁止帐户并基于此方法删除图像。请谨慎使用。
似乎每个用类似的东西回答这个问题的人it can't be done
都有些正确。正式地,您不能使用他们的 API 将照片发布到 Instagram。但是,如果您对 API 进行反向工程,则可以。
function SendRequest($url, $post, $post_data, $user_agent, $cookies) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://i.instagram.com/api/v1/'.$url);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($post) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
if($cookies) {
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
} else {
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
}
$response = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return array($http, $response);
}
function GenerateGuid() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(16384, 20479),
mt_rand(32768, 49151),
mt_rand(0, 65535),
mt_rand(0, 65535),
mt_rand(0, 65535));
}
function GenerateUserAgent() {
$resolutions = array('720x1280', '320x480', '480x800', '1024x768', '1280x720', '768x1024', '480x320');
$versions = array('GT-N7000', 'SM-N9000', 'GT-I9220', 'GT-I9100');
$dpis = array('120', '160', '320', '240');
$ver = $versions[array_rand($versions)];
$dpi = $dpis[array_rand($dpis)];
$res = $resolutions[array_rand($resolutions)];
return 'Instagram 4.'.mt_rand(1,2).'.'.mt_rand(0,2).' Android ('.mt_rand(10,11).'/'.mt_rand(1,3).'.'.mt_rand(3,5).'.'.mt_rand(0,5).'; '.$dpi.'; '.$res.'; samsung; '.$ver.'; '.$ver.'; smdkc210; en_US)';
}
function GenerateSignature($data) {
return hash_hmac('sha256', $data, 'b4a23f5e39b5929e0666ac5de94c89d1618a2916');
}
function GetPostData($filename) {
if(!$filename) {
echo "The image doesn't exist ".$filename;
} else {
$post_data = array('device_timestamp' => time(),
'photo' => '@'.$filename);
return $post_data;
}
}
// Set the username and password of the account that you wish to post a photo to
$username = 'ig_username';
$password = 'ig_password';
// Set the path to the file that you wish to post.
// This must be jpeg format and it must be a perfect square
$filename = 'pictures/test.jpg';
// Set the caption for the photo
$caption = "Test caption";
// Define the user agent
$agent = GenerateUserAgent();
// Define the GuID
$guid = GenerateGuid();
// Set the devide ID
$device_id = "android-".$guid;
/* LOG IN */
// You must be logged in to the account that you wish to post a photo too
// Set all of the parameters in the string, and then sign it with their API key using SHA-256
$data ='{"device_id":"'.$device_id.'","guid":"'.$guid.'","username":"'.$username.'","password":"'.$password.'","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}';
$sig = GenerateSignature($data);
$data = 'signed_body='.$sig.'.'.urlencode($data).'&ig_sig_key_version=4';
$login = SendRequest('accounts/login/', true, $data, $agent, false);
if(strpos($login[1], "Sorry, an error occurred while processing this request.")) {
echo "Request failed, there's a chance that this proxy/ip is blocked";
} else {
if(empty($login[1])) {
echo "Empty response received from the server while trying to login";
} else {
// Decode the array that is returned
$obj = @json_decode($login[1], true);
if(empty($obj)) {
echo "Could not decode the response: ".$body;
} else {
// Post the picture
$data = GetPostData($filename);
$post = SendRequest('media/upload/', true, $data, $agent, true);
if(empty($post[1])) {
echo "Empty response received from the server while trying to post the image";
} else {
// Decode the response
$obj = @json_decode($post[1], true);
if(empty($obj)) {
echo "Could not decode the response";
} else {
$status = $obj['status'];
if($status == 'ok') {
// Remove and line breaks from the caption
$caption = preg_replace("/\r|\n/", "", $caption);
$media_id = $obj['media_id'];
$device_id = "android-".$guid;
$data = '{"device_id":"'.$device_id.'","guid":"'.$guid.'","media_id":"'.$media_id.'","caption":"'.trim($caption).'","device_timestamp":"'.time().'","source_type":"5","filter_type":"0","extra":"{}","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}';
$sig = GenerateSignature($data);
$new_data = 'signed_body='.$sig.'.'.urlencode($data).'&ig_sig_key_version=4';
// Now, configure the photo
$conf = SendRequest('media/configure/', true, $new_data, $agent, true);
if(empty($conf[1])) {
echo "Empty response received from the server while trying to configure the image";
} else {
if(strpos($conf[1], "login_required")) {
echo "You are not logged in. There's a chance that the account is banned";
} else {
$obj = @json_decode($conf[1], true);
$status = $obj['status'];
if($status != 'fail') {
echo "Success";
} else {
echo 'Fail';
}
}
}
} else {
echo "Status isn't okay";
}
}
}
}
}
}
只需将上面的代码复制并粘贴到您的文本编辑器中,相应地更改几个变量,瞧!我写了一篇关于这个的文章,我已经做过很多次了。在此处查看演示。
如果您阅读了共享的链接,则接受的答案是:
您不能通过 API 将图片发布到 Instagram。
Instagram现在这样说:
现在,您可以从 2021 年 1 月 26 日起使用 Instagram API(新)效果发布您的内容!
https://developers.facebook.com/blog/post/2021/01/26/introducing-instagram-content-publishing-api/
希望你在这里有一些运气。
更新 现在可以:
https://developers.facebook.com/docs/instagram-api/content-publishing
内容发布 API 是 Instagram Graph API 端点的子集,允许您发布媒体对象。使用此 API 发布媒体对象是一个两步过程 - 您首先创建一个媒体对象容器,然后在您的企业帐户上发布该容器。
Instagram 现在允许企业使用新的 Content Publishing Beta 端点来安排他们的帖子。
https://developers.facebook.com/blog/post/2018/01/30/instagram-graph-api-updates/
但是,这篇博文 - https://business.instagram.com/blog/instagram-api-features-updates - 清楚地表明他们只向他们的 Facebook 营销合作伙伴或 Instagram 合作伙伴开放该 API。
要开始安排帖子,请与我们的 Facebook 营销合作伙伴或 Instagram 合作伙伴之一合作。
这个来自 Facebook 的链接 - https://developers.facebook.com/docs/instagram-api/content-publishing - 将其列为封闭测试版。
Content Publishing API 仅与 Facebook 营销合作伙伴和 Instagram 合作伙伴进行封闭测试。我们目前不接受新的申请者。
但这就是你的做法:
你有一张照片在...
https://www.example.com/images/bronz-fonz.jpg
您想使用标签“#BronzFonz”发布它。
您可以使用/user/media
边缘来创建这样的容器:
POST graph.facebook.com
/17841400008460056/media?
image_url=https%3A%2F%2Fwww.example.com%2Fimages%2Fbronz-fonz.jpg&
caption=%23BronzFonz
这将返回一个容器 ID(比如说 17889455560051444),然后您将使用 /user/media_publish 边缘发布它,如下所示:
POST graph.facebook.com
/17841405822304914/media_publish
?creation_id=17889455560051444
这个例子来自docs。
我尝试使用 IFTTT 和许多其他服务,但所有人都在做事或从 Instagram 发布到另一个平台而不是 Instagram。我阅读更多内容发现 Instagram 目前不提供任何此类 API。
使用蓝色堆栈再次涉及繁重的安装和仅手动执行操作。
但是,您可以使用桌面版 Google Chrome 在 Instagram 上发帖。它需要一点调整。
您会注意到 UI 的变化以及在 Instagram 上发帖的选项。你现在的生活很轻松。如果您能找到任何方法,请告诉我一个更简单的方法。
我在https://www.inteligentcomp.com/2018/11/how-to-upload-to-instagram-from-pc-mac.html上写了关于它的文章。
工作截图
For users who find this question, you can pass photos to the instagram sharing flow (from your app to the filters screen) on iPhone using iPhone hooks: http://help.instagram.com/355896521173347 Other than that, there is currently no way in version 1 of the api.
如果它有一个 UI,它就有一个“API”。让我们使用以下示例:我想发布我在我创建的任何新博客文章中使用的图片。假设是 Wordpress。
没有使用 API 将照片发布到 instagram 的 API,但有一种简单的方法是安装 google 扩展程序“用户代理”,它会将您的浏览器转换为 android 移动 chrome 版本。这是扩展链接https://chrome.google.com/webstore/detail/user-agent-switcher/clddifkhlkcojbojppdojfeeikdkgiae?utm_source=chrome-ntp-icon
只需单击扩展图标并选择 chrome for android 并打开 Instagram.com