28 votes

Obtenir par programme un jeton d'accès pour utiliser l'API Facebook Graph

J'essaie de mettre en place un script bash ou python pour jouer avec l'API graphique facebook. L'utilisation de l'API semble simple, mais j'ai du mal à configurer curl dans mon script bash pour appeler authorize et access_token. Quelqu'un at-il un exemple de travail?

23voto

maryisdead Points 444

Mieux vaut tard que jamais, peut-être d'autres à la recherche pour que trouverez. Je l'ai eu à travailler avec la version 2.6 de Python sur un MacBook.

Cela vous oblige à avoir

  • le Python facebook module installé: https://github.com/pythonforfacebook/facebook-sdk,
  • une réelle Facebook app configurer
  • et le profil que vous voulez publier devez accordé des autorisations appropriées pour permettre à toutes les différentes choses comme la lecture et l'écriture.

Vous pouvez lire à propos de l'authentification des trucs dans le Facebook de la documentation du développeur. Voir https://developers.facebook.com/docs/authentication/ pour plus de détails.

Ce blog peut aussi aider avec ceci: http://blog.theunical.com/facebook-integration/5-steps-to-publish-on-a-facebook-wall-using-php/

Va ici:

#!/usr/bin/python
# coding: utf-8

import facebook
import urllib
import urlparse
import subprocess
import warnings

# Hide deprecation warnings. The facebook module isn't that up-to-date (facebook.GraphAPIError).
warnings.filterwarnings('ignore', category=DeprecationWarning)


# Parameters of your app and the id of the profile you want to mess with.
FACEBOOK_APP_ID     = 'XXXXXXXXXXXXXXX'
FACEBOOK_APP_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
FACEBOOK_PROFILE_ID = 'XXXXXX'


# Trying to get an access token. Very awkward.
oauth_args = dict(client_id     = FACEBOOK_APP_ID,
                  client_secret = FACEBOOK_APP_SECRET,
                  grant_type    = 'client_credentials')
oauth_curl_cmd = ['curl',
                  'https://graph.facebook.com/oauth/access_token?' + urllib.urlencode(oauth_args)]
oauth_response = subprocess.Popen(oauth_curl_cmd,
                                  stdout = subprocess.PIPE,
                                  stderr = subprocess.PIPE).communicate()[0]

try:
    oauth_access_token = urlparse.parse_qs(str(oauth_response))['access_token'][0]
except KeyError:
    print('Unable to grab an access token!')
    exit()

facebook_graph = facebook.GraphAPI(oauth_access_token)


# Try to post something on the wall.
try:
    fb_response = facebook_graph.put_wall_post('Hello from Python', \
                                               profile_id = FACEBOOK_PROFILE_ID)
    print fb_response
except facebook.GraphAPIError as e:
    print 'Something went wrong:', e.type, e.message

La vérification des erreurs sur le jeton peut être mieux, mais vous obtenez l'idée de quoi faire.

13voto

s29 Points 452

Facile! Utilisez simplement facebook-sdk .

get_app_access_token (app_id, app_secret) - exactement ce que vous recherchez ;-)

8voto

Ian Stevens Points 574

Vous devez d'abord configurer une application . Les éléments suivants cracheront ensuite un jeton d'accès en fonction de votre ID d'application et de votre secret:

 > curl -F type=client_cred -F client_id=[...] -F client_secret=[...] https://graph.facebook.com/oauth/access_token
 

6voto

daaku Points 2279

Puisqu'un navigateur Web doit être impliqué pour l'autorisation réelle, il n'existe pas de "script autonome" qui fait tout. Si vous jouez simplement avec l'API, ou si vous écrivez un script pour automatiser quelque chose vous-même, et que vous voulez un access_token pour vous qui n'expire pas, vous pouvez en saisir un ici: http://fbrell.com / auth / token d'accès hors ligne

5voto

Hidden Points 41

Il y a un moyen de le faire, je l'ai trouvé, mais c'est beaucoup de travail et nécessite d'usurper l'identité d'un navigateur 100% (et vous aurez probablement être la rupture de leurs conditions de service)

Désolé je ne peux pas fournir tous les détails, mais l'essentiel, c':

  1. en supposant que vous avez un nom d'utilisateur/mot de passe pour un facebook compte, allez curl pour oauth/authentifier... page. Extrait des cookies retourné dans le "Set-Cookie" en-tête, puis suivre les "Emplacement" en-têtes (compilation des cookies sur le chemin).
  2. gratter le formulaire de connexion, la préservation de tous les champs, et de le soumettre (réglage de l'referer et en-têtes content-type, et l'insertion de votre e-mail/pass) même collection cookie à partir de (1) requis
  3. même que (2) mais maintenant, vous allez avoir besoin de POSTER le formulaire d'approbation acquis après (2) a été présenté, définissez l'en-tête Referer avec thr URL à laquelle le formulaire a été acquis.
  4. suivre les redirections jusqu'à ce qu'il vous envoie vers votre site, et obtenir le "code" paramètre de l'URL
  5. Change le code d'une access_token à l'extrémité oauth

Les principaux problèmes sont la gestion des cookies et de redirections. Fondamentalement, vous DEVEZ imiter un navigateur 100%. Je pense que c'est hackery mais il y a un moyen, c'est vraiment dur!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X