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

41
justinhj 17 Июн 2010 в 07:41

8 ответов

Лучший ответ

Обновление 2018-08-23

Поскольку это все еще получает некоторые мнения и отзывы, я просто хочу упомянуть, что к настоящему времени, кажется, существует поддерживаемый сторонний SDK: 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
    

    Проверка ошибок при получении токена может быть лучше, но вы понимаете, что делать.

    37
    maryisdead 23 Авг 2018 в 09:36

    Сначала вам нужно настроить приложение. Далее будет выдан токен доступа с указанием идентификатора вашего приложения и секрета:

    > curl -F type=client_cred -F client_id=[...] -F client_secret=[...] https://graph.facebook.com/oauth/access_token
    
    9
    Ian Stevens 15 Июл 2010 в 19:56

    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 будут установлены в значения для вашего приложения. Не стесняйтесь адаптировать эту технику для загрузки этих значений из другого источника.

    Сначала вы должны установить SDK Facebook (pip install facebook-sdk; python get-token.py) или используйте другой инструмент, например rwt, для вызова сценария (rwt -- get-token.py).

    1
    Jason R. Coombs 2 Авг 2018 в 15:14

    Вот, пожалуйста, так просто, как только можно. Не требует каких-либо сторонних 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']
    
    29
    Martijn Pieters 21 Июн 2018 в 11:44

    Легко! Просто используйте 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) 
    
    19
    Paul T. 8 Дек 2018 в 12:49

    Вот код Python. Попробуйте запустить некоторые из этих примеров в командной строке, они отлично работают для меня. Смотрите также - http://www.pythonforfacebook.com/

    0
    gsharma 19 Июл 2012 в 21:03

    Поскольку для фактической авторизации должен быть задействован веб-браузер, не существует такого понятия, как «автономный скрипт», который делает все это. Если вы просто играете с API или пишете скрипт для самостоятельной автоматизации чего-либо и хотите access_token для себя, который не имеет срока действия, вы можете получить его здесь: http://fbrell.com/auth/offline-access-token

    6
    daaku 19 Июл 2010 в 21:50

    Есть способ сделать это, я нашел его, но это много работы и потребует от вас 100% подделать браузер (и вы, вероятно, нарушите их условия обслуживания)

    Извините, я не могу предоставить все детали, но суть этого:

    1. предполагая, что у вас есть имя пользователя / пароль для учетной записи Facebook, перейдите на страницу oauth / authenticate .... Извлеките все файлы cookie, возвращенные в заголовке «Set-Cookie», а затем следуйте заголовкам «Location» (собирая файлы cookie по пути).
    2. очистите форму входа в систему, сохранив все поля, и отправьте ее (установив реферер и заголовки типа контента и вставив свой адрес электронной почты / пароль) ту же коллекцию файлов cookie из (1), которая требуется
    3. так же, как (2), но теперь вам нужно POST форма подтверждения, полученная после отправки (2), установите заголовок Referer с URL-адресом, по которому была получена форма.
    4. следите за переадресацией, пока она не отправит вас обратно на ваш сайт, и не получите параметр «code» из этого URL
    5. Обменяйте код для access_token в конечной точке oauth

    Основные ошибки - управление файлами cookie и перенаправления. По сути, вы ДОЛЖНЫ имитировать браузер на 100%. Я думаю, что это хакерство, но есть способ, это действительно очень сложно!

    6
    sth 2 Авг 2010 в 01:40