Comment poster des photos sur instagram en utilisant L'API

je suis en train de construire une application php qui a besoin de poster l'image téléchargée directement sur Instagram, mais après une recherche rapide, j'ai découvert qu'il n'y avait pas de telle fonction dans L'API :( et ça fait bizarre... parce qu'ils doivent fournir. Je ne suis pas sûr qu'il y ait un autre moyen (à l'exception des applications pour android et iOS) de télécharger des images en utilisant php. Donnez-moi une idée s'il y a une possibilité.

j'ai aussi lu ceci,

Comment puis-je partager un lien et une photo avec Instagram en utilisant PHP

Merci

74
demandé sur Community 2013-09-17 12:17:59

5 réponses

si vous lisez le lien que vous avez partagé, la réponse acceptée est:

vous ne pouvez pas poster de photos sur Instagram via L'API.

il semble que vous pouvez émuler instagram sur PC cependant.

Bluestacks est un émulateur qui vous permet d'exécuter des applications android sur votre PC/Mac, etc.

Je ne sais pas si ça marche.

65
répondu Albzi 2018-09-03 07:10:13

mise à jour:

Instagram bannit désormais les comptes et supprime les images basées sur cette méthode. Veuillez utiliser avec prudence.


il semble que tous ceux qui ont répondu à cette question par quelque chose du genre it can't be done aient quelque peu raison. Officiellement, vous ne pouvez pas poster une photo sur Instagram avec leur API. Cependant, si vous inversez la conception de L'API, vous le pouvez.

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";
                    }
                }
            }
        }
    }
}

Just copiez et collez le code ci-dessus dans votre éditeur de texte, changez les quelques variables en conséquence et voilà! J'ai écrit un article à ce sujet et je l'ai fait de nombreuses fois. Voir une démo ici .

87
répondu Lance 2017-05-09 14:32:01

pour les utilisateurs qui trouvent cette question, vous pouvez passer des photos au flux de partage instagram (de votre application à l'écran des filtres) sur iPhone en utilisant des crochets iPhone: http://help.instagram.com/355896521173347 en dehors de cela, il n'y a actuellement aucun moyen dans la version 1 de l'api.

5
répondu Amru E. 2014-07-17 07:05:35

Instagram permet désormais aux entreprises de programmer leurs messages, en utilisant les nouveaux paramètres bêta de publication de contenu.

https://developers.facebook.com/blog/post/2018/01/30/instagram-graph-api-updates /

cependant, ce billet de blog - https://business.instagram.com/blog/instagram-api-features-updates - il est clair qu'ils ne ouvrent cette API à leurs partenaires de marketing Facebook ou Instagram Partners.

pour commencer avec les postes de planification, s'il vous plaît travailler avec l'un de nos Partenaires marketing Facebook ou partenaires Instagram.

ce lien de Facebook - https://developers.facebook.com/docs/instagram-api/content-publishing - il s'agit d'une bêta fermée.

L'API de publication de contenu est en beta fermée avec Facebook Marketing Partenaires et partenaires Instagram uniquement. Nous n'acceptons plus de nouvelles les candidats à cette époque.

mais c'est comme ça que tu le ferais:

vous avez une photo à...

https://www.example.com/images/bronz-fonz.jpg

vous voulez le publier avec le hashtag"#BronzFonz".

vous pouvez utiliser le bord /user/media pour créer le conteneur comme ceci:

POST graph.facebook.com 
  /17841400008460056/media?
    image_url=https%3A%2F%2Fwww.example.com%2Fimages%2Fbronz-fonz.jpg&
    caption=%23BronzFonz

cela retournerait un ID de conteneur (disons 17889455560051444), que vous publierez ensuite en utilisant le fichier/user / media_publish edge, comme ceci:

POST graph.facebook.com
  /17841405822304914/media_publish
    ?creation_id=17889455560051444

cet exemple tiré du docs .

1
répondu Joshua Dance 2018-02-26 23:58:40

mise à JOUR Il est maintenant possible:

https://developers.facebook.com/docs/instagram-api/content-publishing

L'API de publication de contenu est un sous-ensemble de paramètres de L'API Instagram Graph qui vous permettent de publier des objets média. Publier des objets multimédia avec cette API est un processus en deux étapes - vous créez d'abord un conteneur d'objet multimédia, puis vous publiez le conteneur sur votre compte D'affaires.

1
répondu Tom Roggero 2018-04-05 16:41:48