リンク:
アリスブログ > 「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」と「記事番号」を表示してみました。
◆ 「ゆうき」のツイッター