computadora - publicar en instagram desde php
Cómo publicar imágenes en Instagram usando la API (5)
Estoy construyendo una aplicación php que necesita publicar la imagen cargada por el usuario directamente en Instagram, pero después de una búsqueda rápida encontré que no existe tal función en la API :( y se siente raro ... porque deberían proporcionar una. No estoy seguro de si hay alguna otra forma (excepto las aplicaciones para Android e iOS) para subir imágenes usando php. Por favor, dame cualquier tipo de idea si hay alguna posibilidad.
También leo esto,
¿Cómo comparto un enlace y una foto con Instagram usando PHP?
Gracias
Actualizar:
Instagram ahora está prohibiendo cuentas y eliminando las imágenes basadas en este método. Por favor, use con precaución.
Parece que todos los que han respondido a esta pregunta con algo parecido a lo it can''t be done
es algo correcto. Oficialmente, no puedes publicar una foto en Instagram con su API. Sin embargo, si realiza ingeniería inversa de 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'') {
// 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";
}
}
}
}
}
}
Simplemente copia y pega el código anterior en tu editor de texto, cambia las pocas variables en consecuencia y ¡VOILA! Escribí un article sobre esto y lo he hecho muchas veces. Vea una demostración here .
Ahora, Instagram permite a las empresas programar sus publicaciones utilizando los nuevos puntos finales Beta de publicación de contenido.
https://developers.facebook.com/blog/post/2018/01/30/instagram-graph-api-updates/
Sin embargo, esta entrada del blog - https://business.instagram.com/blog/instagram-api-features-updates - deja en claro que solo están abriendo esa API a sus socios de marketing de Facebook o socios de Instagram.
Para comenzar a programar publicaciones, trabaje con uno de nuestros socios de marketing de Facebook o socios de Instagram.
Este enlace de Facebook - https://developers.facebook.com/docs/instagram-api/content-publishing - lo cataloga como una versión beta cerrada.
La API de publicación de contenido está en versión beta cerrada solo con Facebook Marketing Partners y Instagram Partners. No estamos aceptando nuevos solicitantes en este momento.
Pero así es como lo harías:
Tienes una foto en ...
https://www.example.com/images/bronz-fonz.jpg
Desea publicarlo con el hashtag "#BronzFonz".
Podría usar el borde /user/media
para crear el contenedor de esta manera:
POST graph.facebook.com
/17841400008460056/media?
image_url=https%3A%2F%2Fwww.example.com%2Fimages%2Fbronz-fonz.jpg&
caption=%23BronzFonz
Esto devolvería una ID de contenedor (digamos 17889455560051444), que luego publicaría utilizando el borde / user / media_publish, así:
POST graph.facebook.com
/17841405822304914/media_publish
?creation_id=17889455560051444
Este ejemplo de los https://developers.facebook.com/docs/instagram-api/content-publishing .
Para los usuarios que encuentran esta pregunta, pueden pasar fotos al flujo de intercambio de instagram (desde su aplicación a la pantalla de filtros) en el iPhone usando los ganchos de iPhone: http://help.instagram.com/355896521173347 Aparte de eso, actualmente no hay manera en la versión 1 de la api.
Si lees el enlace que compartiste, la respuesta aceptada es:
No puede publicar imágenes en Instagram a través de la API.
Sin embargo, parece que puedes emular instagram en PC.
Bluestacks es un emulador que te permite ejecutar aplicaciones de Android en tu PC / Mac, etc.
Aunque no estoy seguro de lo bien que funciona.
Una segunda alternativa es usar this . Es la API de Instagram, sin embargo, se ha revertido y explica cómo usarla (incluida la carga de medios).
Una vez más, no estoy seguro de qué tan bien funciona esto.
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 de 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.