0. まえがき
以前は以下のようなURLにアクセスすると自動でリダイレクトし、スキンが表示されたのですが、
http://skins.minecraft.net/MinecraftSkins/yuta0801.png
いつからか、使用できなくなりました。
なので、そのリダイレクト先でもあるURLを取得する方法を残して置こうかと思います
この記事での、URLや返ってくるデータは全て、僕が所有するマインクラフトアカウント(id:yuta0801, uuid:bc7fd64b669e45d48667b77142557036)を対象に実行したものです。使用する場合は適宜読み替えてください。
1. ユーザー名からUUIDを取得する
現段階で使用できる公式のAPIをくまなく調べたのですが、ユーザー名から直接スキンを取得する方法がなかったので、まずはUUIDを取得しなければいけません。
UUIDを取得すると言ってもそんなに難しいことではなく以下のURLにアクセスすると、
https://api.mojang.com/users/profiles/minecraft/yuta0801
IDを含んだJSONを得ることができます。
{
"id": "bc7fd64b669e45d48667b77142557036",
"name": "yuta0801"
}
2. ユーザーデータを取得する
次に、先程得たUUIDを使用してユーザーのデータを取得していきます。
これも先程と同じようにUUIDを含めたURLにアクセスするとユーザーデータがbase64エンコードされた値が入ったJSONが帰ってきます。なぜbase64エンコードした値を返すか謎
https://sessionserver.mojang.com/session/minecraft/profile/bc7fd64b669e45d48667b77142557036
このJSONの.properties[0].valueに入ってるのがbase64エンコードされたJSONです。
てっきり画像データかと思って何十分も画像にデコードしようと頑張ってましたorg
なんでJSONの中にbase64エンコードしたJSONを入れるんだよ💢
{
"id": "bc7fd64b669e45d48667b77142557036",
"name": "yuta0801",
"properties": [
{
"name": "textures",
"value": "eyJ0aW1lc3RhbXAiOjE1MjA2NzE0MzQ3MDMsInByb2ZpbGVJZCI6ImJjN2ZkNjRiNjY5ZTQ1ZDQ4NjY3Yjc3MTQyNTU3MDM2IiwicHJvZmlsZU5hbWUiOiJ5dXRhMDgwMSIsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9kNTljNWNlZDYwNGY2Y2Y3NzE1ZGEzNDI5M2M4NWM4ZDlmYjY0NDRlZjFlM2JmNWY5Y2I0Zjk2ZWNkNDk1In19fQ=="
}
]
}
ちなみにbase64をデコードすると以下のようなJSONになります
{
"timestamp": 1520669872059,
"profileId": "bc7fd64b669e45d48667b77142557036",
"profileName": "yuta0801",
"textures": {
"SKIN": {
"url": "http://textures.minecraft.net/texture/d59c5ced604f6cf7715da34293c85c8d9fb6444ef1e3bf5f9cb4f96ecd495"
}
}
}
.textures.SKIN.urlが一番最初のURL(現在は使用不可)にアクセスしたときのリダイレクト先のURLを取得できるようになりました。めでたしめでたし。なんであれを削除したんだよ
5. 最後に
ぶっちゃけ、こんな面倒なことをしなくてもサードパーティのAPIを使えば一発で顔部分を切り抜いた画像や、全身の立体画像などを取得できるので、わざわざこんな面倒なことをする必要はないです、はい。
4. 参考資料
Mojang API - wiki.vg - http://wiki.vg/Mojang_API
crafatar/crafatar: A blazing fast API for Minecraft faces - https://github.com/crafatar/crafatar