リンク:
アリスブログ > 「ALISのAPI」を使用する方法まとめ > 当記事
◆ 【Python】ALISのAPIを読み込むプログラムの説明
いよいよ、やってきました。
「ALISのAPIを読み込むプログラム」の本体の説明です!
私の「Pythonの記事」を読んできた方なら、きっと、この記事の内容も理解することができるでしょう!
○ 留意事項
・「2018/09/08」に作成された記事です
・pythonの経験は浅いので、内容の一部に誤りがあるかもしれません
○ 関連記事
◆ 「ALIS」の新着記事を「1件」表示するプログラムのソースコード
○ 基本型
import urllib.request
import json
import pprint
url_name1 = 'https://alis.to/api/articles/recent?limit=1'
cm_data1 = urllib.request.urlopen(url_name1)
byte_data1 = cm_data1.read()
str1 = byte_data1.decode("utf-8")
article_box1 = json.loads(str1)
pprint.pprint(article_box1['Items'])
input('Enterキーで終了')
○ 省略型
import urllib.request
import json
import pprint
cm_data1 = urllib.request.urlopen('https://alis.to/api/articles/recent?limit=1')
article_box1 = json.loads(cm_data1.read().decode("utf-8"))
pprint.pprint(article_box1['Items'])
input('Enterキーで終了')
省略型の方は、前から同じソースコードを掲示していたので、見覚えがあると思います。
一方、基本型は初めて作成したので、少し戸惑うかもしれません。
しかしながら、コードの中身は、過去の記事の「『ALIS Media』の『HTMLデータ』を取得してみよう!」と「JSONデータのロードと表示を行ってみよう!」の組み合わせでしかないので、さほど困ることはないでしょう。
○ 基本型の説明(「省略型のソースコード」の説明は省きます)
import urllib.request
import json
import pprint
ALISのAPIの読み込みでは、「urllib.request」「json」「pprint(おまけ)」のモジュールが必要となるため、呼び出しを行います。
url_name1 = 'https://alis.to/api/articles/recent?limit=1'
url_name1に、ロードするURLの情報を入れておきます。
なお、「ALISのAPI」を呼び出したい時は、
・ALISのAPIのドキュメント
の内部に書かれている「任意のURL」を使用することで、目的のJSONデータを獲得することができます。
cm_data1 = urllib.request.urlopen(url_name1)
byte_data1 = cm_data1.read()
指定のURLから、bytes型のJSONデータを受け取り、それを「byte_data1」の中に入れます。
(以前の記事では、「HTMLデータ」を「bytes型」で受け取っていましたが、「ALISのAPI」のURLの場合は、read()で呼び出すと「JSONデータ」を送ってくるので、今回の「byte_data1」には、「JSONデータ」が含まれることになります)
str1 = byte_data1.decode("utf-8")
「bytes型」を「str型」に変換します。
……だけど、今回のケースでは、送られてくるデータの形式上、変換の必要性が特になく、
上記の行を消した上で、下記のコードを「json.loads(str1) → json.loads(byte_data1)」に変換しても動きます。
けれども、「.decode("utf-8")」が含まれたコードを使用した際に、「今後、文字のエンコード関係でどこかに影響があるのかな?」と思うことがあったので、そのまま残しています。
・備考:「str1」の中の日本語が閲覧できない件について
HTMLを表示するプログラムの時は、デコードした後に「文字列の中身」を全て確認することができていましたが、今回の「str1」を「print」などで表示すると、日本語の部分だけ表示がおかしくなります。
これは、「Unicodeエスケープ」が要因です。
「ALISのAPI」から送られてくる「JSONデータ」は、「Unicodeエスケープ形式」なので、辞書型に変換するまでは(json.loads()するまでは)、「unicode(日本語が『\u+16進数』の状態)」で表示されます。
・補足:「Unicodeエスケープ形式」の文章を日本語で見たい場合
「Unicodeエスケープされていない文字列」に戻せばいいだけですね。
import codecs
str2 = codecs.decode(str1, 'unicode-escape')
print(str2)
この文章を「str1 = byte_data1.decode("utf-8")」の後に配置することで、str1の中身を正確に把握することができます。
article_box1 = json.loads(str1)
獲得したJSONデータを辞書型に変換します。
pprint.pprint(article_box1['Items'])
辞書型の変数を見やすい形式で表示します。
input('Enterキーで終了')
いつもの一時停止させるプログラムです。
○ 出力結果
成功すると、「ALISの新着記事」を1つ取得して表示することができます!
ここまで理解した上で、APIの獲得を成功させたら、少し感動するかもしれません。
(*´∀`*)
◆ 「ゆうき」のツイッター