ポケモン剣盾のランクバトルで1人しか使ってなさそうなポケモンを探す。

こういう記事を書きました。
ポケモン剣盾のランクバトルのバトルデータをMetabaseで可視化する。 - Qiita
JSONからだとアプリから参照できないポケモンの情報も参照できるので、1人しか使ってなさそうなポケモンもいくつか検索にひっかかります。
ダブルバトルでコロモリとか何に使うのかめちゃくちゃ興味があります。他にもそういうポケモンがいそうでわくわくしたので、Metabaseで検索してみることにしました。

JSONを加工してCSVにする

わざ・とくせい・もちもののデータをそれぞれ別のテーブルに保存するため、それぞれを別々のCSVに変換します。
Python3を使っています。

import json

pokedex = ""
#  https://resource.pokemon-home.com/battledata/js/bundle.js の図鑑と持ち物情報を抜き出してjsonにしたものを読み込む
with open("./bundle.json", "r") as json_open:
    pokedex = json.load(json_open)

pdetail = ""
# https://resource.pokemon-home.com/battledata/ranking/{シングル or ダブルのID}/{rstの値}/{ts2の値}/pdetail-{1から5} をcatで全部連結させたjsonを読み込む
# 私はダブルバトルのプレイヤーなので、ダブルバトルのJSONだけ使っています。
with open("./pdetail-1-5.json", "r") as json_open:
    pdetail = json.load(json_open)

waza_str = ""
item_str = ""
tokusei_str = ""
for pokenum in pdetail.keys():
    for p_detail_id in pdetail[pokenum].keys():
        name = pokedex["poke"][int(pokenum) -1]
        if p_detail_id != "0": # 0以外はフォルム・性別・リージョンetc違いなので分けて扱う。わざをみればどのフォームか分かるので数字だけでも特に問題ない。
            name = name + p_detail_id
        for pokewaza in pdetail[pokenum][p_detail_id]["temoti"]["waza"]:
            waza_str = waza_str + name + "," + pokedex["waza"][pokewaza["id"]] + "," + pokewaza["val"] + "\n"
        for pokeitem in pdetail[pokenum][p_detail_id]["temoti"]["motimono"]:
            item_str = item_str + name + "," + pokedex["item"][pokeitem["id"]] + "," + pokeitem["val"] + "\n"
        for poketokusei in pdetail[pokenum][p_detail_id]["temoti"]["tokusei"]:
            tokusei_str = tokusei_str + name + "," + pokedex["tokusei"][poketokusei["id"]] + "," + poketokusei["val"] + "\n"

with open("waza.csv", mode='w') as f:
    f.write(waza_str)
with open("item.csv", mode='w') as f:
    f.write(item_str)
with open("tokusei.csv", mode='w') as f:
    f.write(tokusei_str)

CSVをSQLite3に変換

$ sqlite3 double_move.db
sqlite> create table move(name text, move text, adoption_rate real); # わざテーブルの作成
sqlite> .mode csv
.import ./waza.csv move
# item, tokuseiも同様のテーブルを作成してインポートする

作ったDBをmetabaseに読み込む

Qiitaの記事と同じなので割愛。

1人しか使ってなさそうなポケモンを探す

推理が雑ですが、とくせいともちものの採用率が100%、かつ、使われてるわざの数が4から6なら、使ってる人が1人(もしくはその人のレンタルパ)と言えそうです。
3つのテーブルをjoinして検索します。

metabaseのjoin

全部joinしてフィルターをかけるとこんな感じ。


たまもちのコイキングとかいう気が狂ってるとしか思えないのがいますね。どういう構築なんだこれ。
このワンリキーはカ・エールさん究極激可愛運勝ビートのワンリキーですね。すごい。

6/12のデータを検索したところ、ダブルバトルで1人しかつかってなさそうなポケモンは以下であることがわかりました。
(型が1つしかなさそうなポケモンもいるので、実際は1人かどうかはわからないです)
ロコンはアローラで、ダルマッカはガラルですね。バスラオはJSONの中を見ないとどっちがどっちかわかんねえな。
ホエルコは究極激可愛運勝ビートのホエルコですね。
みんな個性的で面白いなと思います。

ポケモンの名前	とくせい	とくせいの採用率	もちもの	もちものの採用率	わざ	わざの採用率
フシギソウ	ようりょくそ	100	しんかのきせき	100	てだすけ	100
フシギソウ	ようりょくそ	100	しんかのきせき	100	ねむりごな	100
フシギソウ	ようりょくそ	100	しんかのきせき	100	まもる	100
フシギソウ	ようりょくそ	100	しんかのきせき	100	やどりぎのタネ	47.1
フシギソウ	ようりょくそ	100	しんかのきせき	100	ギガドレイン	52.9
ロコン1	ゆきふらし	100	しんかのきせき	100	こおりのつぶて	100
ロコン1	ゆきふらし	100	しんかのきせき	100	つぶらなひとみ	100
ロコン1	ゆきふらし	100	しんかのきせき	100	オーロラベール	100
ロコン1	ゆきふらし	100	しんかのきせき	100	フリーズドライ	100
クサイハナ	ようりょくそ	100	しんかのきせき	100	あまえる	87.5
クサイハナ	ようりょくそ	100	しんかのきせき	100	ちからをすいとる	12.5
クサイハナ	ようりょくそ	100	しんかのきせき	100	ねむりごな	100
クサイハナ	ようりょくそ	100	しんかのきせき	100	ギガドレイン	100
クサイハナ	ようりょくそ	100	しんかのきせき	100	ヘドロばくだん	100
ワンリキー	ノーガード	100	しんかのきせき	100	はたきおとす	100
ワンリキー	ノーガード	100	しんかのきせき	100	ばくれつパンチ	100
ワンリキー	ノーガード	100	しんかのきせき	100	れいとうパンチ	100
ワンリキー	ノーガード	100	しんかのきせき	100	バレットパンチ	100
コイキング	びびり	100	いのちのたま	100	じたばた	100
コイキング	びびり	100	いのちのたま	100	たいあたり	100
コイキング	びびり	100	いのちのたま	100	とびはねる	100
コイキング	びびり	100	いのちのたま	100	ハイドロポンプ	100
ピチュー	ひらいしん	100	きあいのタスキ	100	てだすけ	100
ピチュー	ひらいしん	100	きあいのタスキ	100	ねこだまし	100
ピチュー	ひらいしん	100	きあいのタスキ	100	ほっぺすりすり	100
ピチュー	ひらいしん	100	きあいのタスキ	100	リフレクター	100
イノムー	あついしぼう	100	こだわりハチマキ	100	いわなだれ	100
イノムー	あついしぼう	100	こだわりハチマキ	100	こおりのつぶて	100
イノムー	あついしぼう	100	こだわりハチマキ	100	つららおとし	100
イノムー	あついしぼう	100	こだわりハチマキ	100	10まんばりき	100
ホエルコ	みずのベール	100	こだわりメガネ	100	しおふき	100
ホエルコ	みずのベール	100	こだわりメガネ	100	れいとうビーム	100
ホエルコ	みずのベール	100	こだわりメガネ	100	ハイドロポンプ	100
ホエルコ	みずのベール	100	こだわりメガネ	100	ハイパーボイス	100
ヒンバス	どんかん	100	きあいのタスキ	100	さいみんじゅつ	100
ヒンバス	どんかん	100	きあいのタスキ	100	ひかりのかべ	100
ヒンバス	どんかん	100	きあいのタスキ	100	ふぶき	100
ヒンバス	どんかん	100	きあいのタスキ	100	れいとうビーム	100
ヨマワル	おみとおし	100	しんかのきせき	100	かげうち	100
ヨマワル	おみとおし	100	しんかのきせき	100	てだすけ	100
ヨマワル	おみとおし	100	しんかのきせき	100	サイドチェンジ	78.6
ヨマワル	おみとおし	100	しんかのきせき	100	トリックルーム	100
ヨマワル	おみとおし	100	しんかのきせき	100	ナイトヘッド	21.4
ビークイン	きんちょうかん	100	バンジのみ	100	とどめばり	100
ビークイン	きんちょうかん	100	バンジのみ	100	とんぼがえり	100
ビークイン	きんちょうかん	100	バンジのみ	100	まもる	100
ビークイン	きんちょうかん	100	バンジのみ	100	クロスポイズン	100
ゴンベ	あついしぼう	100	しんかのきせき	100	じばく	100
ゴンベ	あついしぼう	100	しんかのきせき	100	のしかかり	100
ゴンベ	あついしぼう	100	しんかのきせき	100	ばかぢから	100
ゴンベ	あついしぼう	100	しんかのきせき	100	れいとうパンチ	100
ガントル	くだけるよろい	100	じゃくてんほけん	100	いわなだれ	100
ガントル	くだけるよろい	100	じゃくてんほけん	100	じだんだ	100
ガントル	くだけるよろい	100	じゃくてんほけん	100	だいばくはつ	100
ガントル	くだけるよろい	100	じゃくてんほけん	100	まもる	100
コロモリ	てんねん	100	しんかのきせき	100	ふういん	100
コロモリ	てんねん	100	しんかのきせき	100	まもる	100
コロモリ	てんねん	100	しんかのきせき	100	サイドチェンジ	100
コロモリ	てんねん	100	しんかのきせき	100	トリックルーム	100
モンメン	いたずらごころ	100	ねらいのまと	100	おきみやげ	100
モンメン	いたずらごころ	100	ねらいのまと	100	すいとる	20
モンメン	いたずらごころ	100	ねらいのまと	100	すりかえ	100
モンメン	いたずらごころ	100	ねらいのまと	100	てだすけ	100
モンメン	いたずらごころ	100	ねらいのまと	100	グラスフィールド	80
バスラオ	てきおうりょく	100	しんぴのしずく	100	あばれる	100
バスラオ	てきおうりょく	100	しんぴのしずく	100	いのちがけ	100
バスラオ	てきおうりょく	100	しんぴのしずく	100	アクアジェット	100
バスラオ	てきおうりょく	100	しんぴのしずく	100	アクアブレイク	100
バスラオ1	てきおうりょく	100	きあいのタスキ	100	しっぽをふる	100
バスラオ1	てきおうりょく	100	きあいのタスキ	100	だくりゅう	100
バスラオ1	てきおうりょく	100	きあいのタスキ	100	みずびたし	100
バスラオ1	てきおうりょく	100	きあいのタスキ	100	アクアジェット	100
ダルマッカ1	はりきり	100	しろいハーブ	100	ばかぢから	100
ダルマッカ1	はりきり	100	しろいハーブ	100	まもる	100
ダルマッカ1	はりきり	100	しろいハーブ	100	れいとうパンチ	100
ダルマッカ1	はりきり	100	しろいハーブ	100	フレアドライブ	100
バチュル	ふくがん	100	きあいのタスキ	100	いとをはく	100
バチュル	ふくがん	100	きあいのタスキ	100	いやなおと	100
バチュル	ふくがん	100	きあいのタスキ	100	ふいうち	100
バチュル	ふくがん	100	きあいのタスキ	100	むしのていこう	100
テッシード	てつのトゲ	100	しんかのきせき	100	てっぺき	100
テッシード	てつのトゲ	100	しんかのきせき	100	はたきおとす	100
テッシード	てつのトゲ	100	しんかのきせき	100	まもる	100
テッシード	てつのトゲ	100	しんかのきせき	100	やどりぎのタネ	100
ジヘッド	はりきり	100	しんかのきせき	100	かみくだく	100
ジヘッド	はりきり	100	しんかのきせき	100	げきりん	100
ジヘッド	はりきり	100	しんかのきせき	100	こおりのキバ	83.3
ジヘッド	はりきり	100	しんかのきせき	100	ばかぢから	100
ジヘッド	はりきり	100	しんかのきせき	100	ほのおのキバ	16.7
ヤンチャム	きもったま	100	しんかのきせき	100	ともえなげ	100
ヤンチャム	きもったま	100	しんかのきせき	100	まもる	100
ヤンチャム	きもったま	100	しんかのきせき	100	ドレインパンチ	100
ヤンチャム	きもったま	100	しんかのきせき	100	ビルドアップ	100
シルヴァディ5	ARシステム	100	ロックメモリ	100	つるぎのまい	100
シルヴァディ5	ARシステム	100	ロックメモリ	100	アイアンヘッド	100
シルヴァディ5	ARシステム	100	ロックメモリ	100	サイコファング	100
シルヴァディ5	ARシステム	100	ロックメモリ	100	マルチアタック	100
シルヴァディ15	ARシステム	100	ドラゴンメモリ	100	くさのちかい	100
シルヴァディ15	ARシステム	100	ドラゴンメモリ	100	だいばくはつ	100
シルヴァディ15	ARシステム	100	ドラゴンメモリ	100	つるぎのまい	100
シルヴァディ15	ARシステム	100	ドラゴンメモリ	100	まもる	100
ジャランゴ	ぼうおん	100	しんかのきせき	100	まもる	100
ジャランゴ	ぼうおん	100	しんかのきせき	100	アイアンヘッド	93.8
ジャランゴ	ぼうおん	100	しんかのきせき	100	ドラゴンクロー	6.3
ジャランゴ	ぼうおん	100	しんかのきせき	100	ドレインパンチ	100
ジャランゴ	ぼうおん	100	しんかのきせき	100	ビルドアップ	100
ヒバニー	リベロ	100	こだわりハチマキ	100	たいあたり	14.3
ヒバニー	リベロ	100	こだわりハチマキ	100	とびはねる	85.7
ヒバニー	リベロ	100	こだわりハチマキ	100	とびひざげり	98.4
ヒバニー	リベロ	100	こだわりハチマキ	100	なきごえ	14.3
ヒバニー	リベロ	100	こだわりハチマキ	100	ふいうち	98.4
ヒバニー	リベロ	100	こだわりハチマキ	100	ブレイズキック	85.7
ラビフット	リベロ	100	いのちのたま	100	すてみタックル	83.3
ラビフット	リベロ	100	いのちのたま	100	とびひざげり	83.3
ラビフット	リベロ	100	いのちのたま	100	とんぼがえり	16.7
ラビフット	リベロ	100	いのちのたま	100	ふいうち	16.7
ラビフット	リベロ	100	いのちのたま	100	ダストシュート	100
ラビフット	リベロ	100	いのちのたま	100	フレアドライブ	100

今回はSQL書いたほうが早そうでしたが、こういうデータが簡単にとれるのでMetabaseは便利ですね。

追記

とくせい(もしくはもちもの)だけ途中で変えてわざは同じってパターンもありそうなので、フィルターを追加した方が良さそうですね。
ドラメシヤはこんな感じなので、使ってる人が同じに見えました。

ドラメシヤ	92.3	のろわれボディ	100	きあいのタスキ	100	てだすけ
ドラメシヤ	92.3	のろわれボディ	100	きあいのタスキ	100	でんこうせっか
ドラメシヤ	92.3	のろわれボディ	100	きあいのタスキ	100	でんじは
ドラメシヤ	92.3	のろわれボディ	100	きあいのタスキ	100	まとわりつく
ドラメシヤ	7.7	すりぬけ	100	きあいのタスキ	100	てだすけ
ドラメシヤ	7.7	すりぬけ	100	きあいのタスキ	100	でんこうせっか
ドラメシヤ	7.7	すりぬけ	100	きあいのタスキ	100	でんじは
ドラメシヤ	7.7	すりぬけ	100	きあいのタスキ	100	まとわりつく

ポケモンホームのバトルデータ(ランクバトル)のJSONを解析する。

概要

ポケモンホームのバトルデータ、UIがクソすぎるとても癖があるので、自分で加工したいと思いました。
バトルデータの中身は普通のWebページで、中でWeb API的なものが使われているので、自分でこのAPIを叩けばクソみてえな癖のあるUIを使わなくて済む上に検索もできます。いいことしかない。

ちょっとJSONの量が多いので記事を折りたたみます。続きを読むからどうぞ。

Continue Reading

Amazon Dash Buttonの電池交換に挑戦して失敗した。

やっちゃった~~~。失敗しました。

Amazon Dash Buttonを2つ持っているのですが、片方のバッテリー残量が10%を切っていたので電池を交換することにしました。
色々参考になるページがあります。ありがたいです。
Amazon Dash Buttonの電池が切れたので交換した - にるぽっぽ
アマゾンダッシュボタンを分解する。 - まず分解。

マイナスドライバで穴をあけて、そこから梃子でフタを剥がしました。

何気ないマイナスドライバが基板を傷つけた。

何気ないマイナスドライバが基板を傷つけた

あけた穴が基板を貫通していました。愚かですね。フタの境目に穴を開けるのではなく、底の方にカッターで切れ目を入れてマイナスドライバを差し込めばこんなことにはならなかったです。
モニタの入力端子切り替えに使っているボタンだったのですが、無いとめちゃくちゃ不便なので、AWS IoTボタンより手頃な値段の代替機がほしいところです。

いくつか条件がありますが、Amazon Dash Buttonはサービス停止後もまだ使える代物なので、復旧させてみたい方は以下の記事を読んでみてください。
Wi-Fiに繋がらないAmazon Dash Buttonを復旧させて出勤ダッシュボタンを作る。 - Qiita

ARRISのケーブルモデムの脆弱性(2015年発見)を2020年に知った話。

今NURO光がアツイですね。
NURO光はセキュリティ的にやばいって話 (安全に使うための方法) - Qiita
NURO光、今の家に引っ越してきたときに契約を検討してたのですが、工事の前段階になって業者と一切連絡取れなくなって、結局そのまま契約できませんでした。
光回線が開通するまで仮でCATVのインターネットサービスを契約したのですが、支障なく使用できるレベルだったので、未だにCATVを使い続けています。

ARRISという会社のケーブルモデムがレンタルされまして、その下に自分たちで用意したルータ接続して使っています。そういえばケーブルモデムのセキュリティってどうなってんのかなぁと思って調べてみたら、なかなかすごいのがみつかりました。
ARRIS Cable Modem Has a Backdoor in the Backdoor | Hacker News
w00tsec: ARRIS Cable Modem has a Backdoor in the Backdoor

ARRIS password of the day is a remote backdoor known since 2009. It uses a DES encoded seed (set by the ISP using the arrisCmDoc30AccessClientSeed MIB) to generate a daily backdoor password. The default seed is MPSJKMDHAI and guess what – many ISPs won’t bother changing it at all.

いうてもうシード変更してくれてるでしょと思ったら変更されてなかったし、普通にコンソールに入れてめちゃくちゃ笑いました。やべえ。ファームウェアのバージョンも最新じゃないし(多分デフォルト)対応してほしいのでCATVに問い合わせました。NURO光馬鹿にできなかった。
一応グローバルIPからコンパネに入れないことは確認したけど不安ですね…。ちなみにCATV契約したのは2015年をとっくに越えたあとだったので、なんでこんなことになってるかは知らないです。

2020/06/02 追記

CATVの会社に問い合わせた結果が返ってきました。
問題は把握済みで、外部からのルートは塞いであるのと、ファームウェアはあえてバージョンを上げていないとのことでした。
外からいじられて困る項目は全部無効化しといたのでとりあえずは大丈夫かな~と思っています。

ポケモンホームのバトルデータをPCのブラウザで表示する。

ポケモンホームという最高にUIと機能が終わってるアプリがあるのですが、ついにランクバトルとインターネット大会の統計情報が見られるようになりました。
バトルデータの内容はWebViewで表示されています。
ただUIが終わっていて癖があって死ぬほど操作しづらいのと、バグっててページ送りができないため、素のブラウザで情報を見ることにします。

どちらもログインなしで参照できます。

  • ランクバトル
    • https://resource.pokemon-home.com/battledata/rankmatch_detail.html
  • これまでに開催された大会
    • https://resource.pokemon-home.com/battledata/internetcompetition_list.html

タイトルがRankumatchなんですが大丈夫なんでしょうか。ほんと心配になる。

認証系も突破できそうなのですが、詳細書くのも良くないのでここでは言及しません。

URLの調査にFiddlerを使いました。やっぱり便利ですね。
早くブラウザ版を公開してほしいのと、このレベルでお金とるのマジでやめてほしいな~って思いました。
名探偵ピカチュウの地上波放送に剣盾のCM挟むのほんとずるいですね。