🐲

【ドラゴンクエストXオンライン】つよさ予報からアストルティア防衛軍の全兵団襲撃を抽出する

2024/09/19に公開

ゲーム内や冒険者のおでかけ超便利ツールで見ることができる情報ですが
テキスト情報になっているといろいろ便利ですよね

実行例

$ dqxraid
本日のアストルティア防衛軍 全兵団は 7:00 11:00 16:00 20:00 1:00 5:00 です

書いてみた

# -*- coding: utf-8 -*-
#
# つよさ予報からアストルティア防衛軍の全兵団襲撃を抽出
import sys
import datetime as dt

import requests
from bs4 import BeautifulSoup

base_url = 'https://hiroba.dqx.jp/sc/tokoyami/'

r = requests.get(base_url, timeout=10)
if r and r.status_code == 200:
    soup = BeautifulSoup(r.content, 'html.parser')
    # 同じクラスでメタルーキーもあるので先頭だけ
    tables = soup.find_all('table', class_='tokoyami-raid')[0]
    trs = tables.find_all('tr')

    attacks = []
    for tr in trs:
        tds = tr.find_all('td')
        # th のときは td がないのでスキップ
        if len(tds) == 0:
            continue

        _time = tds[0].contents[0].strip().split('\xa0')[0]
        _ico = tds[1].contents[1]

        # 全兵団アイコン
        if '/raid/ico/19.png' in str(_ico) and _time:
            attacks.append(_time)

    if len(sys.argv) == 1:
        print('本日のアストルティア防衛軍 全兵団は', ' '.join(attacks), 'です')
    else:
        now = dt.datetime.now(dt.timezone(dt.timedelta(hours=9))).strftime('%H:%M')
        if now[0:2] != '05':
            for attack in attacks:
                if attack == '0:00' and now[0:2] == '23':
                    diff = dt.datetime.strptime('01:00', '%H:%M') - dt.datetime.strptime('00:' + now[3:5], '%H:%M')
                else:
                    diff = dt.datetime.strptime(attack, '%H:%M') - dt.datetime.strptime(now, '%H:%M')

                if diff > dt.timedelta(hours=0) and diff < dt.timedelta(hours=1):

Discussion