Ich habe untersucht, wie die Graph-API beim Erstellen einer App verwendet wird, die Facebook-Freundinformationen in Python verwendet, daher werde ich sie zusammenfassen. Es ist für Anwendungen vorgesehen, die Flask verwenden.
Wenn Sie zu "https: //graph.facebook.com/oauth/authorize? Client_id = **** & redirect_uri = **** & scope = ****" umleiten und die App nicht zulässig ist, erlauben Sie die App Seite wird angezeigt. In Flask können Sie diese URL angeben und "return redirect (https: // ****)" ausführen.
Parameter | die Einstellungen |
---|---|
client_id | Anwendungs-ID in Facebook-Entwicklern festgelegt |
redirect_uri | URL, die nach der Authentifizierung umgeleitet werden soll(URI-Codierung erforderlich) |
scope | Erlaubnis zum Anfordern |
Wenn dies zulässig ist, wird zu dem in redirect_uri
festgelegten Umleitungsziel übergegangen. Der zu diesem Zeitpunkt als Parameter zurückgegebene "Code" (Authentifizierungscode) wird für die nächste Erfassung des Zugriffstokens verwendet. Wenn ein Fehler auftritt, wird die JSON-Zeichenfolge mit dem Satz "error" wie unten gezeigt zurückgegeben.
error_sample
{
"error": {
"message": "redirect_uri isn't an absolute URI. Check RFC 3986.",
"type": "OAuthException",
"code": 191,
"fbtrace_id": "XXXXXXXXXXX"
}
}
Verwenden Sie den oben erhaltenen Bestätigungscode, um zu "https: //graph.facebook.com/oauth/access_token? Client_id = **** & client_secret = **** & redirect_uri = **** & code = ****" zu gelangen Greifen Sie zu und erhalten Sie ein Zugriffstoken.
Parameter | die Einstellungen |
---|---|
client_id | Anwendungs-ID in Facebook-Entwicklern festgelegt |
client_secret | App-Geheimschlüssel in Facebook-Entwicklern festgelegt |
redirect_uri | URL, die nach der Authentifizierung umgeleitet werden soll |
code | Authentifizierungscode oben erhalten(URI-Codierung erforderlich) |
Die erfassten Daten haben die Form "access_token = **** & expires = ****", sodass der Wert unmittelbar nach "access_token =" abgerufen wird. In Python ist es eine gute Idee, etwas wie "urllib2.urlopen" zu verwenden, um das Ergebnis zu erhalten. Die Extraktionsmethode ist angemessen.
main.py
from werkzeug.urls import url_quote_plus
import urllib2
...
app_id = "xxxxxxxx"
app_secret = "xxxxxxxx"
url_redirect = url_quote_plus( "https://hogehoge.com" )
code = "xxxxxxxx"
url_token = ( "https://graph.facebook.com/oauth/access_token"
"?client_id={0}&client_secret={1}"
"&redirect_uri={2}&code={3}" )
try:
resp = urllib2.urlopen( url_token.format( app_id, app_secret, url_redirect, code ) )
data = resp.read().split('&')
access_token = data[0].strip('access_token=')
finally:
resp.close()
...
Sie haben jetzt ein Zugriffstoken erhalten.
Flaschenfilter, um automatisch ein Zugriffstoken zu erhalten, wenn Sie eine bestimmte Seite besuchen. (Im folgenden Beispiel wird die Verarbeitung bei Rückgabe eines Fehlers weggelassen.) Ist ein solcher Filter in Python übrigens ein Dekorateur? Ist das so? Ich bin mir in diesem Bereich immer noch nicht sicher.
main.py
from werkzeug.urls import url_quote_plus
from functools import wraps
from flask import Flask, request, redirect, session
import urllib2
...
domain = "https://hogehoge.com"
app_id = "xxxxxxxx"
app_secret = "xxxxxxxx"
#Generieren Sie eine URL, um einen Autorisierungscode zu erhalten--------------------------------------------------
def create_url_for_auth_code( path_orig ):
url_orig = url_quote_plus( domain + path_orig )
return ( "https://graph.facebook.com/oauth/authorize"
"?client_id={0}&redirect_uri={1}&scope={2}" )
#Holen Sie sich ein Zugriffstoken--------------------------------------------------
def get_access_token( path_orig, code ):
url_orig = url_quote_plus( domain + path_orig )
url_token = ( "https://graph.facebook.com/oauth/access_token"
"?client_id={0}&client_secret={1}"
"&redirect_uri={2}&code={3}" )
try:
resp = urllib2.urlopen(url_token.format(app_id, app_secret, url_orig, code))
data = resp.read().split('&')
access_token = data[0].strip('access_token=')
finally:
resp.close()
return access_token
#Filterkörper--------------------------------------------------
def oauth_filter(f):
@wraps(f)
def wrapper(*args, **kwargs):
#Wenn die Sitzung über ein Zugriffstoken verfügt, kehren Sie unverändert zurück
if session.has_key('access_token'):
return f(*args, **kwargs)
#Wenn die Sitzung kein Zugriffstoken hat, rufen Sie es durch automatische Authentifizierung ab
code = request.args.get('code')
#Fälle nach dem Status der Anforderungsparameter
if code is None:
#Rufen Sie den Code ab, wenn kein Autorisierungscode festgelegt wurde
return redirect( create_url_for_auth_code( request.path ) )
else:
#Holen Sie sich ein Zugriffstoken, wenn ein Autorisierungscode festgelegt ist
session['access_token'] = get_access_token( request.path, code )
return redirect( domain + request.path )
#Wenn die Bedingungen nicht erfüllt sind, beenden Sie das Programm unverändert
return f(*args, **kwargs)
return wrapper
...
Wenden Sie den obigen Filter an. Alles, was Sie tun müssen, ist, der Methode, die jedes Routing angibt, "@ oauth_filter" hinzuzufügen.
main.py
from flask import Flask, render_template, redirect, session
app = Flask(__name__)
...
#Gilt nicht für die Startseite
@app.route('/')
def index():
return render_template("top.html")
#Gilt für Meine Seite
@app.route('/mypage')
@oauth_filter #Anwenden! !!
def mypage():
return render_template("mypage.html")
#Entfernen Sie das Zugriffstoken aus der Sitzung, wenn Sie sich abmelden
@app.route('/logout')
def logout():
if session.has_key( 'access_token' ):
del session['access_token']
return redirect( '/' )
...
Mit dem oben genannten sollte es vorerst funktionieren. Diese Informationen wurden basierend auf dem PHP-Beispiel unter Verwendung der folgenden Graph-API und der Erläuterung des Python-Anmeldedekorators erstellt.
Recommended Posts