マインクラフトのプレイヤー名からスキン画像取得 by Python

マインクラフトで次のことがしたい。

  • あるプライヤー名(MCID)に対して、
  • そのUUIDをMineCraft APIから調べる
  • そこからスキン画像を取得する

それにはMojang APIを使うのが簡単です。

ここではAPI呼び出しによって、
マイクラプレイヤー名からスキン取得する方法

その具体的方法+pythonコード例を紹介します。

1.プレイヤー名をUUIDに変換する

例えば次のプレイヤー名がいたとしましょう。

プレイヤー名(MCID) : CutePikapu

このプレイヤー名は任意に変更できます。
そしてマインクラフト内で表示される名前です。

これを不変なUUIDに変換する必要があります。

▼ そのためのMojangAPIがこれ

https://api.mojang.com/users/profiles/minecraft/<username>

リファレンス : https://wiki.vg/Mojang_API#Username_to_UUID

▼ <username>にあるプレイヤー名を渡した結果

この <username>  にはマイクラ内のプライヤー名を渡してください。MCIDとも呼ばれ、マイクラでプレイヤーの上に表示される名前です。

取得に成功すると "975dbd9156fc43b59820d6f40f66577c"  のようなUUIDが返ってきます。これはプレイヤー名が変更されても変わらない不変IDです。

PythonによるUUIDの取得コード例

ちなみにコード的に取得する方法について。

Pythonなら以下のようにAPI呼出が可能です。

▼ その変換コードがこちら(Python)

ブラウザで実行するのと同じ結果が返ってきます。

ただしJavaScriptではCORSポリシーエラーが出るため、fetch APIなどでMojang APIを呼び出せないことに注意が必要ですね。(CORSエラーの詳細 : https://pisuke-code.com/js-blocked-by-cors-policy-error/

Python以外でも簡単にUUID取得ができます。

2.UUIDからプロフィール情報を取得する

プレイヤー名からUUIDへの変換は成功。

次はUUIDからプロフィールを取得します。

▼ そのために必要なMojang APIがこれです。

https://sessionserver.mojang.com/session/minecraft/profile/<uuid>

リファレンス : https://wiki.vg/Mojang_API#UUID_to_Profile_and_Skin.2FCape

▼ 例えばこういうJSONレスポンシブが返る

上記APIの <uuid>  には先ほど取得した "975dbd9156fc43b59820d6f40f66577c"  みたいな32文字のIDを渡せばOKです。上記のレスポンスが返ってくるはず。

そして重要なのが "value"  の値です。

ここには意味不明な文字列が並んでますが、それはBase64エンコードされたJSON文字列です。そこにスキン画像のURLなども含まれてます。

3.Base64デコードしてスキン画像のURL取得

それでは目的のスキン画像の取得です。

先ほどのレスポンスの以下の部分に含まれてます。

▼ Base64エンコードされている

これはBase64化されたJSON文字列です。

試しにデコードできるツールを使いました。

▼ ここでは以下のオンラインツールを使用

▼ 上記の "ewogIC..." を貼付けしてデコード

Mojang APIから返ってきたプレイヤーのテクスチャ情報はBase64エンコードされている。元に戻すには画像のようなツールを使えばOK

▼ デコードされたプロフィールのJSON例

上記JSONの中の texture => SKIN に注目です。

ここに url というキーがありますが、
それがスキン画像へのリンクになってます。

▼ 実際に開くとスキンの展開図画像が手に入る

実際にプレイヤー名から取得できたスキン画像(展開図)の例

プレイヤー名からスキン画像の取得に成功!

大変だけどブラウザ上でも実行できる手順です。

ここまでの手順をPythonコードでまとめる

ついでに手順をPythonコード化してみます。

▼ このようなコード

コードに書き起こすと面倒な手順です。

以上、マインクラフトでスキン取得でした。

プレイヤー名からスキン取得は簡単、
数回のAPI呼び出しだけでゲットできます。