Steam Web API で求められる account_id とは
Steam Web API の一覧をみていると、必須 paramter に account_id というのが結構でてきます。
これは Steam ID でも API KEY でもないのですが、パッと探しても情報がでてきずらいのでメモしておきます。
※出典: https://dev.dota2.com/showthread.php?t=47115&page=27&p=312817&viewfull=1#post312817
以上。
これは Steam ID でも API KEY でもないのですが、パッと探しても情報がでてきずらいのでメモしておきます。
account_id とは
「32-bit account ID」 とか 「STEAMID32」とか呼ばれていますが、要するに
- STEAM ID が 64-bit の ID
- STEAM ID の 32-bit 版 が account_id
ということです。
生成方法
で、その STEAMID64 と STEAM32 を相互変換する式があって、その方法がこちら。
- STEAMID64 - 76561197960265728 = STEAMID32
- STEAMID32 + 76561197960265728 = STEAMID64
- OR
- STEAMID32 = The right-most 32-bits of STEAMID64
- STEAMID64 = concatenate("00000001000100000000000000000001", STEAMID32);
出典: https://dev.dota2.com/showthread.php?t=58317
上記は、64-bit の数値を扱える場合。
そうでない場合は、もうちょっと頑張る必要があるとのこと(試していません)。
define("STEAM_ID_UPPER_32_BITS", "00000001000100000000000000000001");
// gets the lower 32-bits of a 64-bit steam id
function GET_32_BIT ($ID_64) {
$upper = gmp_mul( bindec(STEAM_ID_UPPER_32_BITS) , "4294967296" );
return gmp_strval(gmp_sub($ID_64,$upper));
}
// creates a 64-bit steam id from the lower 32-bits
function MAKE_64_BIT ( $ID_32, $hi = false ) {
if ($hi === false) {
$hi = bindec(STEAM_ID_UPPER_32_BITS);
}
// workaround signed/unsigned braindamage on x32
$hi = sprintf ( "%u", $hi );
$ID_32 = sprintf ( "%u", $ID_32 );
return gmp_strval ( gmp_add ( gmp_mul ( $hi, "4294967296" ), $ID_32 ) );
}
GitHub に相互変換のソースもありました。
https://gist.github.com/almirsarajcic/4664387
https://gist.github.com/almirsarajcic/4664387
以上。