Как обновить базу данных истории игр? API Bungie Halo Reach

Ну, я работаю с Bungie's Halo Reach API. Прямо сейчас мой код получит все идентификаторы игр для конкретного игрока.

Я хочу сохранить идентификаторы игр в базе данных mysql, а затем в будущем, если игрок захочет обновить базу данных, скрипт получит только идентификаторы игр, которых еще нет в базе данных.

Скрипт получает самую свежую страницу $iPage = '0'; Тогда если HasMorePages равно true, он получает следующую страницу $iPage++ до тех пор HasMorePages ложно Каждая страница дает 25 идентификаторов игры, последняя страница может иметь меньше.

В общем, я хочу получить идентификаторы игр, которых не было при первом запуске скрипта, без ненужных вызовов API. Как я мог это сделать?

<?php
include_once('sql.php'); // MySQL Connection
include_once('api.php'); // API unique identifer string

$gamertag = 'jam1efoster'; // Gamertag
$variant = 'Unknown'; // Unknown gets all game variants
$iPage = '0'; // 0 is the most recent page

while(!$endPages == true){

    $GetGameHistory = "http://www.bungie.net/api/reach/reachapijson.svc/player/gamehistory/".$apiKey."/".rawurlencode(strtolower($gamertag))."/".$variant."/".$iPage;

    $output = file_get_contents($GetGameHistory);
    $obj = json_decode($output);
    //echo $output;

    $mPages = $obj->HasMorePages;
    if($mPages == false){$endPages = true;}

    foreach($obj->RecentGames as $recentgames) {
        $gameId = $recentgames->GameId;
        //echo $gameId.'<br />';
    }
    //echo $iPage.'<br />';
    $iPage++;
}

?>

1 ответ

Решение

Учитывая, что я понимаю, что ты пытаешься сделать и о чем ты спрашиваешь. Попробуйте этот код:

<?php
include_once('sql.php'); // MySQL Connection
include_once('api.php'); // API unique identifer string

$gamertag = 'jam1efoster'; // Gamertag
$variant = 'Unknown'; // Unknown gets all game variants
$iPage = '0'; // 0 is the most recent page
// get current ids
$result=mysql_query('SELECT ALL CURRENT IDS');// PUT YOUR SQL HERE !
$oldIds=array();
$newIds=array();
while($row=mysql_fetch_array($result))$oldIds[]=$row['id'];// might be different in your scenario
// get all ids, unfortunately
for(;;){
    $GetGameHistory = "http://www.bungie.net/api/reach/reachapijson.svc/player/gamehistory/".$apiKey."/".rawurlencode(strtolower($gamertag))."/".$variant."/".$iPage;
    $output = file_get_contents($GetGameHistory);
    $obj = json_decode($output);
    // get fresh ids
    foreach($obj->RecentGames as $recentgames) {
        if(in_array($recentgames->GameId, $oldIds))continue;// we already have this id
        $newIds[]=$recentgames->GameId;
    }

    if(!$obj->HasMorePages)break;// no more pages? break!
    $iPage++;
}

var_dump($newIds);
?>

Я не знаком с методом, который Bungie может толкать игры к API. Если они заказаны, прокомментируйте. И я пересмотрю свой код. Если они произвольны, то вроде неудачи.

Другие вопросы по тегам