アイカツカードを検索するdiscordのbotを作成する


はじめに

この記事はアイカツ! Advent Calendar 2020の1日目の為に書き下ろしました。今年は誰もアドベントカレンダーを作成していなかったので作成しましたが既に1日目にしてSHINING LINE*が切れそうです。助けてください(切実)
前日の記事はありません。記念すべき1日目です。

自己紹介

N高等学校所属の高校三年生です。MacをMBRで動作させる趣味があります。12
普段はPython3をメインに書いていて片手間でRustをちょこっと学習しています。でもRustの概念があいまいなのでもう少し理解を深める努力をしたいです。Go Langとは分かり合えないです。3

今回作成したもの

アイカツカードの検索botをpythonで作りました。使用ライブラリはdiscord.pyとbeautifulsoup4、requestsです。実際の見にくいコードを引用して紹介したいと思います。

実際のコードから引用したもの

search.py(スクレイピング部分)
res = requests.get('https://www.aikatsu.com/onparade/cardlist/index.php?search=true')
#アイカツのカード一覧サイトにDDoS攻撃
soup = BeautifulSoup(res.text, 'html.parser')
#lxmlパーサー動かん...

for l in soup.find_all("dd", class_="cardName"):#カード名から要素取得してる
    print(l.text)
    CN.append(l.text)

for l in soup.find_all("dd", class_="cardNum"):#これはカード番号取得。
    print(l.text)
    CU.append(l.text)

print(CU)
print(CN)

while True:#これはカード名とカード番号を連結している
    a = CU.pop(0)
    b = CN.pop(0)
    CR.append(a+" "+b)
    if CU == [] and CN == []:
        break
    print(CR)

クソ汚いコードです。もう少しマトモな書き方は出来ないのでしょうか。
簡潔に纏めるとbot起動時に公式カードリストからカード一覧とカード番号を取得してbotアカウントにログインしています。

作りたくなったきっかけ

アイカツ公式のサイトが画像を多用しており読み込みが遅かったため4discord上で検索できるようにするべきだと思い作成しました。製作期間は概ね5日です。5

実際の動作

!s エンジェリーと打つとエンジェリーを含むカードを出力します。
複数のキーワードも可能で!s PR エンジェリーと検索した場合PRとラブを含むカードを出力します。

原理としては完全一致検索なので複数のキーワードを含む際、それらのキーワードがすべて含まれるカードを出力します。

今後の課題

複数キーワード検索でラブディスティ二ーコーデとかの真ん中のキーワード、ディスティニーで検索してみたいです。実装方法は思いつかないので後日手探りで考えてみたいと思います。

終わりに

アドベントカレンダー用にこのネタを思いつき必死で製作するのは少し身体に来るものがありました。来年はもう少し余裕を持ちたいと思います。2日目はさんのです。


  1. そんな趣味だから女にモテないし婚期を逃すんだ(現18歳)。今すぐやめて婚活をしろ。 

  2. Mac OS XをMBRで動かすに書きました。ニッチなオタクさあ... 

  3. Go Langすら出来ないのにPythonも出来るわけがない。 

  4. 自分の所有しているPCがポンコツなのもある。 

  5. この間にこんな問題も起きたので実質4日程度?