使用阀门/蒸汽API转换多个ID


Using Valve/Steam API to get multiple IDs converted

所以这是一个非常长的解释。

我有一个Counter Strike:Source服务器,里面有一个商店的游戏插件。此存储将其数据保存在MySQL数据库中(对于此实例,名为"store")。该商店在该数据库中跟踪玩家的资金(在"用户"表的"积分"列中)。它基于"steam_id"(每个客户端唯一)存储客户端

"steam_id"的格式为(例如):steam_0:0:123456789或steam_0:1:12345789。

我的页面显示了数据库中排名前1000的用户(按学分排序)。

我的问题:我需要将这些难看的steam_id转换为实际名称。

我现在的位置:

蒸汽API文件

根据API文档,当我查询API时,我必须使用"社区id"。如果我想获得多个用户,我可以在get字符串中使用逗号分隔社区ID。

(http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=APIKEY&蒸汽=7656119796043553076561197960 435531&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']) . ',';
}

现在,对于棘手的部分,所有这些值都返回到一个JSON数组中。我需要添加一些东西,所以当我显示数据时,我可以将"steam_id"直接转换为"name"(使用现有数组)。

输出示例(删除大多数键和值以使其可读)

    Array (
[response] => Array
    (
        [players] => Array
            (
                [0] => Array
                    (
                        [steamid] => 76561198010207577
                        [personaname] => [rGA] Stainbow
                    )
                [1] => Array
                    (
                        [steamid] => 76561197966653036
                        [personaname] => |K}{R|Mastarious(MNBH)
                    )
            )
    )
   )

那么,我该如何从"steam_id"直接变成一个名字呢?

感谢任何能够提供代码和/或建议的人!

这是另一个Stack Overflow问题的变体副本,它更实用,本地化程度更低,但我还是回答这个问题吧。

假设您的输入steam_id$INPUT,而您的最终输出数组存储在$OUTPUT中,这就是可以用于将steam_id转换为personaname:的函数foreach方法

/**
 * 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;
}