Dans cet article, j'aborde un point que je recherchais depuis très longtemps, à savoir comment utiliser des API Instagram. Alors non, nous n'allons pas comme de manière classique regarder le fonctionnement des API, mais je vais plus vous montrer comment extraire des données d'un flux de données  fourni par Instagram lui-même. j'ai déjà écrit des articles sur ce système mais celui-ci aborder la chose de manière différente.

Comme vous pouvez donc déjà vous imaginer, ce fût de données ne renvoie pas l'intégralité des informations concernant un compte Instagram, mais cela ressemble plus à ce que fournit un flux RSS, à savoir un certain nombre d'informations récentes sur un compte. L'information ci-dessus est importante, vous ne pourrez pas faire de recherche particulière sur des données anciennes.
 
Voyons le fonctionnement. Dans le code que je fournis, le principe est le suivant : Je propose à utilisateur de fournir le nom d'un compte au travers d'un champ de saisie, ainsi qu'un bouton Valider qui va poster votre recherche.
Au moment de votre poste, le programme va et récupérer le nom de l'utilisateur, de ce nom vous recherchez via le flux fourni par Instagram, flux dans lequel vous passez en paramètres le nom de l'utilisateur suivi de la chaîne "/?__a=1" sans les doubles côtes bien entendu, afin Instagram vous retourne un fou au format JSON de compte que vous avez sélectionné.
Ce fut json, je vous laisse le soin de regarder l'intégralité des informations qui peuvent vous intéresser. Dans mon cas et dans cet exemple, j'en récupère les derniers posts de types photos s'ils ont été postés par un utilisateur afin de les mettre de côté sur mon serveur. Je ne prends pas en compte les posts de type vidéo, bien que je puisse dans le programme les récupérer. D'ailleurs le code concernant les  est commenté, vous pourrez vous en inspirer.
Ce programme enregistrera donc dans un dossier qui porte le nom de l'utilisateur c'est-à-dire le nom du compte que vous avez sélectionné ou saisi dans le formulaire en début de page. Le dossier est créé et y seront stockés les dernières images postées par un utilisateur.
Dans cet exemple, vous trouverez une boucle de type foreach dans laquelle je récupère plusieurs types d'informations et lorsque je tombe sur une image, je l'enregistre sur le serveur. Vous pouvez à partir de ce code, non pas enregistrer mais afficher l'image dans le cadre du développement, par exemple, d'une galerie d'images issues d'instagram.
J'ai découpé le script en deux fichiers PHP, le premier dénommé index.php propose simplement à l'utilisateur un formulaire de saisie, dans lequel l'utilisateur pourra saisir le nom du compte qui l'interesse. Lorsque ce fichier php est posté au travers du bouton Valider c'est-à-dire au travers de ce script, un deuxième programme contenu dans le fichier dénommé étape 2. PHP va prendre le relais. Ce fichier va afficher un nouveau formulaire en rappelant le nom du compte que vous souhaitez traiter, ce fichier va vous donner un lien direct vers une page qui contiendra le flux JSON qui "portera" les données qui vous intéresse.
Ouvrez votre lien dans une nouvelle fenêtre, mon programme le fait simplement lorsque vous cliquez sur le lien donné, copiez via le bouton copier affiché dans cette nouvelle fenêtre, les données dans votre presse-papier, revenez sur le programme toujours dénommé étape 2.
instagrammm1
Collez désormais le contenu de votre presse-papier dans le cadre destiné à cet effet.
instagrammm2
Une fois le bouton Envoyer cliqué, les données se téléchargent dans le sous-répertoire qui portera le nom du compte que vous souhaitez suivre, avec l'ensemble des dernières photographies postées par ce compte en l'occurrence.
Comme je vous le disais, le flux fourni par Instagram ne vous propose que les 12 dernières publications du compte en question. De ce fait, vous ne pourrez pas récupérer plus de 12 photos à chaque poste. Toutefois, à partir de mon script, il vous sera possible d'automatiser la tâche au travers d'un cron si jamais vous souhaitez suivre un compte qui publie de manière très courante des photographies.
Comme le flux de contient pas plus de 10 photos, je vous laisse le soin de calculer la fréquence de lancement de votre cron pour récupérer l'intégralité des photos d'un compte qui publie régulièrement.
 

 <form method="POST" action="etape2.php">
	<?php
	if (isset($_POST["compte"]))
	{
	echo "Compte : ".$_POST["compte"];
	echo '<input type="text" name="compte" value="'.$_POST["compte"].'">'; 
	echo '<ol>
		<li>Cliquer sur <a href="https://www.instagram.com/'.$_POST["compte"].'/?__a=1" target=\"_blank\">ce lien</a> qui va ouvrir une nouvelle fenetre</li>
		<li>Cliquer sur le bouton copier et revenez ici</li>
		<li>Coller le contenu dans le cadree ci-dessous</li>
		<li>Valider en cliquant sur le bouton</li>
		</ol>';
	}
	?>
	
    <p>
        <label>Coller le JSON</label>
        <textarea name="json" rows="10" cols="30" required></textarea>
		
    </p>
 
    <input type="submit" name="submit" class="Save" />
</form>

<?php
 /**
 * Code de départ fourni par Truong SA
 * https://gist.github.com/shrimp2t
 * */
if (isset($_POST["submit"]))
{
    echo "Nom : ".$_POST["compte"];
    // decode  le flux JSON dans un tableau d'objets
    $content = json_decode($_POST["json"]);

   // Récupère tous les derniers posts possibles
    $edges = $content->graphql->user->edge_owner_to_timeline_media->edges;
    @mkdir($_POST["compte"]); //@ pour ne pas renvoyer d'erreur si le dossier est déja créé
	

    // Boucle sur tous les derniers posts
    foreach ($edges as $edge)
    {
        // Récupérer UN post
        $node = $edge->node;
 
        // On récupère son shortcode
        $url = $node->shortcode;
 
        //On récupère son caption si présent 
$caption = @$node->edge_media_to_caption->edges[0]->node->text;
// On récupère le nombre de liKES
$likes = $node->edge_liked_by->count;
// On récupère le nombre total de commentaires
$comments = $node->edge_media_to_comment->count;
// On sauvegarde l'image
$image_path = "./".$_POST["compte"];
if (!is_null($node->display_url)) {
$image_path = $_POST["compte"]."/" . $url . ".png";
file_put_contents($image_path, file_get_contents($node->display_url));
}
}
echo "<p>Fini</p>";
}
?>