【Python】ALISの「個人認証が必要なAPI」を利用してみよう!


リンク:

アリスブログ「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)

最後に、受信したデータを表示します。


○ 実行結果

ログインユーザーの情報を取得することができました。



「『ALISのAPI』を使用する方法まとめ」に戻る




◆ 「ゆうき」のツイッター


公開日:2018/09/16
獲得ALIS:30.57
ゆうき / アリスブロガー's icon'
  • ゆうき / アリスブロガー
  • @yuuki
ALISブロガーです。スキル:SEO対策、ライティング、プログラム等。ALISでは「記事制作のアドバイス」や「情報提供」などを行っています。よろしくお願いします。Twitter yuuki_tw1
コメントする
コメントする