Ludovic Frank - Développeur indépendant

Partons à la découverte des API d'Instagram, d'un côté la publique et de l'autre la privée

ionicons-v5-k Ludovic Frank 28 oct. 2024
258 lectures Niveau : Confirmé

Coucou par ici, comment ça va ? 😁.

Merci d'avoir cliqué sur cet article, j'espère qu'il vous plaira même si le sujet est bien spécifique 😛.

Cette semaine on va parler API, les développeurs en utilisent tous les jours dans leurs travaux, bah oui, par exemple pour les paiements en ligne souvent on utilise celle de Stripe ou de PayPal.

Mais on va aller plus en profondeur, car des API il y en a deux types, les publiques et les privés.

Vous êtes prêt ? C'est parti 🙂.

Pourquoi cet article ?

Quand je ne bosse pas sur des projets clients, bah, faut bien que je m'occupe hein... on ne va pas regarder les mouches volées non plus par ce que bon, ce n’est pas le feu.

Et dans ces occupations il y a souvent du bricolage, par exemple parfois, je démonte mon aspirateur robot

(En fait je l'ai démonté, car il était en panne, soit le moteur était mort, soit trop encrassé donc il fallait tester 😁)

Et d'autres fois je m'amuse à regarder comment fonctionnent les applications que les gens utilisent tous les jours, j'ai déjà vu Uber Eats ou encore TikTok....

Et puis, la semaine dernière je me suis dit que je regarderai bien comment fonction Instagram, car même si du côté des gens de la technologie, ce n’est pas trop notre tasse de thé non plus, il faut avouer, que les réseaux sociaux du groupe Meta sont très utilisés dans le grand public.

Me voilà donc à trifouiller l'APK d'Instagram afin de voir un peu ce qui s'y passe, et puis... tant qu'à faire, pourquoi ne pas en faire un article ? 😁.

L'API publique d'Instagram

Si vous êtes développeur, vous la connaissez, ils appellent ça l’API "graph" d'Instagram est elle est accessible sur "graph.instagram.com".

Cette API-là, vous pouvez tous y accéder, il n'y a qu'une condition : seuls les comptes professionnels peuvent utiliser cette API.

C'est-à-dire que si vous avez un compte perso, vous ne pourrez pas l'utiliser, il vous faudra passer en compte professionnel, mais la question, c'est que si vous passez en compte pro, qu'est ce qui change réellement pour le compte et sa visibilité ?

Ça, on en sait trop rien...

Comment utiliser l'API publique d'Instagram ?

On ne va pas trop passer de temps là-dessus, il vous suffit de vous créer une application dans "Meta for developers", pour le reste, c'est dans la documentation de Meta que ça se passe.

Que peut-on faire avec l'API publique ?

L'API publique est très orientée professionnelle est publication de contenu, de ce fait vous pouvez faire entre autres les choses suivantes :

  • Obtenir les informations de bases du compte : le nombre d'abonnés, le nombre de publications, le nom du compte... etc.
  • Récupérer les publications du compte : c'est comme ça que l'on voit les publications Instagram de personnes dans d'autres applications, comme Tinder, ou des sites internet, il y a des plugins Wordpress qui permettent d'afficher les dernières publications Instagram sur le site.
  • Récupérer les stories : les stories sont des publications éphémères, qui disparaissent au bout de 24h, mais grâce à l'API, vous pouvez les récupérer et les afficher ailleurs.
  • Publier des publications : Vous pouvez aussi publier des publications, mais attention, c'est relativement simple, vous appelez l'API et vous lui passez l'URL du fichier que vous souhaitez publier, oui d'ailleurs c'est intéressant, car vous n'uploadez pas directement le fichier, il faudra que l'API aille le chercher sur une URL accessible publiquement sur internet.
  • Publier des stories : c'est la même chose que pour les publications, vous pouvez publier des stories, mais ça reste très limité, vous ne pouvez par exemple pas ajouter de stickers (ou alors j'ai mal cherché).
  • Voir et modérer vos commentaires et les réponses aux commentaires : vous pouvez développer votre propre application qui traite les commentaires, pour par exemple les modérer ou encore y répondre.

Comme vous l'aurez compris, l'API publique permet des choses plutôt simple, mais ultra utiles pour les professionnels qui ont besoin par exemple de souvent publier sur Instagram.

Si vous êtes attentif, vous avez remarqué que vous pouvez uniquement interagir avec le compte qui est connecté à l'API, il n'y a pas possibilité d'aller voir les publications des autres comptes, pas de possibilité de commenter, ou encore ne pas de possibilité de suivre un autre compte.

Cette API est faite ainsi selon moi pour plusieurs raisons :

  • Protection des données des utilisateurs : Oui je sais, c'est Meta (Facebook), mais bon, ils ne peuvent pas faire absolument n'importe quoi non plus, il faut qu'ils protègent un minimum les utilisateurs pour éviter d'avoir une mauvaise image.
  • Lutte contre les bots (et donc le spam) : Telegram est un exemple assez visible de ça, la plateforme se veut assez ouverte et laxiste sur la modération, mais, le problème c'est que j'ai personnellement souvent des messages complètement hors sujet ou des messages de spam, et ça, je ne suis pas fan.
  • Protection des intérêts de Meta : Bah oui, Meta reste une entreprise privée qui a ses intérêts commerciaux, que tout le monde puisse faire n'importe quoi sur la plateforme, ça ne les arrange pas trop, et, c'est normal. Meta protège simplement ses intérêts commerciaux.

Si vous voulez un exemple concret de l'usage permit par l'API publique, vous pouvez voir le SAAS "Plus tard" de Josselin.

Utiliser l'API publique d'Instagram est sans risque pour votre compte, elle est faite pour ça.

L'API privée d'Instagram

Avant toute chose

N'utilisez jamais l'API privée d'Instagram dans vos applications

Vous allez le comprendre par la suite, mais c'est une très mauvaise idée d'utiliser cette API-là dans vos applications, en effet, elle n'est pas conçue pour être utilisée par des développeurs externes.

Si vous l'utilisez, à terme votre compte sera purement et simplement banni de la plateforme, et je ne pourrais pas être tenu responsable, car, je vous aurais prévenu, vous allez être banni.

D'ailleurs, l'utilisation de cette API est contre les conditions d'utilisation d'Instagram 🙂.

Maintenant que vous avez été prévenu, revenons à des choses plus intéressantes, pour le plaisir de "savoir", on va aller titiller cette API.

Qu'est-ce que l'API privée d'Instagram ?

L'API privée d'Instagram est l'API avec laquelle les applications officielles Instagram communiquent (iOS et Android, je ne parle pas du web, car sur Instagram, le web, c'est anecdotique).

Quand vous lancez l'application Instagram sur votre smartphone, c'est avec l'API privée d'Instagram que votre appareil communique.

Que peut-on faire avec l'API privée ?

Bah, c'est relativement simple, il est possible de faire tout ce que vous pouvez faire via l'application Instagram.

Mais comme je l'ai dit plus haut, hormis pour vous amuser et pour tester et comprendre, ne l'utilisez jamais dans un autre cadre, sinon : adieu votre compte Instagram.

On rentre un peu plus dans les détails techniques ici, mais c’est plus simple qu’il n’y paraît.

Comment voir cette API ?

Ah, c'est là qu'on commence à s'amuser, car contrairement à l'API publique, l'API privée n'est pas documentée, enfin si elle doit l'être, mais uniquement accessible pour les employés de Meta.

Donc, pour ça, il va falloir faire ce qu'on appelle un "Man in the Middle".

Le proxy pour faire un "Man in the Middle"

Alors, qu'est ce qu'un Man in the Middle ? C'est tout simplement le fait de se mettre entre deux appareils, ici le smartphone Android client et les serveurs de Meta. cela permet de voir les données (les requêtes HTTP) passer.

Alors, si vous êtes sur Mac comme moi, il existe une super application qui fait ça, et ils prennent en charge le "SSL", on y revient plus tard.

L'application en question, c'est Poxyman, j'aurais d'ailleurs pu la mettre dans mon top des applications Setapp.

Une fois l'application installée et activée, il va falloir configurer votre Android pour qu'il passe par le proxy proposé par Proxyman.

Configurer un proxy sur Android

Ça, vous pouvez soit le faire par l'interface graphique, dans les connexions Wifi de votre appareil, mais bon, si vous vous intéressez à un article comme celui-là c'est que vous avez deux ou trois notions techniques.

Il est possible de définir un proxy sur un appareil Android avec "ADB" (c'est la ligne de commande Android, pour les développeurs).

Pour cela c'est la commande suivante :

Enfin, pour enlever le proxy, c'est la commande :

Le problème du SSL

Ah bah oui, hein, ce n’est pas si simple, car, globalement sur internet maintenant, toutes les connexions se font via du HTTPS, et non plus du HTTP.

Il va donc falloir que vous installiez le certificat SSL de Proxyman sur votre appareil Android, afin que votre smartphone reconnaisse les certificats signés par Proxyman comme valides.

Pour cela, sur votre smartphone rendez-vous sur http://cert.proxyman.io/ et vous pourrez y installer le certificat.

Faites bien attention, c'est HTTP et pas HTTPS.

Une fois installé le certificat sur votre smartphone, vous pourrez voir toutes les requêtes déchiffrer et passer dans Proxyman... enfin, pas encore tout à fait...

Le SSL Pinning

Qu'est-ce que c'est encore ce machin ? 😁.

En fait, chez Meta (et chez les autres en fait), ils ne sont pas bêtes, ils savent bien qu'on peut installer un certificat racine à nous sur l'appareil, donc, dans l'APK des applications (ici Instagram), ils mettent une liste de signature de certificats réellement autorisée, et donc même si le certificat est accepté par le système l'application refusera de l'utiliser.

Pour la sécurité, c'est important, car nous ici, on cherche juste à voir ce qui se passe entre l'APK d'instagram est les serveurs, maintenant en se mettant au milieu comme ça, un personne mal intentionné pourrait altérer les données pour afficher d'autres choses, ou uploader autre chose... ou même pire, voler le compte.

Et oui, pas bête ...

D'ailleurs voilà à quoi ressemble un fichier de configuration de SSL Pinning dans une application Android :

Les données floutées en haut de la capture d'écran, c'est les domaines appartenant aux propriétaires de l'application Android, en dessous, ce sont les signatures numériques publiques des certificats autorisés.

Donc, vous l'aurez compris, pour passer ce problème, il va falloir modifier l'APK de l'application, pour qu'il se mette à accepter le certificat que vous avez installé sur votre smartphone.

Pour cela, plusieurs options, vous pouvez utiliser APK Lab et Visual Studio code, pour "décompiler" l'APK et le recompiler une fois modifier, c'est très intéressant à faire, et je vous laisse chercher.

Sinon, vous avez ce dépôt GitHub, qui contient un script ainsi que des APK déjà patchés

Maintenant, vous pouvez voir toutes les requêtes passer dans Proxyman, et donc voir comment l'application fonctionne

L'API privée en action

Et voilà, dorénavant dans Proxyman, vous voyez tout le trafic envoyés aux serveurs d'Instagram en clair.

Vous n'avez plus qu'à vous balader, uploader des fichiers, voir des stories, et vous verrez ce qui se passe... et de là vous pourrez créer votre propre script qui se comporte comme l'APK, mais vous verrez une fois encore, que ce n'est pas si simple, les ingénieurs de Meta sont bons et ils ont bien fait en sorte de vous geler si vous le faites.

Par exemple, contrairement à l'API publique, sur l'API privée, quand vous voulez créer une nouvelle publication, le serveur n'accepte que le JPEG, c'est malin, car du coup la compression se fait sur l'appareil de l'utilisateur, et donc, c'est des couts en moins pour Meta.

Niveau économie d'échelle, on est pas mal 😁.

Une API dangereuse

Maintenant que vous voyez directement comment l'APK interagit avec Instagram, vous vous rendez compte que beaucoup de données sont envoyées aux serveurs.

Par exemple, il n'y a pas qu'un token d'authentification, mais aussi des tokens liées à l'appareil, un UUID... etc.

Et le truc super intéressant, c'est que, d'autres ont déjà fait le travail avant vous, en fait...

Une bibliothèque en Typescript pour l'API privée

Et oui, c'est accessible directement sur GitHub.

Du coup, comme vous le voyez, cette bibliothèque n'est plus maintenue gratuitement, maintenant ils proposent un abonnement (tu m'étonnes... vu le truc imbuvable à maintenir).

Plus tôt, je vous dis que c'est très dangereux à utiliser, et vous allez comprendre pourquoi.

Regardez ce fichier de constante.

Donc première chose, il est basé sur la version 222 de l'APK d'Instagram, aujourd'hui, nous sommes à la version 354, si vous utilisez la bibliothèque tel quel... vous allez allumer une lumière rouge chez Meta, plus personne n'est sur la version 222.

Mais également, regardez le nombre de "clefs" dans les constantes : il y en a plein, et elles sont différentes d'une version de l'APK à une autre, donc si vous faites la moindre erreur, que votre version de l'APK déclaré à l'API privé n'est pas raccord avec les clefs que vous avez définies.

Paf, une lumière rouge chez Meta.

Après, vous pouvez vous amuser à vous balader dans le code source, pour chaque interaction avec Instagram vous voyez le "endpoint", et vous pouvez comparer ça ce que vous voyez dans Proxyman.

Conclusion

Et voilà, cet article touche à sa fin, l'idée était de vous montrer la différence entre une APU publique et une API privée.

Et surtout, que les API privées, tout est fait pour vous empêcher de les utiliser, mais c'est intéressant à regarder.

Si vous-même un jour, devez travailler sur une API que seule votre entreprise est censée utiliser, vous pouvez voir comment font les plus grands noms de la tech pour se protéger.

Et je dois avouer qu'Instagram, ils y vont fort.

Passez une très bonne journée et à très bientôt 🙂.