Solución:
Actualizar:
Instagram ahora está prohibiendo cuentas y eliminando las imágenes según este método. Úselo con precaución.
Parece que todos los que han respondido a esta pregunta con algo parecido a it can't be done
es algo correcto. Oficialmente, no puedes publicar una foto en Instagram con su API. Sin embargo, si aplica ingeniería inversa a la API, puede hacerlo.
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') 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";
Simplemente copie y pegue el código anterior en su editor de texto, cambie las pocas variables en consecuencia y ¡VOILA! Escribí un artículo sobre esto y lo he hecho muchas veces. Vea una demostración aquí.
Si lees el enlace que compartiste, la respuesta aceptada es:
No puede publicar imágenes en Instagram a través de la API.
Instagram ahora ha dicho esto:
¡Ahora puede publicar su contenido utilizando los efectos de las API de Instagram (nuevos) a partir del 26 de enero de 2021!
https://developers.facebook.com/blog/post/2021/01/26/introducing-instagram-content-publishing-api/
Ojalá tengas suerte aquí.
ACTUALIZAR
Ahora es posible:
https://developers.facebook.com/docs/instagram-api/content-publishing
La API de publicación de contenido es un subconjunto de puntos finales de la API Graph de Instagram que le permite publicar objetos multimedia. La publicación de objetos multimedia con esta API es un proceso de dos pasos: primero crea un contenedor de objetos multimedia y luego publica el contenedor en su cuenta comercial.
Eres capaz de añadir valor a nuestra información cooperando tu experiencia en los comentarios.