Я пытаюсь собрать bash или python script, чтобы играть с API-интерфейсом facebook. Использование API выглядит просто, но мне трудно настроить завиток в bash script, чтобы вызвать authorize и access_token. У кого-нибудь есть рабочий пример?
Программно получить токен доступа для использования API-интерфейса Facebook Graph
Ответ 1
Обновление 2018-08-23
Поскольку это все еще получает некоторые мнения и отзывы, я просто хочу упомянуть, что к настоящему времени, кажется, существует поддерживаемый сторонний SDK: https://github.com/mobolic/facebook-sdk
Лучше поздно, чем никогда, возможно, другие, которые ищут это, найдут это. Я получил его работать с Python 2.6 на MacBook.
Это требует от вас иметь
- установленный модуль Python для facebook: https://github.com/pythonforfacebook/facebook-sdk,
- фактическое приложение Facebook настроено
- а профиль, в который вы хотите публиковать сообщения, должен иметь соответствующие разрешения, чтобы разрешить все такие вещи, как чтение и запись.
Вы можете прочитать об аутентификации в документации разработчика Facebook. См. Https://developers.facebook.com/docs/authentication/ для получения подробной информации.
Это сообщение в блоге может также помочь с этим: http://blog.theunical.com/facebook-integration/5-steps-to-publish-on-a-facebook-wall-using-php/
Вот оно:
#!/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
Проверка ошибок при получении токена может быть лучше, но вы понимаете, что делать.
Ответ 2
Вот, пожалуйста, так просто, как только можно. Не требует каких-либо сторонних SDK и т.д.
Убедитесь, что установлен модуль Python "запросы"
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']
Ответ 3
Легко! Просто используйте 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)
Ответ 4
Сначала вам нужно настроить приложение. Далее вытолкнут токен доступа с учетом вашего идентификатора приложения и секретности:
> curl -F type=client_cred -F client_id=[...] -F client_secret=[...] https://graph.facebook.com/oauth/access_token
Ответ 5
Так как веб-браузер должен быть задействован для фактической авторизации, нет такой вещи, как "автономный script", который делает все это. Если вы просто играете с API или пишете script для автоматизации чего-либо самостоятельно и хотите, чтобы access_token
для вас не истекал, вы можете его захватить здесь: http://fbrell.com/auth/offline-access-token
Ответ 6
Есть способ сделать это, я нашел его, но он много работает и потребует от вас обмануть браузер на 100% (и вы, вероятно, нарушите условия обслуживания)
Извините, я не могу предоставить все детали, но суть его:
- Предполагая, что у вас есть имя пользователя/пароль для учетной записи facebook, перейдите к странице oauth/authenticate.... Извлеките все файлы cookie, возвращенные в заголовке "Set-Cookie", а затем следуйте за заголовками "Местоположение" (компиляция файлов cookie на этом пути).
- очистите форму входа, сохранив все поля и отправьте ее (установив заголовки реферера и заголовка содержимого и вставив свой адрес электронной почты/пропуск) с той же коллекцией файлов cookie из (1) required
- то же самое, что и (2), но теперь вам понадобится POST форма утверждения, полученная после отправки (2), установите заголовок Referer с URL-адресом thr, где была получена форма.
- следуйте переадресации, пока он не отправит вас обратно на ваш сайт, и не получите параметр "code" из этого URL.
- Обменный код для access_token в конечной точке oauth
Основными статьями являются управление и переадресация файлов cookie. В принципе, вы ДОЛЖНЫ имитировать браузер на 100%. Я думаю, что это хакерство, но есть способ, это просто тяжело!
Ответ 7
S29 имеет правильный ответ, но оставляет некоторые шаги для решения. Следующий скрипт демонстрирует работающий скрипт для получения токена доступа с помощью Facebook SDK:
__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'],
)
__name__ == '__main__' and print(get_app_access_token())
Этот сценарий ожидает, что переменные среды FACEBOOK_APP_ID и FACEBOOK_APP_SECRET будут установлены в значения для вашего приложения. Не стесняйтесь адаптировать эту технику для загрузки этих значений из другого источника.
Сначала вы должны установить Facebook SDK (pip install facebook-sdk; python get-token.py
) или использовать другой инструмент, например rwt, для запуска скрипта (rwt -- get-token.py
).
Ответ 8
Вот Python Code. Попробуйте запустить некоторые из эти примеры в командной строке, они отлично работают для меня. См. Также - http://www.pythonforfacebook.com/