J'essaie de créer un script bash ou python pour jouer avec l'API facebook graph. 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?
Mise à jour 2018-08-23
Étant donné que cela obtient toujours des vues et des votes positifs, je veux juste mentionner qu'il semble maintenant exister un SDK tiers maintenu: https://github.com/mobolic/facebook-sdk
Mieux vaut tard que jamais, peut-être que d'autres qui le recherchent le trouveront. Je l'ai fait fonctionner avec Python 2.6 sur un MacBook.
Cela vous oblige à avoir
Vous pouvez lire des informations sur l'authentification dans la documentation des développeurs Facebook. Voir https://developers.facebook.com/docs/authentication/ pour plus de détails.
Cet article de blog peut également aider à cela: http://blog.theunical.com/facebook-integration/5-steps-to-publish-on-a-facebook-wall-using-php/
Voici:
#!/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 lors de l'obtention du jeton pourrait être meilleure, mais vous avez une idée de ce qu'il faut faire.
Voilà, aussi simple que possible. Ne nécessite aucun SDK tiers, etc.
Assurez-vous que le module Python 'demandes' est installé
import requests
def get_fb_token(app_id, app_secret):
url = 'https://graph.facebook.com/oauth/access_token'
payload = {
'grant_type': 'client_credentials',
'client_id': app_id,
'client_secret': app_secret
}
response = requests.post(url, params=payload)
return response.json()['access_token']
Facile! Utilisez simplement facebook-sdk .
import facebook
app_id = 'YOUR_APP_ID'
app_secret = 'YOUR_APP_SECRET'
graph = facebook.GraphAPI()
# exactly what you're after ;-)
access_token = graph.get_app_access_token(app_id, app_secret)
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
Il y a IS un moyen de le faire, je l'ai trouvé, mais c'est beaucoup de travail et vous obligera à usurper un navigateur à 100% (et vous briserez probablement leurs conditions de un service)
Désolé, je ne peux pas fournir tous les détails, mais l'essentiel:
Les principaux problèmes sont la gestion des cookies et les redirections. Fondamentalement, vous DEVEZ imiter un navigateur à 100%. Je pense que c'est du piratage mais il y a un moyen, c'est vraiment très dur!
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 récupérer un ici: http://fbrell.com/auth/offline-access-token
s29 a la bonne réponse mais laisse quelques étapes à résoudre. Le script suivant illustre un script de travail pour l'acquisition d'un jeton d'accès à l'aide du SDK Facebook:
__requires__ = ['facebook-sdk']
import os
import facebook
def get_app_access_token():
client = facebook.GraphAPI()
return client.get_app_access_token(
os.environ['FACEBOOK_APP_ID'],
os.environ['FACEBOOK_APP_SECRET'],
)
__== '__main__' and print(get_app_access_token())
Ce script s'attend à ce que les variables d'environnement FACEBOOK_APP_ID et FACEBOOK_APP_SECRET soient définies sur les valeurs de votre application. N'hésitez pas à adapter cette technique pour charger ces valeurs à partir d'une source différente.
Vous devez d'abord installer le SDK Facebook (pip install facebook-sdk; python get-token.py
) ou utilisez un autre outil comme rwt pour appeler le script (rwt -- get-token.py
).
Voici le Code Python . Essayez d'exécuter certains de ces exemples en ligne de commande, ils fonctionnent très bien pour moi. Voir aussi - http://www.pythonforfacebook.com/