Savoir son nombre de followers instagram

Résolu
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 Ambassadeur - 18 nov. 2024 à 19:09
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 - 17 déc. 2024 à 19:22

Bonjour,

Je cherche à m'inspirer d'un script python pour connaitre son nombre de followers sur Instagram. Merci des exemples.


A voir également:

5 réponses

luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003
Modifié le 18 nov. 2024 à 20:14

Bonjour,

En premier lieu, le compte Instagram doit être "Creator" ou "Business" pour disposer d'une clé API.

Ensuite, avant de rédiger le script, il convient de s'imprégner de la documentation API :-)

Cette doc en main, il suffit de rédiger un script Python tapant une requête GET sur l'API Instagram avec les bons paramètres puis lire le contenu du JSON renvoyé.

import requests
TOKEN_API = "TOKEN_API"
USER = "ID_USER_INSTAGRAM"
URL_API = f"https://graph.facebook.com/v21.0/{USER}/insights"
parametres_requete = {
    "metric": "follower_count",
    "period": "lifetime",
    "access_token": TOKEN_API
}
reponse = requests.get(URL_API, params=parametres_requete)
if reponse.status_code == 200:
    try:
        body = reponse.json()
        if "data" in body and body["data"]:
            nb_followers = body["data"][0].get("values", [{}])[0].get("value", "Non disponible")
            print(f"Nombre de followers : {nb_followers}")
        else:
            print("Soit aucune donnée n'est disponible, soit le compte a moins de 100 followers.")
    except ValueError as exception:
        print(f"Impossible de lire le contenu du JSON, erreur : {exception}")
else:
    print(f"Erreur {reponse.status_code} rencontrée.")

Tenez au jus !


1
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 Ambassadeur 1 243
16 déc. 2024 à 18:37
import instaloader

# Créer une instance d'Instaloader
L = instaloader.Instaloader()

# Remplacez 'votre_nom_utilisateur' par le nom d'utilisateur du compte Instagram
username = 'plume_quentique_du_mascaret'

# Charger le profil
profile = instaloader.Profile.from_username(L.context, username)

# Afficher le nombre de followers
print(f"Le compte {username} a {profile.followers} followers.")

Avec ce script ça fonctionne, tant mieux, merci pour ton aide !


1
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003
16 déc. 2024 à 19:49

Tant mieux si ça convient, marque le sujet en résolu

Si tu trouves comment régler l'erreur du message 43, reviens poster ici pour les suivants

0
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 1 243 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
17 déc. 2024 à 13:34

J'ai remarqué que ce script, fonctionnel, est stocké en :

C :\Users\quent\onedrive\desktop\Python

Les autres codes sont :

C:\Users\quent\PycharmProjects\pythonProject

Je ne sais pas si cela à un lien de cause à effet ?

0
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003 > quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025
17 déc. 2024 à 16:02

Intéressant.
Python est exécuté où il est installé mais les chemins relatifs sont liés au répertoire courant.
Quand tu fais pydevp.py --file, ton script est chargé en mémoire mais Python utilise toujours le répertoire courant pour accéder aux fichiers.
Ces deux répertoires n'ont peut-être pas les mêmes droits d'accès.

Pour vérifier si tu te le sens, ajoute ça en haut du script :

import os
import sys

print("Interpréteur Python : ", sys.executable)
print("Répertoire courant où le script est exécuté : ", os.getcwd())
print("Droits d'accès et écriture dans le répertoire courant : ", os.access(os.getcwd(), os.W_OK))  
print("Liste des fichiers présents dans le répertoire courant : ", os.listdir(os.getcwd()))
0
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 1 243 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
17 déc. 2024 à 19:22

One drive est apparemment comme un dossier sur C. J'ai stoppé la sauvegarde automatique vers One drive, mon quota gratuit est rempli. Peut-être ai-je fait une fausse manipulation en créant ce script ? Quand je retourne sur le répertoire de PyCharm, que je crée un nouveau script, il est bien enregistré dans son répertoire avec lequel est installé PyCharm. Je ne teste pas plus.

0
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 Ambassadeur 1 243
18 nov. 2024 à 22:27

Mon compte insta n'est pas professionnel ou creator. Je me connecte par un navigateur a partir du pc, comme sur smartphone. 

Est que ce code sur le lien suivant ferait l'affaire :

https://openclassrooms.com/forum/sujet/compteur-dabonne-sur-insta


0
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003
Modifié le 19 nov. 2024 à 10:19

C'est du scraping de site Web. Il suffit que la page change pour devoir mettre à jour le script, en plus d'être une pratique non forcément acceptée. Quid des dérives sur un forum public. Je n'apporterai aucune aide sur cette piste ¯\_(ツ)_/¯

0
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 1 243 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
19 nov. 2024 à 16:46
from bs4 import BeautifulSoup
import requests
import time


while(True):
    URL = "https://www.instagram.com/systorm.os_off/"
    def parse_data(s):
        data = {}
        s = s.split("-")[0]
        s = s.split(" ")
        data['Followers'] = s[0]
        #data['Following'] = s[2]
        #data['Posts'] = s[4]
        return data

    def scrape_data(username):
        try:
            r = requests.get(URL.format(username))
            s = BeautifulSoup(r.text, "html.parser")
            meta = s.find("meta", property ="og:description")
            return parse_data(meta.attrs['content'])
        except AttributeError :
            pass

    if __name__=="__main__":
        username = "Systorm-OS Officiel"
        data = scrape_data(username)
        print(data)
    time.sleep(50)


j'ai comme réponse "none", où est le problème ?

0
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003 > quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025
Modifié le 19 nov. 2024 à 20:53

A la limite

  • si y avait un seul truc à corriger,
  • vu que c'est déjà posté,

j'aurais mis mais là y a vraiment trop à faire. 

Le script présent sur le topic de forum où tu l'as récupéré date de bien avant mai 2022 et la 4ème réponse était déjà bien explicite :

"C'est généralement une très mauvaise idée de faire des requêtes de ce genre à des sites tels que Google/Facebook/etc. Tu peux essayer de regarder leur API. Eventuellement, tu peux aussi passer par 

https://www.instagram.com/###USER_NAME###/?__a=1

qui permet d'obtenir un JSON avec les informations que tu souhaites mais pas sûr que tu ne te fasses pas blacklister en l'utilisant trop souvent"

Aparté, sur Powershell la commande 

Invoke-WebRequest -Uri "https://www.instagram.com/blitzstream_officiel/?__a=1" -Method Get

ne renvoie plus le nombre d'abonnés mais elle répond. Tu peux déjà te faire la main sur ce genre de commandes.

Voici le site d'origine d'où provient le script que tu as récupéré. En bas, il mentionne être une traduction de ce site où le post date du 21 juillet 2021. Tente avec cette version, on peut être surpris. Autrement, je te laisse voir les liens présents au post #1 pour une approche plus pérenne et formatrice.

Crois-bien qu'au premier refactor de la page Instagram tu vas abandonner le projet. Une MAJ du script suite à évolution d'API c'est 30min en lisant la doc.

0
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 1 243 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
Modifié le 20 nov. 2024 à 12:27

Je vais abandonner le projet, c'est trop compliqué pour mon niveau de script. Merci de ton aide.

Je vais tenter par acquit de conscience ceci :

https://acervolima.com/obter-detalhes-do-perfil-do-instagram-usando-python/

0
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003 > quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025
Modifié le 20 nov. 2024 à 13:12

Tiens au jus mais tu te bases là sur le lien de "Voici le site d'origine" où le scraping se base sur la page Instagram en 2021. Le Web scraping est régulièrement combattu à juste titre par les grands sites pour éviter des requêtes automatisées en masse ou du vol de contenu, entre autres.

C'est une des raisons pourquoi je ne peux pas aider sur cette piste sur un forum public : ton script lancera peut-être une requête par jour quand un lecteur du forum, 3 ans après, lancera une requête chaque milliseconde.

Je ne sais pas quel était le besoin mais si c'est pour ton compte dans un usage pro/semi-pro, monter de version offre d'autres possibilités qu'un accès API :-)

Et à titre perso tu apprendras plus avec une API où cette connaissance est réplicable.

0
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 7 828
Modifié le 29 nov. 2024 à 17:02

Bonjour,

J'omets tous les aspects liés aux clés et sur le scraping car luckydu43 a selon moi déjà dit tout ce qu'il y avait dire.

As-tu regardé le paquet instaloader et plus particulièrement la fonction get_followers ?

from instaloader import Instaloader

USER = "ton_login_instagram"
L = Instaloader()
# Optionally, login or load session
# L.login(USER, PASSWORD)        # (login)
L.interactive_login(USER)      # (ask password on terminal)
# L.load_session_from_file(USER) # (load session created w/
#                               #  `instaloader -l USERNAME`)

profile = Profile.from_username(L.context, USER)
followers = profile.get_followers()
print(followers)
print(f"{len(followers)} followers")

Bonne chance

0
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003 > quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025
Modifié le 28 nov. 2024 à 16:35

Bonjour @mamiemando StatutModérateur

@quentin2121 StatutMembre, c'est une erreur de syntaxe fstring, pardonnable à mamiemando car écrit sans IDE mais un peu moins pour toi : développer n'est rien sans debugging :-)

L'erreur dit "f-string: expecting '}" donc qu'il manque une accolade (ça te dit même où, quasi) :

print(f"{len(followers)} followers")

... et je pense qu'il vaut mieux que tu essaies avec ton login --'

1
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 7 828 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
29 nov. 2024 à 17:05
  • #17, #18: oui pardon pour la typo, et merci pour la correction.
  • #17, #21: quentin2121 je te recommande de te familiariser avec le langage python et avec PyCharm, car ce genre de question ne devrait normalement pas te bloquer. Je pense aussi qu'il faut que prennes le réflexe de comprendre les messages d'erreurs afin de gagner en autonomie.

Bonne chance

1
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 7 828 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
2 déc. 2024 à 12:39

Bonjour,

Le prioblème c'est que pour répondre à ce sujet il faut un compte instagram (or je n'en ai pas et ne souhaite pas en créer, même à des fin de tests).

Par rapport à #25, je pense dans ce que tu écris que c'est plus :

nbFollowers = len(profile.followers)

@quentin2121 StatutMembre:

  • si tu es sous windows, exécute ton programme depuis un terminal (lignes de commandes MS-DOS, hyperterminal ...) ; ou ajoute en fin de programme 
    input("Appuyer sur entrée")
  • lis la documentation et pour des questions plus spécifiques à ce module ;
  • si tu penses qu'il y a un bug, pose ta question dans l'un des canaux listés ici.

Bonne chance

1
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 7 828 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
9 déc. 2024 à 12:28

Effectivement, c'est étonnant, mais instaloader ne semble pas supporter les authentifications par token. Il faudrait ajouter le code adéquat dans InstaloaderContext (en s'inspirant se basant sur la documentation) et ajouter une méthode (disons token_login) dans la classe Instaloader (en s'inspirant de interactive_login). Ça nécessite de maîtriser un minimum le paquet requests mais rien d'insurmontable si on prend le temps d'apprendre python et surtout... de lire la documentation.

1
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003 > mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025
Modifié le 10 déc. 2024 à 19:30
  • "Je devrais donc installer l'appli insta, au lieu de me connecter par le site avec login et mdp, ainsi, j'éviterai la double authentification ? Avec une API ce n'est pas le même mot de passe que sur leur site ?"

Installer l'appli ou non ne changera rien : au lancement du programme Python il effectuera une requête HTTP sans vérifier si l'application est installée ou non.

  • "Avec une API ce n'est pas le même mot de passe que sur leur site"

Généralement les applications Web proposent un token d'authentification d'application à générer depuis le compte puis à utiliser avec les programmes tapant sur le serveur sans passer par les interfaces de connexion utilisateur (page web, appli) : ce n'est pas obligatoire.

Dans ton cas, au lieu de rester bloqué, essaie d'activer depuis Instagram le 2FA sur ton compte.

Associe ça avec Authenticator 6 ou Google Authenticator.

Quand le script Python lancera une requête avec ton login, tu recevras sur cette appli le code 2FA et pourras aller plus loin.

1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003
Modifié le 12 déc. 2024 à 20:06

Ah ah, Instagram se défend ^^

Jusque là c'est bon signe que ça réponde. La troisième fois est normale, il y a une limite aux appels de ton programme.

Tu peux utiliser une session unique pour faire tes appels, pour cela go documentation précisément le stockage de la session dans un fichier (y a 2 liens).

Rapidement je vois ça, je te laisse corriger si besoin, je suis sur autre chose ^^

L'exception c'est parce que ça peut la lever, par ex une question de droits d'accès en lecture/écriture au fichier de session généré

import instaloader

login = 'plume_quentique_du_mascaret'
mdp = 'mdp'

session_file = f"{login}.session"

# Créer une instance d'Instaloader
L = instaloader.Instaloader()

try:
    L.load_session_from_file(session_file)
except FileNotFoundError:
    L.context.username = login
    L.context.password = mdp
    L.context.do_login(L.context.username, L.context.password)
    L.save_session_to_file(session_file)

# Charger le profil
profile = instaloader.Profile.from_username(L.context, login)

# Afficher le nombre de followers
print(f"Le compte {login} a {profile.followers} followers.")

Tiens au jus, comme d'hab


0
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 1 243
14 déc. 2024 à 16:03

C:\Users\quent\AppData\Local\Programs\Python\Python311\python.exe C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py
Traceback (most recent call last):
  File "C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py", line 12, in <module>
    L.load_session_from_file(session_file)
  File "C:\Users\quent\AppData\Local\Programs\Python\Python311\Lib\site-packages\instaloader\instaloader.py", line 635, in load_session_from_file
    with open(filename, 'rb') as sessionfile:
         ^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\users\\quent\\appdata\\local\\temp/.instaloader-quent/session-plume_quentique_du_mascaret.session'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py", line 16, in <module>
    L.context.do_login(L.context.username, L.context.password)
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'InstaloaderContext' object has no attribute 'do_login'

0
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003 > quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025
15 déc. 2024 à 17:46

Il y a eu 2 levées.

La 2ème c'est un loupé de ma part en réécrivant le code, c'est login() et non do_login() , cf doc

La première c'est la FileNotFoundError attendue, là encore logique de la lever à la première exécution vu qu'il n'a pas encore stocké la session dans le fichier.

Comme j'ai dit, c'était une proposition rapide. Fallait aller plus loin qu'exécuter et attendre qu'on corrige --' Qu'avais-tu analysé de ton côté ?

Voici une propale. Sois proactif dans ton code, c'est ton projet. Tu viens littéralement de pondre une stack trace sans la lire.

import instaloader

login = 'plume_quentique_du_mascaret'
mdp = 'mdp'

session_file = f"{login}.session"

# Créer une instance d'Instaloader
L = instaloader.Instaloader()

try:
    L.load_session_from_file(session_file)
except FileNotFoundError:
    L.context.login(login, mdp)
    L.save_session_to_file(session_file)

# Charger le profil
profile = instaloader.Profile.from_username(L.context, login)

# Afficher le nombre de followers
print(f"Le compte {login} a {profile.followers} followers.")
0
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 1 243 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
16 déc. 2024 à 14:16

C:\Users\quent\AppData\Local\Programs\Python\Python311\python.exe C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py
Traceback (most recent call last):
  File "C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py", line 12, in <module>
    L.load_session_from_file(session_file)
  File "C:\Users\quent\AppData\Local\Programs\Python\Python311\Lib\site-packages\instaloader\instaloader.py", line 635, in load_session_from_file
    with open(filename, 'rb') as sessionfile:
         ^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'c:\\users\\quent\\appdata\\local\\temp/.instaloader-quent/session-plume_quentique_du_mascaret.session'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\quent\PycharmProjects\pythonProject\TAGRAM.py", line 14, in <module>
    L.context.login(login, mdp)
  File "C:\Users\quent\AppData\Local\Programs\Python\Python311\Lib\site-packages\instaloader\instaloadercontext.py", line 304, in login
    raise TwoFactorAuthRequiredException("Login error: two-factor authentication required.")
instaloader.exceptions.TwoFactorAuthRequiredException: Login error: two-factor authentication required.

0
luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025 1 003 > quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025
16 déc. 2024 à 14:17

Tu viens littéralement de pondre une stack trace sans la lire

0
quentin2121 Messages postés 9015 Date d'inscription lundi 24 mai 2010 Statut Membre Dernière intervention 14 février 2025 1 243 > luckydu43 Messages postés 4077 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 13 février 2025
16 déc. 2024 à 14:41

Je ne comprends pas les erreurs lignes 12 et 14, j'ai bien activé la double authentification sur le site Instagram.

0