Il existe une API pratique pour gérer Qiita appelée API Qiita. https://qiita.com/api/v2/docs
Ceci est un exemple à utiliser avec Django.
Seul Oauth est couvert dans cet article (sinon c'est juste une demande)
Enregistrez l'application à partir de l'URL suivante. https://qiita.com/settings/applications
Vous pouvez obtenir l'ID client et le secret client.
GET /api/v2/oauth/authorize
Affichez l'écran d'autorisation de l'utilisateur. Si l'utilisateur l'autorise, «code» sera ajouté à l'URL de rappel spécifiée dans l'enregistrement de l'application ci-dessus.
De plus, spécifiez «scope» et «state» avec des paramètres.
Concernant la portée, ici
state vous permet de spécifier la valeur incluse dans la requête de l'URL à rediriger pour les contre-mesures CSRF.
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')
Puisque «state» n'a pas de sens à moins qu'il ne s'agisse d'une valeur aléatoire, il est généré de manière aléatoire et enregistré dans la session.
POST /api/v2/access_tokens
Vous avez maintenant un jeton d'accès.
Utilisez le code
que vous avez obtenu de GET / api / v2 / oauth / authorize
plus tôt.
En même temps, utilisez «client_id» et «client_secret» obtenus en enregistrant l'application.
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:
#Traitement post-succès
except urllib.error.HTTPError as err:
#Traitement après échec de la demande
except urllib.error.URLError as err:
#Traitement après échec de la demande
else:
#traitement après l'échec de l'authentification de l'état
ʻIf state == int (request.GET.get ("state")): `vérifie si l'état est correct.
Recommended Posts