1

したがって、これは非常に長い説明です。

ストア用のゲーム内プラグインを備えた Counter-Strike: Source サーバーがあります。このストアは、そのデータを MySQL データベースに保存します (このインスタンスでは、'store' という名前です)。ストアは、そのデータベース (テーブル「users」の列「credits」) でプレーヤーのお金を追跡します。「steam_id」(すべてのクライアントに固有)に基づいてクライアントを保存します

「steam_id」の形式は (例): STEAM_0:0:123456789 OR STEAM_0:1:12345789 です。

私が持っている私のページには、データベースから上位 1000 人のユーザーが表示されます (クレジットでソートされています)。

私の問題:これらの醜い steam_id を実際の名前に変換する必要があります。

私が今いる場所:

Steam API ドキュメント

API ドキュメントによると、API をクエリするときは「コミュニティ ID」を使用する必要があります。複数のユーザーを取得する場合は、コンマを使用して GET 文字列内のコミュニティ ID を区切ることができます。

(http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=APIKEY&steamids= 76561197960435530,76561197960435531 &format=json)

steam_id を API 受け入れ可能な ID に変換する関数があります。

function SteamID2CommunityID($steam_id){
    $parts = explode(':', str_replace('STEAM_', '' ,$id));
    $communityID = bcadd(bcadd('76561197960265728', $parts['1']), bcmul($parts['2'], '2'));
    return $communityID;
}

これで、カンマ区切りのコミュニティ ID のリストを次のように作成できます。

while ($row = $mysqli->fetch_assoc($request)) {
      $ids .= ',' . SteamID2CommunityID($row['steamid']) . ',';
}

ここで注意が必要なのは、これらすべての値が 1 つの JSON 配列で返されることです。何かを追加する必要があるため、データを表示するときに、「steam_id」を「名前」に直接変換できます (既存の配列を使用)。

出力の例 (ほとんどのキーと値は読みやすいように削除されています)

    Array (
[response] => Array
    (
        [players] => Array
            (
                [0] => Array
                    (
                        [steamid] => 76561198010207577
                        [personaname] => [rGA] Stainbow
                    )

                [1] => Array
                    (
                        [steamid] => 76561197966653036
                        [personaname] => |K}{R|Mastarious(MNBH)
                    )

            )

    )

   )

繰り返しになりますが、「steam_id」から名前に直接移行するにはどうすればよいでしょうか?

コードや提案を提供できる人に感謝します!

4

1 に答える 1

1

これは、より実用的でローカライズされていない別の Stack Overflow questionの変形複製ですが、これに答えたほうがよいでしょう。

steam_id入力が$INPUTであり、最終的な出力配列が に格納されていると仮定すると、これは に変換するために使用できる$OUTPUT機能的アプローチです。foreachsteam_idpersonaname

/**
 * Convert steam_id to personaname
 * @returns STRING The name associated with the given steam_id
 *          BOOL   FALSE if no match was found
 */
function steamID_to_name($INPUT, $OUTPUT)
{
    // This gets the relevant part of the API response.
    $array = $OUTPUT['response']['players'];

    // Using your function to convert `steam_id` to a community ID
    $community_id = SteamID2CommunityID($INPUT);

    // Linear search
    foreach ($array as $array_item)
    {
        // If a match was found...
        if ($community_id == $array_item['steamid'])
            // Return the name
            return $array_item['personaname'];
    }

    // If no match was found, return FALSE.
    return false;
}
于 2012-07-20T06:52:38.437 に答える