0
0

【Tips】英傑大戦のランキングを自動で取得する

Posted at

はじめに

私はSEGAの大戦シリーズ(三国志大戦、戦国大戦、英傑大戦)が好きで、三国志大戦から20年近くにわたりプレイしています。

現在は英傑大戦が絶賛稼働中となっております!
どのようなゲームかご存じない方は以下のサイトを参照ください。

私は週2~3ぐらいのペースでプレイしているのですが、ただプレイするだけではなく「1か月前はどれぐらいだっけ?」とか、「〇日でどれぐらい順位が上がった!」といった日々のプレイ記録を残したいと思い、ラインキングを収集するコードを書いてみました。

注意事項

コードを動作させる場合、自己責任で使用してください。

サンプルコード

from requests_html import HTMLSession

# ※検索するURLを指定
# この例では福岡県ランキングのURLを指定し、ランキングを取得しています
url = 'https://www.eiketsu-taisen.com/ranking/prefecture_region/#/national:38/'

# セッション開始
session = HTMLSession()
res = session.get(url)

# ブラウザエンジンでHTMLを生成させる
res.html.render()

#エンコード設定
res.encoding = res.apparent_encoding

#ランキング100件ループ
for num in range(1,100,1):

    #主君名
    playername = res.html.xpath('//*[@id="ranking-top"]/div[2]/ul/li[' + str(num) + ']/ul/li[3]')
    #print(playername[0].text)

    #ここで主君名を指定する
    if ( '主君名' in playername[0].text):
        print('playername:' + playername[0].text)

        #順位
        rank_num = res.html.xpath('//*[@id="ranking-top"]/div[2]/ul/li[' + str(num) + ']/ul/li[1]')
        print('rank_num  :' + rank_num[0].text)

        #石高
        point_num = res.html.xpath('//*[@id="ranking-top"]/div[2]/ul/li[' + str(num) + ']/ul/li[7]/div')
        print('point_num :' + point_num[0].text)

        #店舗
        play_area = res.html.xpath('//*[@id="ranking-top"]/div[2]/ul/li[' + str(num) + ']/ul/li[4]')
        print('play_area :' + play_area[0].text)
        
print('完了しました')

解説

主君名(プレイヤー名)を指定すると、指定した主君名の以下の項目を抽出します。
・順位
・石高
・店舗

今回は自宅のQNAPで毎日自動実行することを想定しているため、SeleniumではなくRequests-HTMLを使用しています。
※ランキングはTOP100までしかないため、TOP100に入っていない場合は抽出できません。
 

まとめ

今回は英傑大戦のランキング記録を自動で取得するスクリプトを紹介しました。
キーワード指定を変更するだけでランキング情報が取得できるため、後はCSVに追記して毎日の記録を取るなり、メールやslack等で通知するなど活用していただければと思います。
この記事が誰かの参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0