リンク:
アリスブログ > 「ALISのAPI」を使用する方法まとめ > 当記事
◆ 【Python】ALISの記事を「3回連続で」読み込む方法
今回は勉強回。
少量の記事を「ALISのサーバー」から「連続で」呼び出すメリットは、あまり無かったりするのですが、
この技術を覚えておくと、「ループ処理を行う時」や「多くの記事を読み込む時」に役立ったりするので、ここでは、「連続で読み込む方法」を説明しておきます。
○ 関連記事
◆ 連続で記事を読み込むプログラム
import urllib.request
import json
import pprint
import time
#任意の値
limit1 = 1
#固定の値
page1 = 1
for count1 in range(3):
try:
url_name1 = 'https://alis.to/api/articles/recent?limit=' + str(limit1) + '&page=' + str(page1)
cm_data1 = urllib.request.urlopen(url_name1)
article_box1 = json.loads(cm_data1.read().decode("utf-8"))
page1 += 1
print("Load : " + str(count1))
pprint.pprint(article_box1["Items"])
print("")
#time.sleep(1)
except:
print("Error!")
break
input('Enterキーで終了')
「ALISのAPIを読み込むプログラムの説明」に使われていたソースコードの拡張型です。
(更新したところは、太字にしています)
○ 新しく追加されたコードの説明
import time
「time.sleep」というプログラムを使えるようにするモジュールです。
(ゲーム系のプログラムを作る時は、sleep系の関数をよく見かけるかも)
#任意の値
limit1 = 1
#固定の値
page1 = 1
変数の宣言です。
「ALISのAPI」の呼び出しの際に使う「limit」や「page」は、今までURLの文字列(str文)に値を直接入れていましたが、今回は、URLの文字列を途中で変更したいので、変数で変更できるようにしておきます。
for count1 in range(3):
ループ文です。
C言語で訳すと
for (int count1 = 0; count1 < 3; count1 += 1){
のようなもの。
ここでは、この中に含まれているコード(行頭に4個以上の半角スペースが入力されているコードの全て)を「3回連続で」実行します。
・Pythonにおける「インデント(行頭をずらす行為)」と「スコープ(有効範囲)」の関係について
今回の説明で、初めてインデントを行ったため、追加で説明。
「ループ文」や「if文」を宣言すると、「どの範囲までが対象なのか」ということを決めなければならないのですが、
Pythonの場合は、これを(宣言文の一行下の)「半角スペースの量」で判断しています。
(※1 一度インデントを行って、「半角スペースの量」を決めたら、以降のソースは、(多分)「半角スペースの量」の倍数にする必要があります。例えば、最初の「半角スペースの量」を「2個」にしたら、「2,4,6,8」の量にしなければなりません)
(※2 今回のプログラムでは、Pythonのインデントにおいて標準の半角スペースの量である「4個」にしています。そのため、「半角スペースの量」は「4個」と「8個」になっています)
例えば、以下のようなPyhtonのサンプルソースがあった場合、
for count1 in range(3):
for count2 in range(3):
print(str(count1))
print(str(count2))
print("test")
C言語では、
for (int count1 = 0; count1 < 3; count1 += 1){
for (int count2 = 0; count2 < 3; count2 += 1){
printf("%d \n", count1))
printf("%d \n", count2))
}
}
printf("test\n")
のような「スコープの配置」になります。
({}が、宣言したループ文の有効範囲です)
try:
try文です。
この中でプログラムのエラーが発生した場合は、強制終了にはならず、プログラムの実行部分は「except:」にワープします。
・なぜ「try文」をいれているのか
これは、ALISのAPIの「続きのページ」を読み込んだ際、エラーになる可能性があるからです。
もし仮に、「続きのページ」が存在しなかったら、強制終了してしまい、送られてきたデータを表示することができなくなるのですが……、
それを防ぎたいので、「try文」を入れることにしました。
url_name1 = 'https://alis.to/api/articles/recent?limit=' + str(limit1) + '&page=' + str(page1)
前々からよく出てくる、URLの設定ですが、
このコードでは、途中に書かれている変数の値を「str型」に変換しているので、任意の値を文字列の中にいれることができます。
また、以下のプログラムで、変数を「1」ずつ加算する
page1 += 1
を宣言しているので、ループする度に「page1」の値が増えていくことから、
https://alis.to/api/articles/recent?limit=1&page=1' # 1回目の実行
https://alis.to/api/articles/recent?limit=1&page=2' # 2回目の実行
https://alis.to/api/articles/recent?limit=1&page=3' # 3回目の実行
のように、URL文の中の「page=」の部分だけが、変化するようになっています。
print("Load : " + str(count1))
何回目のループなのかを確認するプログラムです。なくても問題なし。
pprint.pprint(article_box1["Items"])
前にも説明した、辞書型のデータをコンソール画面に表示するプログラムです。
ただし、このプログラムは「for文」内にあるので、(コード内にバグがなければ)「3回」呼び出されます。
print("")
表示されるものを改行したいから追加。見やすくするためのものです。
#time.sleep(1)
プログラムを「1秒間」停止させるもの。
ALISサーバーに負荷をかけたくない時は、入れておいたほうが良さそうですが、今回は特に問題ない規模なので、コメント文で無効化させています。
except:
try文とセットで使用する例外処理。
print("Error!")
break
try文の中でバグを生じさせたら、「Error!」と表示させた後、「break」でループ文から強制離脱を行います。
(「break」を入れておかないと、エラーが発生するプログラムを何度も繰り返してしまうので注意)
○ 実行結果
上記のプログラムを実行した場合、新着記事の「1~3番目」を1個ずつ順番に表示していきます。
◆ 「ゆうき」のツイッター