Подтвердить что ты не робот

Программно получить токен доступа для использования API-интерфейса Facebook Graph

Я пытаюсь собрать bash или python script, чтобы играть с API-интерфейсом facebook. Использование API выглядит просто, но мне трудно настроить завиток в bash script, чтобы вызвать authorize и access_token. У кого-нибудь есть рабочий пример?

4b9b3361

Ответ 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).