リンク:
アリスブログ > 「ALISのAPI」を使用する方法まとめ > 当記事
◆ 【Python】ALISの記事を「1000件」読み込めるプログラムの説明
「ALISの記事を『3回連続で』読み込む方法」の続き。
ここでは、「ALISの記事を大量に読み込めるプログラム」の説明を行っていきます。
○ 関連記事
◆ 記事を「limit1 × loop_num」個、ロードするプログラム
import urllib.request
import json
import pprint
import time
#任意の値
limit1 = 5
loop_num = 3
#固定の値
page1 = 1
article_box2 = []
for count1 in range(loop_num):
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"))
article_box2.extend(article_box1["Items"])
page1 += 1
print("Load : " + str(count1))
#time.sleep(1)
except:
print("Error!")
break
print("要素数 : " + str(len(article_box2)))
print("")
for article3 in article_box2:
print("article_id : " + article3['article_id'])
input('Enterキーで終了')
※1 追加(修正)した部分は、太字にしています
※2 このプログラムは、「記事を15個(5 × 3 個)」読み込みます
○ 注意事項
上記のプログラムの「#任意の値」に書かれている変数を、以下の値に変更すると、1000記事分(100 × 10)をロードすることができます。
#任意の値
limit1 = 100 #最大値
loop_num = 10
ですが、この行為はALISのサーバーに結構な負荷がかかるので、
100記事以上読み込む際は、サーバーの負荷に気をつけておいて下さい。
○ 補足:なぜ、大量の記事を読み込む際に、何度もロードを行うのかについて
(現時点での)「limitの最大値が『100』だから」です。
「limit=101」以上にすると、エラーが発生します。
このことから、記事を101個以上読み込みたい場合は、複数回に分けてロードを行う必要があります。
○ 追加した部分の説明
loop_num = 3
今回は、for文のループ回数を変数に保存しています。
article_box2 = []
リスト型の宣言。
後ほど、「article_box2」にロードした辞書型のデータを詰め込んでいきます。
for count1 in range(loop_num):
前回は、「for count1 in range(3):」でしたが、今回は後ろの部分を変数にしました。
「loop_num」に「任意の値」を入れることで、「その値分だけ」内部をループさせます。
article_box2.extend(article_box1["Items"])
辞書型の「article_box1["Items"]」の中身を、リスト型の「article_box2」の内部に入れていくプログラムです。
(※1 ループと組み合わせることで、サーバーからダウンロードした全てのデータを、「article_box2」の中に追加することが可能です)
(※2 リスト型の変数には、辞書型のデータを入れることもできます)
・注意事項:リスト型の変数に、辞書型のデータを入れた場合
list1 = []
list2 = []
dict1 = {'Items':[{'ocrybit':1, 'fukurou':2, 'yuuki':3}]}
list1.extend(dict1['Items'])
list2.extend(dict1)
こちらの「サンプルプログラム」を実行した場合、「list1」と「list2」に追加されるものは別物になります。
「list1」には、「[{'ocrybit':1, 'fukurou':2, 'yuuki':3}]」([]のdict型)
「list2」には、「'Items'」(str型)
が追加されます。
list型には、「[]の外にも要素を持った複雑な辞書型」を入れることはできません。
強引に入れると、「str型」に劣化して、内部の情報がなくなります。
print("要素数 : " + str(len(article_box2)))
「len()」は、リスト型の要素数を調べるプログラムです。
これを使うことで、「article_box2」に何記事分のデータが入っているのかを見ることができます。
for article3 in article_box2:
リスト型の「article_box2」の中に存在している「辞書型のデータ」を1つずつ、辞書型になった「article3」に代入するループ文です。
「article_box2」の要素数分だけループを行います。
(「c#」でいうところの「foreach」でしょうか)
print("article_id : " + article3['article_id'])
「article3」に代入された辞書型のデータの中の「'article_id'」(記事番号)の項のみを表示します。
前と同じように、記事の情報の全てを表示することもできますが、上記のプログラムのロード数を1000件にしてから全ての表示を行うと大変なことになるので(凄く時間がかかるので)、今回は、記事番号しか閲覧しないことにしています。
○ 実行結果
新着記事から「15件」分の「記事の番号」が表示されました。
◆ 「ゆうき」のツイッター