【Python】ALISの記事を「1000件」読み込めるプログラムの説明


リンク:

アリスブログ「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件」分の「記事の番号」が表示されました。



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




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


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