Algernop K.
Algernop K.

Reputation: 477

Getting all from json api array using php

I wanna improve on how to fetch data from an API. In this case I want to fetch every app-id from the Steam API, and list them one per line in a .txt file. Do I need an infinite (or a very high-number) loop (with ++ after every iteration) to fetch everyone? I mean, counting up from id 0 with for example a foreach-loop? I'm thinking it will take ages and sounds very much like bad practice.

How do I get every appid {"appid:" n} from the response of http://api.steampowered.com/ISteamApps/GetAppList/v0001?

<?php
    //API-URL
    $url = "http://api.steampowered.com/ISteamApps/GetAppList/v0001";
    //Fetch content and decode
    $game_json = json_decode(curl_get_contents($url), true);

    //Define file
    $file = 'steam.txt';
    //This is where I'm lost. One massive array {"app": []} with lots of {"appid": n}. 
    //I know how to get one specific targeted line, but how do I get them all?
    $line = $game_json['applist']['apps']['app']['appid'][every single line, one at a time]
    //Write to file, one id per line.
    //Like:
    //5
    //7
    //8
    //and so on
    file_put_contents($file, $line, FILE_APPEND);
?>

Any pointing just in the right direction will be MUCH appreciated. Thanks!

Upvotes: 0

Views: 117

Answers (1)

miken32
miken32

Reputation: 42681

You don't need to worry about counters with foreach loops, they are designed to go through and work with each item in the object.

$file      = "steam.txt";
$game_list = "";
$url       = "http://api.steampowered.com/ISteamApps/GetAppList/v0001";
$game_json = file_get_contents($url);
$games     = json_decode($game_json);

foreach($games->applist->apps->app as $game) {
    // now $game is a single entry, e.g. {"appid":5,"name":"Dedicated server"}
    $game_list .= "$game->appid\n";
}

file_put_contents($file, $game_list);

Now you have a text file with 28000 numbers in it. Congratulations?

Upvotes: 2

Related Questions