7
votes

Facebook: Comment récupérer un jeton d'accès par programme?

Je dois poster un message sur ma page propre em> page Facebook; Et je dois le faire programmatiquement em> (dans mon cas à l'aide de Python). J'ai réussi à faire cette partie à l'aide de ce code (en python): xxx pré>

L'ID du poste généré sur la page FB est renvoyé correctement: p>

In [11]: response.readlines()
Out[11]: ['{"id":"135386143198208_461964357207050"}']


8 commentaires

Vous ne pouvez pas contourner l'authentification manuelle de l'utilisateur pour un jeton d'accès Facebook. C'est là dans un but.


@Phwd et il faut authentifier manuellement au moins une fois tous les deux mois pour un manuel Accès Jeton ... Suis-je correct?


Si vous implémentez le scénario de jeton d'accès à l'utilisateur étendue, oui.


@Phwd comporte-t-il de savoir s'il est de courte durée du jeton d'accès vécu de longue durée?


Si c'est de courte durée, il est de deux heures et vous pouvez l'étendre, s'il est depuis longtemps vécu, vous devez transmettre l'utilisateur à travers le processus pour obtenir un jeton de courte durée de courte durée, puis ré-étendre à nouveau.


@Phwd question mise à jour avec plus de détails (en gras). Je n'utiliserai pas de navigateur; C'est un script de serveur!


Étendre le jeton puis nourrir cela au cron. Voilà comment fonctionne Facebook Login, il n'y a aucun moyen de le faire


@Phwd afin qu'il puisse être automatisé par "extension du jeton, puis nourrir cela à cron". Pouvez-vous fournir plus de détails (ou de lien) à ce sujet et postez-le comme réponse? Si je parviens à le faire, ce sera la bonne réponse. Merci.


4 Réponses :


4
votes

vous ne peut pas récupérer un jeton de courte durée de vie par programme. Il défait le but de l'interaction de l'utilisateur.

Facebook a fait l'objet de cette façon de s'assurer que l'utilisateur dispose d'un contrôle manuel complet sur les applications qu'ils installent.

Une fois que l'utilisateur accède à l'accès initial, vous pouvez ensuite automatiser le processus jusqu'à deux mois (ou plus tôt. Si l'utilisateur invalide le jeton, par exemple en changeant leur mot de passe)

en effectuant une demande HTTP à xxx

après que ces deux mois sont terminés, le L'utilisateur doit être celui pour accéder à l'accès à l'application donnant un nouveau jeton de courte durée que vous pouvez alors ré-étendre à l'aide du code ci-dessus.


0 commentaires

4
votes

Si vous étendez votre jeton d'accès (utilisateur), vous pouvez ensuite demander à un jeton d'accès (page) qui n'exprime pas du tout.

Voir la section "Tokens d'accueil d'extension de la page" du document suivant: https : //developers.facebook.com/docs/howtos/login/extending-Tokens/


3 commentaires

En effet tu as raison! Merci! Cela n'a même pas besoin d'être fait de manière programmatique car je peux simplement le faire une fois et que cela n'expirera jamais. Correct?


Et quel app_id et app_secret doit être transmis à cette URL?


Vous obtenez l'identifiant d'application et le secret lorsque vous enregistrez une application Facebook. (Il est montré en haut de la page après avoir créé un)



0
votes

Pour obtenir un jeton Facebook pour des utilisateurs même normaux par programme, vous pourriez être intéressé par cela: https://github.com/fbessez/tinder/blob/master/fb_auth_token.py , c'est un script Python pour récupérer automatiquement le jeton lors de l'envoi de courrier électronique fourni.

Assurez-vous que vous avez lxml , requêtes et robobrowser installé, car ce sont des conditions préalables. Les deux demandes et robobrowser peuvent être facilement acquis avec exécuter

pip Installation robobrowser et

PIP INSTALLES Demandes

Le LXML est un "petit" plus difficile, car il devra être compilé (avoir une version récente). Suivez ceci pour cela: Comment installer LXML sur Ubuntu


0 commentaires

2
votes

bénisse l'âme qui a écrit ce code. Pas moi, mais trouvé quelque part. Fonctionne bien. Appelez cette fonction avec votre email et votre mot de passe.

MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; U; en-gb; KFTHWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.16 Safari/535.19"
FB_AUTH = "https://www.facebook.com/v2.6/dialog/oauth?redirect_uri=fb464891386855067%3A%2F%2Fauthorize%2F&display=touch&state=%7B%22challenge%22%3A%22IUUkEUqIGud332lfu%252BMJhxL4Wlc%253D%22%2C%220_auth_logger_id%22%3A%2230F06532-A1B9-4B10-BB28-B29956C71AB1%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22%7D&scope=user_birthday%2Cuser_photos%2Cuser_education_history%2Cemail%2Cuser_relationship_details%2Cuser_friends%2Cuser_work_history%2Cuser_likes&response_type=token%2Csigned_request&default_audience=friends&return_scopes=true&auth_type=rerequest&client_id=464891386855067&ret=login&sdk=ios&logger_id=30F06532-A1B9-4B10-BB28-B29956C71AB1&ext=1470840777&hash=AeZqkIcf-NEW6vBd"

def get_access_token(email, password):
    s = robobrowser.RoboBrowser(user_agent=MOBILE_USER_AGENT, parser="lxml")
    s.open(FB_AUTH)
    ##submit login form##
    f = s.get_form()
    f["pass"] = password
    f["email"] = email
    s.submit_form(f)
    ##click the 'ok' button on the dialog informing you that you have already authenticated with the Tinder app##
    f = s.get_form()
    s.submit_form(f, submit=f.submit_fields['__CONFIRM__'])
    ##get access token from the html response##
    access_token = re.search(r"access_token=([\w\d]+)", s.response.content.decode()).groups()[0]
    #print  s.response.content.decode()
    return access_token


0 commentaires