MENU

モバイル・レジェンドのTier表の作り方〜プログラミング編〜

こんにちは、MOBA研究所の属するものです。

今回はGamerchにおけるモバイル・レジェンドのTier表の作り方において、プログラミングでの方法について解説していきます。

環境はMacで、言語はPythonになります。

目次

実装

Seleniumインストール

$ pip install selenium

pipがインストールされていない場合は、下記を実行しましょう。

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python3 get-pip.py

ChromeDriverインストール

$ brew install chromedriver

BeautifulSoup4インストール

$ pip install beautifulsoup4

これで準備は完了です。

コーディング

ここからコードを書いていきます。書くためのエディタは何でもよいです。私はVScodeを使ってます。

import time
import convMlbbHero as convMlbbHero
import convRoleMlbbHero as convRoleMlbbHero
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By

loginUrl = "https://m.mobilelegends.com/en/rank"

#ランキング画面遷移
driver = webdriver.Chrome()
driver.get(loginUrl)

#変換されるまで待機
time.sleep(2)

#ミシック400ポイント表示に切り替え
driver.find_element(by=By.XPATH, value="//*[@id='rank']/div[1]/div[2]/ul/li[3]").click()

#変換されるまで待機
time.sleep(2)

#ページ取得
html = driver.page_source

#ランキング抽出
soup = BeautifulSoup(html, 'html.parser')

#各ヒーローの勝率、Pick率、BAN率のlistを取得
rateList = soup.select(".slotwrapper > ul > li > a")
#Jungle
splusJungleHero=""
sJungleHero=""
aplusJungleHero=""
aJungleHero=""
bJungleHero=""
cJungleHero=""
#Roam
splusRoamHero=""
sRoamHero=""
aplusRoamHero=""
aRoamHero=""
bRoamHero=""
cRoamHero=""
#Mid
splusMidHero=""
sMidHero=""
aplusMidHero=""
aMidHero=""
bMidHero=""
cMidHero=""
#Gold
splusGoldHero=""
sGoldHero=""
aplusGoldHero=""
aGoldHero=""
bGoldHero=""
cGoldHero=""
#EXP
splusExpHero=""
sExpHero=""
aplusExpHero=""
aExpHero=""
bExpHero=""
cExpHero=""

#各ヒーローのそれぞれの値を計算して、その値に応じた変数に入れる
for heroRate in rateList:
    hero = heroRate.span.string
    gamerchHero = convMlbbHero.convertHeroName(hero) + " "
    convRoleHero = convRoleMlbbHero.convertRoleHeroName(hero)
    winRatePoint = heroRate.contents[2].string.split("%")[0]
    popRatePoint = heroRate.contents[4].string.split("%")[0]
    banRatePoint = heroRate.contents[6].string.split("%")[0]
    tierPoint = float(winRatePoint)*2 + float(popRatePoint)*10 + float(banRatePoint)
    for role in convRoleHero:
        if role=="Jungle":
            if tierPoint > 180:
                splusJungleHero += gamerchHero
            elif tierPoint > 150:
                sJungleHero += gamerchHero
            elif tierPoint > 120:
                aplusJungleHero += gamerchHero
            elif tierPoint > 110:
                aJungleHero += gamerchHero
            elif tierPoint > 100:
                bJungleHero += gamerchHero
            else :
                cJungleHero += gamerchHero
        elif role=="Roam":
            if tierPoint > 180:
                splusRoamHero += gamerchHero
            elif tierPoint > 150:
                sRoamHero += gamerchHero
            elif tierPoint > 120:
                aplusRoamHero += gamerchHero
            elif tierPoint > 110:
                aRoamHero += gamerchHero
            elif tierPoint > 100:
                bRoamHero += gamerchHero
            else :
                cRoamHero += gamerchHero
        elif role=="Mid":
            if tierPoint > 180:
                splusMidHero += gamerchHero
            elif tierPoint > 150:
                sMidHero += gamerchHero
            elif tierPoint > 120:
                aplusMidHero += gamerchHero
            elif tierPoint > 110:
                aMidHero += gamerchHero
            elif tierPoint > 100:
                bMidHero += gamerchHero
            else :
                cMidHero += gamerchHero
        elif role=="Gold":
            if tierPoint > 180:
                splusGoldHero += gamerchHero
            elif tierPoint > 150:
                sGoldHero += gamerchHero
            elif tierPoint > 120:
                aplusGoldHero += gamerchHero
            elif tierPoint > 110:
                aGoldHero += gamerchHero
            elif tierPoint > 100:
                bGoldHero += gamerchHero
            else :
                cGoldHero += gamerchHero
        elif role=="EXP":
            if tierPoint > 180:
                splusExpHero += gamerchHero
            elif tierPoint > 150:
                sExpHero += gamerchHero
            elif tierPoint > 120:
                aplusExpHero += gamerchHero
            elif tierPoint > 110:
                aExpHero += gamerchHero
            elif tierPoint > 100:
                bExpHero += gamerchHero
            else :
                cExpHero += gamerchHero

print("#description")
print("#contents()")
print("参考バージョン情報:''バージョン情報''")

#JungleTier
print("*ジャングル")
print("|!12%|c")
print("|bgcolor(#ff9900):&color(#ffffff){&size(18){S+}}|bgcolor(#ffeecc):" + splusJungleHero + "|")
print("|bgcolor(#ff6666):&color(#ffffff){&size(18){S}}|bgcolor(#ffeeee):" + sJungleHero + "|")
print("|bgcolor(#ff00cc):&color(#ffffff){&size(18){A+}}|bgcolor(#ffe7fa):" + aplusJungleHero + "|")
print("|bgcolor(#6666ff):&color(#ffffff){&size(18){A}}|bgcolor(#eeeeff):" + aJungleHero + "|")
print("|bgcolor(#53abff):&color(#ffffff){&size(18){B}}|bgcolor(#f0f8ff):" + bJungleHero + "|")
print("|bgcolor(#0dbc0d):&color(#ffffff){&size(18){C}}|bgcolor(#eeffee):" + cJungleHero + "|")

#GoldTier
print("*ゴールド")
print("|!12%|c")
print("|bgcolor(#ff9900):&color(#ffffff){&size(18){S+}}|bgcolor(#ffeecc):" + splusGoldHero + "|")
print("|bgcolor(#ff6666):&color(#ffffff){&size(18){S}}|bgcolor(#ffeeee):" + sGoldHero + "|")
print("|bgcolor(#ff00cc):&color(#ffffff){&size(18){A+}}|bgcolor(#ffe7fa):" + aplusGoldHero + "|")
print("|bgcolor(#6666ff):&color(#ffffff){&size(18){A}}|bgcolor(#eeeeff):" + aGoldHero + "|")
print("|bgcolor(#53abff):&color(#ffffff){&size(18){B}}|bgcolor(#f0f8ff):" + bGoldHero + "|")
print("|bgcolor(#0dbc0d):&color(#ffffff){&size(18){C}}|bgcolor(#eeffee):" + cGoldHero + "|")

#EXPTier
print("*EXP")
print("|!12%|c")
print("|bgcolor(#ff9900):&color(#ffffff){&size(18){S+}}|bgcolor(#ffeecc):" + splusExpHero + "|")
print("|bgcolor(#ff6666):&color(#ffffff){&size(18){S}}|bgcolor(#ffeeee):" + sExpHero + "|")
print("|bgcolor(#ff00cc):&color(#ffffff){&size(18){A+}}|bgcolor(#ffe7fa):" + aplusExpHero + "|")
print("|bgcolor(#6666ff):&color(#ffffff){&size(18){A}}|bgcolor(#eeeeff):" + aExpHero + "|")
print("|bgcolor(#53abff):&color(#ffffff){&size(18){B}}|bgcolor(#f0f8ff):" + bExpHero + "|")
print("|bgcolor(#0dbc0d):&color(#ffffff){&size(18){C}}|bgcolor(#eeffee):" + cExpHero + "|")

#RoamTier
print("*ローム")
print("|!12%|c")
print("|bgcolor(#ff9900):&color(#ffffff){&size(18){S+}}|bgcolor(#ffeecc):" + splusRoamHero + "|")
print("|bgcolor(#ff6666):&color(#ffffff){&size(18){S}}|bgcolor(#ffeeee):" + sRoamHero + "|")
print("|bgcolor(#ff00cc):&color(#ffffff){&size(18){A+}}|bgcolor(#ffe7fa):" + aplusRoamHero + "|")
print("|bgcolor(#6666ff):&color(#ffffff){&size(18){A}}|bgcolor(#eeeeff):" + aRoamHero + "|")
print("|bgcolor(#53abff):&color(#ffffff){&size(18){B}}|bgcolor(#f0f8ff):" + bRoamHero + "|")
print("|bgcolor(#0dbc0d):&color(#ffffff){&size(18){C}}|bgcolor(#eeffee):" + cRoamHero + "|")

#MidTier
print("*ミッド")
print("|!12%|c")
print("|bgcolor(#ff9900):&color(#ffffff){&size(18){S+}}|bgcolor(#ffeecc):" + splusMidHero + "|")
print("|bgcolor(#ff6666):&color(#ffffff){&size(18){S}}|bgcolor(#ffeeee):" + sMidHero + "|")
print("|bgcolor(#ff00cc):&color(#ffffff){&size(18){A+}}|bgcolor(#ffe7fa):" + aplusMidHero + "|")
print("|bgcolor(#6666ff):&color(#ffffff){&size(18){A}}|bgcolor(#eeeeff):" + aMidHero + "|")
print("|bgcolor(#53abff):&color(#ffffff){&size(18){B}}|bgcolor(#f0f8ff):" + bMidHero + "|")
print("|bgcolor(#0dbc0d):&color(#ffffff){&size(18){C}}|bgcolor(#eeffee):" + cMidHero + "|")

driver.close()
driver.quit()

流れとしては以下のようになります。

  1. ランキングの取得
  2. Gamerchで表示できるよう加工
  3. 加工したGamerch用のコードを表示

あとはprintでコンソールに表示されたコードをGamerchの記事に貼り付ければTier表の完成になります。

まとめ

以上がプログラミングでのTier表の作り方になります。私自身Pythonを業務で使わないため、他サイトを参考にしながらかなりゴリ押しで作成しました。それでも、作成できたときは嬉しかったです。

参考にしていただければ幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次