La problématique

Difficile à placer cet article car il se trouve à cheval sur deux de mes rubriques principales : les API et la programmation. Cet article va plus parler de programmation car il est le résultat synthétique de mon travail d'hier, commenté. Pour celles et ceux qui suivent l'activité culturelle locale d'Aujourd'hui à Nancy, vous avez surement remarqué que, cofinement obligeant, j'ai recentré pas mal d'articles sur des artistes du monde entier, exposant leurs oeuvres sur Youtube, mais aussi Instagram. Et là, je me suis heurté à une problématique simple : chacun d'entre nous, que ce soit sur Facebook, Instagram, Twitter ou que sais-je encore comme réseau social, nous mettons, mais surtout nous changeons, pour certains très régulièrement, les photos de profil. Vous vous imaginez bien qu'une fois un articlé écrit, ne serait-ce au bout de 20, il n'est plus possible de suivre chacune des modifications des photos de profils de chacun des artistes que nous mettons en valeur. Alors que faire ?

Et ben moi, je connais un ptit gars qui s'interesse aux API du web... Pas vous ? Il possède même un site avec une rubrique dédiée aux API du web sur son site !

Comment résoudre le problème de récupération de la photo de profil Instagram et des autres données utilisateurs ?

Comme souvent, j'ai toujours tendance à minimiser en répondant : c'est simple. Oui c'est simple une fois qu'on a compris comment ca marchait. Alors, je vais vous coller mon code et vous le commenter. Toujours aussi peu fan de la programmation orientée objet, j'ai bien entendu tout codé sour la forme de fonction dont le paramètre, pour chacune d'entre elles, est une chaine de caractère représentant le nom de l'utilisateur. On y va.

Pour les puristes de l'objet, méthode dont j'ai horreur, je sais je suis rétrograde, mais j'assume, il y a une abbération car, je soupçonne la possibilité de faire de l'héritage. Mais ici, on n'est là pour faire fonctionner les choses, pas pour se poser des questions métaphysiques sur les optimisations patati patata..... Quant au CSS, oui il serait largement mieux dans un css externe, je suis entièrement d'accord.

NOTE : Pour celles et ceux qui l'ignorent, Instagram avait mis en place, à priori pour une durée qui n'est pas définitive, la possibilité de lister en JSON le contenu de ses données en ajoutant aux URL "/?__a=1". Je l'accorde, il faut le savoir. Mais quand on a trouvé ca, c'est la porte ouverte... à la suite de mon article !

Récupérer la photo de profil Instagram

function get_profile_IG_pic($user){
        $url = "https://www.instagram.com/".$user."/?__a=1";
        $contenu = json_decode(file_get_contents($url),true);
        return '<img src="'.($contenu["graphql"]["user"]["profile_pic_url_hd"]).'" style="float:left;margin-right:70px;overflow:hidden;-webkit-border-radius:150px;-moz-border-radius:150px;border-radius:150px;width:190px;height:190px;box-shadow: 15px 10px 10px black;">';
    }

Une fois lue (file_get_content), l'URL est décodée (json_decode) et grâce au paramètre true, transformée en tableau associatif. Il suffit donc d'afficher une première fois le tableau dans sa globalité pour visualiser où se trouve la donnée souhaitée, de la récupérer et de la retourner.

Récupérer la biographie de l'utilisateur

function get_profile_IG_bio($user){
        $url = "https://www.instagram.com/".$user."/?__a=1";
        $contenu = json_decode(file_get_contents($url),true);
        return nl2br($contenu["graphql"]["user"]["biography"]);
    }

Une fois lue (file_get_content), l'URL est décodée (json_decode) et grâce au paramètre true, transformée en tableau associatif. Il suffit donc d'afficher une première fois le tableau dans sa globalité pour visualiser où se trouve la donnée souhaitée, de la récupérer et de la retourner.

Compter le nombre de suiveurs de l'utilisateur (followers)

function get_nb_IG_followers($user){
        $url = "https://www.instagram.com/".$user."/?__a=1";
        $contenu = json_decode(file_get_contents($url),true);
        return nl2br($contenu["graphql"]["user"]["edge_followed_by"]["count"]);

    }

Une fois lue (file_get_content), l'URL est décodée (json_decode) et grâce au paramètre true, transformée en tableau associatif. Il suffit donc d'afficher une première fois le tableau dans sa globalité pour visualiser où se trouve la donnée souhaitée, de la récupérer et de la retourner. Ici, je rajoute un nl2br pour bien marquer les retours à la ligne puisque ce n'est pas du HTML de retourné mais du texte. Il faut donc transformer le code ASCII 13 en "retour chariot", c'est à dire en <br>, grâce à nl2bl

Récupérer le nom complet de l'utilisateur

function get_IG_fullname($user){
        $url = "https://www.instagram.com/".$user."/?__a=1";
        $contenu = json_decode(file_get_contents($url),true);
        return nl2br($contenu["graphql"]["user"]["full_name"]);
    }

Une fois lue (file_get_content), l'URL est décodée (json_decode) et grâce au paramètre true, transformée en tableau associatif. Il suffit donc d'afficher une première fois le tableau dans sa globalité pour visualiser où se trouve la donnée souhaitée, de la récupérer et de la retourner. Ici, je rajoute un nl2br pour bien marquer les retours à la ligne puisque ce n'est pas du HTML de retourné mais du texte. Il faut donc transformer le code ASCII 13 en "retour chariot", c'est à dire en <br>, grâce à nl2bl

Lire le contenu global

function get_IG_contenu($user){
        $url = "https://www.instagram.com/".$user."/?__a=1";
        return(json_decode(file_get_contents($url),true));
    }

Une fois lue (file_get_content), l'URL est décodée (json_decode) et grâce au paramètre true, transformée en tableau associatif. Il suffit donc d'afficher une première fois le tableau dans sa globalité pour visualiser où se trouve la donnée souhaitée, de la récupérer et de la retourner.

Conclusion

Alors en conclusion, mon programme ne fonctionnant actuellement que sur mon serveur local (je vous mets un lien pour télécharger le fichier), en passant la chaine "annapolina_" en paaramètre, mais je doute que tout le monde la connaisse. Que diriez vous plutot d'une copie d'écran de la page "Instagram" (enfin pas tout à fait puisque je ne liste que se dernieres publications) du Grand Michel GODET ?

Michel godet