SHOWROOMでギフトを画面に降らせるまで5(unixtimeの変換・gift_nameの照合)
1. 概要
このnoteは、virtualSHOWROOMERの東雲めぐちゃんのように、SHOWROOMの配信中にもらったギフトを主の後ろに降らせたい!という想いのもと、プログラミング初心者がなんだかんだしたメモです。(この内容はSHOWROOMで配信しています。)
↑完成イメージ図
東雲めぐちゃんSHOWROOMアーカイブ(10:56~15:44あたり)
めぐちゃんのところがバーチャルじゃない人になるイメージ...
詳しくは前回の記事をご覧ください。
2. 今回やったこと
前回は、HTTPリクエストを送った後に欲しいデータだけを整形して出力するということをしました。
ただし、時刻のデータがunixtimeになっていたので、今回は人間がわかる時間に直すところをやりました。
また、今現在出力しているデータはSHOWROOMのgift_log APIから取得しています。しかし、このAPIにはgiftの名前がわかる項目がないので、gift_list APIとgift_log APIを照合してgiftの名前を出力するようにしました。
2-1. unixtimeの変換
まず、unixtimeとは協定世界時(UTC)である1970年1月1日午前0時0分0秒から何秒経過したかをあらわす時間のことだそうです。
これをdatetimeモジュール(テンプレート的なもの?)を使って、その環境(例えば日本にいるなら日本時間)の時間に置き換えることができるそうです。
実際に書いたコードがこんな感じ
import requests
import json
from datetime import datetime
#requests・json・datetimeモジュールの読み込み
url1 = 'https://www.showroom-live.com/api/live/gift_log?room_id='******'
#gift_log APIのURIをurl1という名前に置き換える
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
#私はどこどこの誰々ですという情報をheadersという名前にする
r = requests.get(url1,headers=headers)
#httpリクエストを送る
json_log = r.json()
#json形式で出力するという命令をjson_logっていう名前にする
for a_gift in json_log['gift_log']:
time = datetime.fromtimestamp(a_gift['created_at'])
#gift_logに入ってるデータの中身を一つずつ取り出して(配列の要素を一つずつ取り出して)
#datetimeモジュールを使ってcreated_atに入ってきたunixtimeを現地の時間に変換
基本的には下の部分が改良点
from datetime import datetime
time = datetime.fromtimestamp(a_gfit['created_at'])
これで日本時間で出力することに成功しました!
この時のコードはこちら↓
import requests
import json
import pprint
from datetime import datetime
url1 = 'https://www.showroom-live.com/api/live/gift_log?room_id=’*****'
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
r = requests.get(url1,headers=headers)
json_log = r.json()
for a_gift in json_log['gift_log']:
pprint.pprint('name:{}'.format(a_gift['name']))
pprint.pprint('gift_id:{}'.format(a_gift['gift_id']))
pprint.pprint('num:{}'.format(a_gift['num']))
time = datetime.fromtimestamp(a_gift['created_at'])
pprint.pprint('created_at:{}'.format(time))
2-2. gift_nameの出力
gift_log APIではギフトアイテムの名前までは取得できないので、gift_list APIとgift_log APIを照合して、gift_list APIからgift_nameを取得したいと思います。
↑gift_idで照合するイメージ
ただし、gift_list APIで取得できるデータが以下のように、enqueteとnormalの辞書に分かれているので、どちらの辞書に該当するデータなのかを分けて考える必要があります。
なので、配列の要素を一つずつ取り出して、その中のgift_idをgift_log APIのgift_idと照合する処理をenqueteとnormalの両方で行うことにしました。
for a_gift in json_log['gift_log']:
pprint.pprint('name:{}'.format(a_gift['name']))
pprint.pprint('gift_id:{}'.format(a_gift['gift_id']))
pprint.pprint('num:{}'.format(a_gift['num']))
time = datetime.fromtimestamp(a_gift['created_at'])
pprint.pprint('created_at:{}'.format(time))
#gift_logの方の出力
for list_enquete in json_list['enquete']:
if a_gift['gift_id'] == list_enquete['gift_id'] :
pprint.pprint('gift_name:{}'.format(list_enquete['gift_name']))
#enqueteの方の照合
for list_normal in json_list['normal']:
if a_gift['gift_id'] == list_normal['gift_id'] :
pprint.pprint('gift_name:{}'.format(list_normal['gift_name']))
#normalの方の照合
こんな感じ...
伝わりますかね.... 日本語で説明するの難しい....
2-3. 全体のコード
unixtimeの変換とgift_idの照合と両方合わせるとこんな感じ
import requests
import json
import pprint
from datetime import datetime
url1 = 'https://www.showroom-live.com/api/live/gift_log?room_id=******'
url2 = 'https://www.showroom-live.com/api/live/gift_list?room_id=*****'
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
r = requests.get(url1,headers=headers)
r2 = requests.get(url2,headers=headers)
json_log = r.json()
json_list = r2.json()
for a_gift in json_log['gift_log']:
pprint.pprint('name:{}'.format(a_gift['name']))
pprint.pprint('gift_id:{}'.format(a_gift['gift_id']))
pprint.pprint('num:{}'.format(a_gift['num']))
time = datetime.fromtimestamp(a_gift['created_at'])
pprint.pprint('created_at:{}'.format(time))
for list_enquete in json_list['enquete']:
if a_gift['gift_id'] == list_enquete['gift_id'] :
pprint.pprint('gift_name:{}'.format(list_enquete['gift_name']))
for list_normal in json_list['normal']:
if a_gift['gift_id'] == list_normal['gift_id'] :
pprint.pprint('gift_name:{}'.format(list_normal['gift_name']))
とりあえずこれで、私が欲しいデータ(ギフトくれた方の名前・ギフトID・同一ギフトの数・投稿された日時・ギフトの名前)を出力することに成功しました!
あ、上もgift_nameまで成功してたやつ貼っちゃった...
3. 次回やりたいこと
今回でやりたいことへの第一ステップを完了した気がするので、次は取得したデータを元に「画面上にアイテムを降らせる」という過程に進みたいと思います!
うーん、Chromeの拡張機能で作るのか、はたまたOpenGL的なので作るのか....
さっぱりいまだ検討はついていませんが、第二ステップに向けて頑張るぞ!
この記事が気に入ったらサポートをしてみませんか?