Es gibt eine praktische API für die Handhabung von Qiita, die Qiita-API. https://qiita.com/api/v2/docs
Dies ist ein Beispiel für Django.
In diesem Artikel wird nur Oauth behandelt (ansonsten handelt es sich nur um eine Anfrage).
Registrieren Sie die Anwendung unter der folgenden URL. https://qiita.com/settings/applications
Sie können "Client ID" und "Client Secret" erhalten.
GET /api/v2/oauth/authorize
Zeigen Sie den Autorisierungsbildschirm für den Benutzer an. Wenn der Benutzer zustimmt, wird "Code" zu der Rückruf-URL hinzugefügt, die in der obigen Anwendungsregistrierung angegeben ist.
Geben Sie außerdem "scope" und "state" mit Parametern an.
Klicken Sie hier, um den Umfang anzuzeigen (https://qiita.com/api/v2/docs#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97).
Mit state können Sie den Wert angeben, der in der Abfrage der URL enthalten ist, um für CSRF-Gegenmaßnahmen umzuleiten.
python
state = random.randint(1,100000)
request.session['qiita_state'] = state
return redirect(QIITA_OAUTH_URL + '?client_id=' + QIITA_CLIENT_ID + '&state=' + str(state) + '&scope=read_qiita+write_qiita')
Da "state" bedeutungslos ist, es sei denn, es handelt sich um einen zufälligen Wert, wird er zufällig generiert und in der Sitzung gespeichert.
POST /api/v2/access_tokens
Jetzt haben Sie ein Zugriffstoken.
Verwenden Sie den Code
, den Sie zuvor von GET / api / v2 / oauth / authorize
erhalten haben.
Verwenden Sie gleichzeitig die client_id
und client_secret
, die Sie durch Registrieren der Anwendung erhalten haben.
python
@csrf_exempt
def qiita_oauth(request):
if request.method == 'GET':
state = request.session['qiita_state']
if state == int(request.GET.get("state")):
if "code" in request.GET:
code = request.GET.get("code")
body = {
'client_id': QIITA_CLIENT_ID,
'client_secret': QIITA_CLIENT_SECRET,
'code': code
}
header = {
'Content-Type': 'application/json',
}
req = urllib.request.Request(QIITA_ACCESSTOKEN_URL, json.dumps(body).encode(), header)
try:
with urllib.request.urlopen(req) as res:
#Post-Success-Verarbeitung
except urllib.error.HTTPError as err:
#Verarbeitung nach Anforderungsfehler
except urllib.error.URLError as err:
#Verarbeitung nach Anforderungsfehler
else:
#Verarbeitung nach Statusauthentifizierungsfehler
if state == int (request.GET.get (" state ")):
prüft, ob der Zustand korrekt ist.
Recommended Posts