web-dev-qa-db-fra.com

Comment obtenir des abonnés et la liste suivante sur Instagram via les requêtes http

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?

14
Ilya Kryukov

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é .

12
aandergr