Как отправлять изображения в Instagram с помощью API
Я создаю приложение php, которое должно публиковать загруженное изображение пользователя непосредственно в Instagram, но после быстрого поиска я обнаружил, что в API нет такой функции:( и это кажется странным... потому что они должны обеспечивать Я не уверен, есть ли какой-либо другой способ (кроме приложений для Android и iOS) для загрузки изображения с использованием php. Просьба дать мне любую идею, если есть какая-либо возможность.
Я также читал это,
Как поделиться ссылкой и фотографией с помощью Instagram с помощью PHP
Спасибо
Ответы
Ответ 1
Если вы прочитали ссылку, которой вы поделились, ответ будет принят:
Вы не можете публиковать изображения в Instagram через API.
Похоже, вы можете эмулировать Instagram на ПК.
Bluestacks - эмулятор, который позволяет запускать приложения для Android на вашем ПК /Mac и т.д.
Я не уверен, насколько хорошо это работает, хотя.
Ответ 2
Обновить:
Instagram теперь запрещает учетные записи и удаляет изображения на основе этого метода. Пожалуйста, используйте с осторожностью.
Кажется, что каждый, кто ответил на этот вопрос чем-то вроде этого, it can't be done
это несколько правильно. Официально вы не можете опубликовать фотографию в Instagram с их API. Однако, если вы перепроектируете 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 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 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";
}
}
}
}
}
}
Просто скопируйте и вставьте приведенный выше код в ваш текстовый редактор, измените несколько переменных соответственно и VOILA! Я написал статью об этом, и я делал это много раз. Смотрите демо здесь.
Ответ 3
UPDATE
Теперь это возможно:
https://developers.facebook.com/docs/instagram-api/content-publishing
Content Publishing API - это подмножество конечных точек API Graph Instagram, которые позволяют публиковать мультимедийные объекты. Публикация медиа-объектов с помощью этого API - это двухэтапный процесс: сначала вы создаете контейнер медиа-объекта, а затем публикуете контейнер в своей бизнес-учетной записи.
Ответ 4
Вы можете использовать pynstagram, это простой инструмент CLI и модуль Python:
pynstagram -u username -p password -f ~/kittens/31415.jpg -t '#meow'
Ответ 5
Для пользователей, которые находят этот вопрос, вы можете передавать фотографии в поток обмена instagram (из вашего приложения на экран фильтров) на iPhone с помощью iPhone-крючков: http://help.instagram.com/355896521173347 Помимо этого, в версии 1 api нет способа.
Ответ 6
Instagram теперь позволяет компаниям планировать свои публикации, используя новые конечные точки публикации контента.
https://developers.facebook.com/blog/post/2018/01/30/instagram-graph-api-updates/
Тем не менее, этот пост в блоге - https://business.instagram.com/blog/instagram-api-features-updates - разъясняет, что они открывают этот API только своим партнерам по маркетингу Facebook или партнерам Instagram.
Чтобы приступить к планированию сообщений, пожалуйста, поработайте с одним из наших Маркетинговые партнеры Facebook или партнеры Instagram.
Эта ссылка из Facebook - https://developers.facebook.com/docs/instagram-api/content-publishing - отображает ее как закрытую бета-версию.
API публикации контента находится в закрытой бета-версии с Facebook Marketing Партнеры и партнеры 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
Это вернет идентификатор контейнера (скажем, 17889455560051444), который вы затем опубликуете, используя край /user/media_publish, например:
POST graph.facebook.com
/17841405822304914/media_publish
?creation_id=17889455560051444
Этот пример из документов.
Ответ 7
Я пытался использовать IFTTT и многие другие сервисы, но все делали вещи или отправляли сообщения из Instagram на другую платформу, а не в Instagram. Я прочитал больше, чтобы узнать, что Instagram не предоставляет такого API на данный момент.
Использование синего стека снова связано с интенсивной установкой и выполнением действий только вручную.
Тем не менее, вы можете использовать свой Google Chrome в настольной версии, чтобы сделать пост в Instagram. Нужно немного подправить.
- Откройте Chrome и просмотрите Instagram.com
- Перейдите к элементу, нажав правую кнопку мыши на Chrome.
- В правом верхнем меню раскрывающегося меню инструментов разработчика выберите другой инструмент.
- Далее выберите условия сети.
- В разделе выбора сети, см. второй раздел с именем user agent.
- Снимите флажок , выберите автоматически и выберите chrome для Android из списка данного пользовательского агента.
- Обновите страницу Instagram.com.
Вы заметите изменение в пользовательском интерфейсе и возможность сделать пост в Instagram.
Ваша жизнь теперь легка.
Дайте мне знать более простой способ, если вы можете найти любой.
![enter image description here]()
I wrote on https://www.inteligentcomp.com/2018/11/how-to-upload-to-instagram-from-pc-mac.html about it.
Ответ 8
Еще проще, если вы используете конкретный социальный API. Обратите внимание, что вы можете публиковать как изображения, так и видео (meda_type может быть "изображение" или "видео").
curl --request POST \
--url https://concretesocial.io/1.0/publish \
--data '{ "caption":"Wonderful",
"media_type" : "image",
"media_url" : "https://cdn.pixabay.com/photo/2018/10/28/16/11/landscape-3779159_1280.jpg",
"profiles" : ['5c21013a8c93b0050877659d']"}'
Ответ 9
Нет API для публикации фотографий в Instagram с помощью API, но существует простой способ, который заключается в том, что, установив расширение Google "User Agent", оно превратит ваш браузер в версию Android Mobile Chrome. Вот ссылка на расширение https://chrome.google.com/webstore/detail/user-agent-switcher/clddifkhlkcojbojppdojfeeikdkgiae?utm_source=chrome-ntp-icon
просто нажмите на значок расширения и выберите Chrome для Android и откройте Instagram.com