2012-07-19 4 views
1

이것은 매우 긴 설명입니다.밸브/스팀 API를 사용하여 여러 ID 변환

나는 스토어를위한 인게임 플러그인이있는 Counter-Strike : Source 서버를 가지고 있습니다. 이 저장소는 MySQL 데이터베이스 (이 인스턴스의 경우 'store')에 데이터를 저장합니다. 상점은 해당 데이터베이스에서 플레이어의 돈을 추적합니다 (테이블 '사용자'의 열 '크레딧'에 있음). 'steam_id'(모든 클라이언트에게 고유 한)를 기반으로 클라이언트를 저장합니다.

'steam_id'의 형식은 STEAM_0 : 0 : 123456789 또는 STEAM_0 : 1 : 12345789입니다.

내 페이지는 데이터베이스에서 상위 1000 명의 사용자를 표시합니다 (크레딧별로 정렬).

내 문제점 :이 추한 steam_id를 실제 이름으로 변환해야합니다.

나는 지금의

: API 문서에 따르면

Steam API Documentation

, 나는 내가 API를 쿼리 할 때 '지역 사회의 ID를'를 사용합니다. 둘 이상의 사용자를 얻으려는 경우 쉼표를 사용하여 GET. 자열에서 커뮤니티 ID를 분리 할 수 ​​있습니다.

(http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=APIKEY steamids = & & 7656119796043553076561197960435531 형식 = JSON)

I는 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'에서 직진 가겠어요?

코드 및/또는 제안을 제공 할 수있는 사람에게 감사드립니다!

답변

1

이 주소는 another Stack Overflow question의 변종입니다. 더 실용적이며 현지화되지는 않았지만 이에 대한 답변도 있습니다.

귀하의 의견 steam_id$INPUT이며, 최종 출력 배열이 $OUTPUT에 저장되어 있다고 가정하면, 이것은 당신을 변환하는 데 사용할 수있는 기능 foreach 방법이다 steam_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; 
}