从steamapi(json)抓取数据并将其导入mysql

时间:2014-01-21 05:55:54

标签: php mysql json

我无法弄清楚如何将数据从远程json(steamapi)导入MySql。

<?php 
$con = mysql_connect("localhost","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXX");
mysql_select_db('XXXXXXXXXXXXXXXXX',$con);

$url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXXX&steamids=76561198033811393";
$json = file_get_contents($url);
$result = json_decode($json);
foreach($result as $key => $value)
{
    if($value)
    {
        mysql_query("INSERT INTO steam (steamid, 
                                        communityvisibilitystate, 
                                        profilestate) 
                                VALUES ($value->steamid,
                                        $value->communityvisibilitystate,
                                        $value->profilestate)");
    }
    mysql_close($con);
}
?>

Steam JSON图片(点击查看完整尺寸): Click to resize

2 个答案:

答案 0 :(得分:0)

使用此

    <?php
        $id = $_GET['id'];
        $key = 'xxx';

        $link = file_get_contents('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=' . $key . '&steamids=76561198033811393&format=json');
        $myarray = json_decode($link, true);

        $result =  $myarray['response']['players'][0];
        echo $result->steamid;
    ?>

如果您获得多个结果,请使用下面的foreach格式

 $result = $myarray['response']['players'];
    foreach($result as $key => $value)
    {
    echo $value->steamid."<br>";
}

答案 1 :(得分:0)

您可以使用$data->response->players阅读每个播放器,然后将其分配到$player,然后您可以直接访问其对象$player->steamid。见下面的例子:

$data = json_decode($json);
foreach($data->response->players as $player)
{
    echo $player->steamid, "\n\n";
}

我还建议您更改您的查询:

$query = sprintf("INSERT INTO steam (steamid,
                                     communityvisibilitystate,
                                     profilestate) VALUES ('%s','%s','%s')",
                mysql_real_escape_string($player->steamid),
                mysql_real_escape_string($player->communityvisibilitystate),
                mysql_real_escape_string($player->profilestate));

防止任何其他问题,如断弦或注射。

SQL部分的结果代码是:

// Build the query
$query = sprintf("INSERT INTO steam (steamid,
                                     communityvisibilitystate,
                                     profilestate) VALUES ('%s','%s','%s')",
                mysql_real_escape_string($player->steamid),
                mysql_real_escape_string($player->communityvisibilitystate),
                mysql_real_escape_string($player->profilestate));

// Perform Query
$insert = mysql_query($query);

// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$insert)
{
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query . "\n";
    echo "------------------\n";
}

鉴于您的实际代码,它将如下所示:

<?php 
$con = mysql_connect("localhost","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXXXXX");
mysql_select_db('XXXXXXXXXXXXXXXXX',$con);

$url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXXX&steamids=76561198033811393";
$json = file_get_contents($url);
$data = json_decode($json);
foreach($data->response->players as $player)
{
    // Build the query
    $query = sprintf("INSERT INTO steam (steamid,
                                         communityvisibilitystate,
                                         profilestate) VALUES ('%s','%s','%s')",
                    mysql_real_escape_string($player->steamid),
                    mysql_real_escape_string($player->communityvisibilitystate),
                    mysql_real_escape_string($player->profilestate));

    // Perform Query
    $insert = mysql_query($query);

    // Check result
    // This shows the actual query sent to MySQL, and the error. Useful for debugging.
    if (!$insert)
    {
        echo 'Invalid query: ' . mysql_error() . "\n";
        echo 'Whole query: ' . $query . "\n";
        echo "------------------\n";
    }
}
mysql_close($con);