リンク:
アリスブログ > 「ALISのAPI」を使用する方法まとめ > 当記事
◆ 【Python】ALISの「個人認証が必要なAPI」を利用してみよう!
「『ALISのAPI』の個人認証(AWSSRP)の準備について」の続き。
ここでは、前回のサンプルソースとは別のものを作って、それを実行してみます。
○ 関連記事
(個人認証系のAPIを動作させる時は、上記の記事に書かれている「準備」を先に行っておく必要があります)
◆ ログインユーザーの情報を取得するプログラム
import urllib.request
import json
import pprint
from warrant.aws_srp import AWSSRP # warrantのインストールが必要
from getpass import getpass
# ユーザーIDと、パスワードの設定
user_name1 = 'yuuki'
password1 = getpass('Your ALIS Password:')
# 固定の値
POOL_ID = 'ap-northeast-1_HNT0fUj4J'
POOL_REGION = 'ap-northeast-1'
CLIENT_ID = '2gri5iuukve302i4ghclh6p5rg'
# アクセストークンの獲得
aws = AWSSRP(username = user_name1, password = password1, pool_id = POOL_ID, client_id = CLIENT_ID, pool_region = POOL_REGION)
tokens = aws.authenticate_user()
id_token = tokens['AuthenticationResult']['IdToken']
url_name1 = 'https://alis.to/api/me/info'
method1 = 'GET'
headers1 = {'Authorization': id_token}
request1 = urllib.request.Request(url_name1, None, headers = headers1 , method = method1)
with urllib.request.urlopen(request1) as cm_data1:
response_data1 = json.loads(cm_data1.read().decode("utf-8"))
pprint.pprint(response_data1)
input('Enterキーで終了')
ログインユーザーの情報の取得は、個人認証を用いるAPIの中では、かなり簡単に作れるコードだったので、起用することにしました。
○ 説明!
from warrant.aws_srp import AWSSRP
「from」は、モジュール内に含まれている関数などを、直接使用できるようにするプログラムです。
(ここでは、「warrant.aws_srp」内にある「AWSSRP」という関数をそのまま利用可能にしています)
一例: 「json.loads」を使用したい場合
import json
→ 宣言文は、json.loads()
form json import loads
→ 宣言文は、loads()
(json.loads()と同じです)
ただし、名前の衝突(同じ名前の関数を使用してしまう行為)には気をつけておきたいです。
from getpass import getpass
getpassは、文字を隠した状態で入力するプログラムです。
これを用いれば、パスワードの入力の時に、パスワード文を露呈させなくて済みます。
※ Windows10での実行の際は、「パスワードをコピー」 → 「コマンドプロンプト内で右クリック」 → 「Enterキー」で、パスワードを入力することができます。
# ユーザーIDと、パスワードの設定
user_name1 = 'yuuki'
password1 = getpass('Your ALIS Password:')
ALISの「ユーザーID」と「パスワード」を設定する部分です。
プログラムを動作させる際に、パスワードの入力が面倒だと感じる場合は、「getpass('Your ALIS Password:')」→「'任意のパスワード'」に変更してしまうのもいいと思います。
# 固定の値
POOL_ID = 'ap-northeast-1_HNT0fUj4J'
POOL_REGION = 'ap-northeast-1'
CLIENT_ID = '2gri5iuukve302i4ghclh6p5rg'
AWSの「ALISの仮想サーバー」との接続に必要な変数。
この部分は、何もしなくて問題ありません。おまじないです。
# アクセストークンの獲得
aws = AWSSRP(username = user_name1, password = password1, pool_id = POOL_ID, client_id = CLIENT_ID, pool_region = POOL_REGION)
tokens = aws.authenticate_user()
id_token = tokens['AuthenticationResult']['IdToken']
「aws」に必要な情報を代入した後、
「aws.authenticate_user()」でAWSに接続して、情報(トークン、辞書型)を取得。
その後、取得したトークン内に含まれている「アクセストークン」を「id_token」にコピーするプログラムです。
以降、パスワードの通信は不要となり、獲得したアクセストークンでALISの認証を行います。
url_name1 = 'https://alis.to/api/me/info'
method1 = 'GET'
headers1 = {'Authorization': id_token}
request1 = urllib.request.Request(url_name1, None, headers = headers1 , method = method1)
「url_name1 」は、前々から使用している、ALISのAPIを呼び出すURLです。「APIドキュメント」から持ってきています。
「method1」は、「リクエストメソッド」かな。APIドキュメントに書かれている「リクエストメソッド」を記載すればOKです。
「headers1」は、ALISの個人認証に必要なアクセストークンを渡す変数です。変更不要。
そして、最後に「urllib.request.Request」を宣言して、「urllib.request.urlopen」に渡せる情報を設定しておきます。
with urllib.request.urlopen(request1) as cm_data1:
response_data1 = json.loads(cm_data1.read().decode("utf-8"))
「with文」を使用して、ちょっとコンパクトにしてみました。
上記の文は、
cm_data1 = urllib.request.urlopen(request1)
response_data1 = json.loads(cm_data1.read().decode("utf-8"))
cm_data1.close
と同じ意味を持ちます。
前から使用しているコードですね。
※ urlopenの引数について
個人認証を用いないAPIの利用では、urlopen内に文字列(URL)を書き込んでいましたが、個人認証を用いるAPIでは、送信しなければならない情報があるので、「Request」でまとめたデータを投げています。
(urlopenは、「文字列」と「Request オブジェクト」のどちらを代入しても動作します)
pprint.pprint(response_data1)
最後に、受信したデータを表示します。
○ 実行結果
ログインユーザーの情報を取得することができました。
◆ 「ゆうき」のツイッター