Je cherche une possibilité d'obtenir un followers et une liste de suivis au format JSON via une requête web (de la même manière que sur le site Instagram). Par exemple, je peux me connecter via des requêtes et obtenir des informations sur l'utilisateur:
def get_user_info(self, user_name):
url = "https://www.instagram.com/" + user_name + "/?__a=1"
try:
r = requests.get(url)
except requests.exceptions.ConnectionError:
print 'Seems like dns lookup failed..'
time.sleep(60)
return None
if r.status_code != 200:
print 'User: ' + user_name + ' status code: ' + str(r.status_code)
print r
return None
info = json.loads(r.text)
return info['user']
J'ai essayé de voir quelle demande chrome envoyer au serveur, mais a échoué. La question est: comment préparer une demande d'obtention ou de publication similaire pour récupérer la liste des abonnés sans l'API Instagram?
Les requêtes GraphQL avec query_hash
= "58712303d941c6855d4e888c5f0cd22f" (suivantes) et "37479f2b8209594dde7facb0d904896a" (suiveurs) renvoient ces informations. Une fois connecté, faites une requête GET sur instagram.com/graphql/query avec les paramètres query_hash
Et variables
, où variables
est un ensemble de variables au format JSON id
(id utilisateur, comme dans le dictionnaire de retour de votre fonction get_user_info()
), first
(une longueur de page, il semble que le maximum actuel soit 50) et dans les requêtes suivantes after
défini sur end_cursor
dans le dictionnaire de réponses précédent.
Alternativement, la bibliothèque Instaloader fournit un moyen pratique de se connecter, puis d'accéder par programme à la liste des abonnés et des abonnements d'un profil.
import instaloader
# Get instance
L = instaloader.Instaloader()
# 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`)
# Obtain profile metadata
profile = instaloader.Profile.from_username(L.context, PROFILE)
# Print list of followees
for followee in profile.get_followees():
print(followee.username)
# (likewise with profile.get_followers())
Outre username
, les attributs full_name
, userid
, followed_by_viewer
Et bien d'autres sont définis dans l'instance Profile
qui est retournée pour chaque abonné .