【Python】特定の時刻の「ALISの記事」を取得する方法


リンク:

アリスブログ「ALISのAPI」を使用する方法まとめ > 当記事


◆ 【Python】特定の時刻の「ALISの記事」を取得する方法

ここでは、時刻の操作に関するプログラムを、軽く説明していきます。


○ 留意事項

・「2018/09/21」に作成した記事です

・以下のプログラムは、ALISのユーザー数が大幅に増えると、あまり使えなくなります(「load_num」の値が膨大になるため)


○ 関連記事



◆ 昨日の内の、「20:00 ~ 21:59」に投稿された記事を抽出するプログラム

import urllib.request
import json
import pprint
import time
import datetime


#任意の値
load_num = 300


#固定の値
page1 = 1
article_box2 = []


# 呼び出しする数の生成
if load_num < 1 : load_num = 1
limit1 = load_num
loop_num = (int)(1 + (load_num - 1) / 100)
if limit1 > 100 : limit1 = 100


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'])
       
        print('Load : ' + str(count1) + ' (読み込み ' + str(page1 * limit1) + '記事)')
        page1 += 1
       
        #time.sleep(1)
       
    except:
        print("Error!")
        break


print("")

date1 = datetime.datetime.now()

date1 -= datetime.timedelta(days = 1)



for article3 in article_box2:
    published_at1 = 0
   
    if "published_at" in article3.keys():
        published_at1 = article3['published_at']
    else :
        published_at1 = article3['sort_key'] / 1000000

    date2 = datetime.datetime.fromtimestamp(published_at1)


    day1 = int(date1.day)
    day2 = int(date2.day)
    hour2 = int(date2.hour)

    if day1 == day2 and hour2 >= 20 and hour2 <= 21 :
        print(article3['user_id'] + " : " +article3['article_id'])



input('Enterキーを押してね!')

※ 説明したいところは、太字になっています


○ 説明!

import datetime

「datetime」のモジュールを入れて、時刻の操作を行えるようにします。


date1 = datetime.datetime.now()

現在の時刻を、「datetime.datetime型」で取得。

「datetime.datetime型」を用いることで、オブジェクトに様々な時刻の情報を入れておきます。


date1 -= datetime.timedelta(days = 1)

日付の加算や減算を行うプログラムです。

現在の時刻-1日」とすることで、「昨日」の時刻をdate1にメモしておきます


if "published_at" in article3.keys():
    published_at1 = article3['published_at']
else :
    published_at1 = article3['sort_key'] / 100000

取得した記事の(辞書型の)データに、「published_at」(記事の投稿時間)という要素が含まれていたら、それを変数に代入。

もしなかったら、代わりに「sort_key」(記事の作成時間)の情報を代入です。

(「sort_key」の場合は「/ 100000」で秒数以下の情報を切り捨てています)


現時点において、2018年5月1日前のALISの記事には、「published_at」が含まれていないので、バグ対策として、このようにしています。


date2 = datetime.datetime.fromtimestamp(published_at1)

取得した記事の投稿時間(unix時間)を「datetime.datetime型」に変換しました。


day1 = int(date1.day)
day2 = int(date2.day)
hour2 = int(date2.hour)

必要となる値を、「int型」で出力。


if day1 == day2 and hour2 >= 20 and hour2 <= 21 :
    print(article3['user_id'] + " : " +article3['article_id'])

・昨日の日程が、投稿した日程と同じになる

・投稿した時間が、20時~21時の範囲になっている

という条件の記事を、printで表示します。


○ 実行結果

「load_num = 300」でテスト。

指定の時間(この場合は、「2018-09-20」の「20~21時」)に投稿された記事の「ユーザーID」と「記事番号」を表示してみました。



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




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


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