【Python】ALISの記事を「3回連続で」読み込む方法


リンク:

アリスブログ「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個ずつ順番に表示していきます



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




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


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