Неинтерактивная авторизация / логин API Facebook - PullRequest
0 голосов
/ 20 апреля 2010

Я пытаюсь построить клиент API Facebook, используя Python, код выглядит следующим образом:

import os
import urllib2
import urllib
import cookielib
import hashlib
import json

USER = ''
PASS = ''
LOGIN = 'http://www.facebook.com/login.php?login_attempt=1'
HOST = 'http://api.facebook.com/restserver.php'
API_KEY = 'eca5c767f0e5b65942419574374c34a4'
SECRET_KEY = 'e2aab4000e08f4199f3ca6793ab4f02c'

def getSig(params, secret):
  sigStr = ''
  for k in sorted(params.keys()):
    sigStr += k + '=' + params[k]
  sigStr += secret
  return hashlib.md5(sigStr).hexdigest()

def call(host, params):
  basicParams = {'api_key': API_KEY,
                 'format': 'JSON',
                 'v': '1.0'}
  basicParams.update(params)
  basicParams['sig'] = getSig(basicParams, SECRET_KEY)
  finalParams = urllib.urlencode(basicParams)

  cj = cookielib.LWPCookieJar()

  opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), urllib2.HTTPRedirectHandler)
  urllib2.install_opener(opener)

  request = urllib2.Request(host)

  request.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100402 Ubuntu/9.10 (karmic) Firefox/3.5.9')
  request.add_header('Content-Type', 'application/x-www-form-urlencoded')

  h = urllib2.urlopen(request, finalParams)

  return h.read()


def getToken():
  paramsRaw = {'method': 'Auth.createToken',
               'api_key': API_KEY,
  }
  ret = call(HOST, paramsRaw)

  return json.loads(ret)

def login(user, password, token):
  # post login form
  paramsRaw = {
               'auth_token': token,
               'email': user,
               'pass': password,
  }
  call(LOGIN, paramsRaw)

def getSession(token):
  paramsRaw = {'method': 'Auth.getSession',
               'auth_token': token
              }
  print call(HOST, paramsRaw)

def main():
  token = getToken()
  login(USER, PASS, token)
  getSession(token)

main()

Я в основном получаю токен от Auth.createToken, размещаю его с помощью USER / PASS на facebook.com/login.php и отправляю тот же токен в Auth.getSession (как указано здесь: http://wiki.developers.facebook.com/index.php/Auth.createToken) Но getSession возвращает ошибку 100 («Неверный параметр»), что я делаю не так? Есть ли примеры подобных программ в сети?

1 Ответ

1 голос
/ 20 апреля 2010

Вам также нужен параметр call_id, который может быть основан на time.time (), а также параметр метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...