0

JSONの結果から選択した情報をPHP経由でMySQLに入れることを目指しています。私が抱えている特定の問題は、単純なリスト形式ではないため、JSON 結果から特定の情報にアクセスすることです。これは、私が話している種類の構造のスクリーンショットで、関心のある情報が強調表示されています。

悲しいことに、私は画像を投稿するのに十分な評判を持っていないので、ここでは imgur で再ホストされています。

ここに画像の説明を入力

['streams'] の下に 100 個のストリームのリストが表示されます。これらの各結果から、強調表示された情報を取得して、MySQL テーブルに配置します。

単純な JSON ファイルと json_decode の簡単なアプリケーションにかなり慣れています

    $result = json_decode($json);

    foreach ($result as $key => $value)

おそらく深度変数を使用する必要があると思いますか?しかし、それに関する多くの情報を見つけるのは難しいと感じています。

誰かが私に助けを与えたり、良い情報源を教えてくれたりすることができれば(私は何かを見つけるのに苦労しているので)、それは大歓迎です.

これ以上の情報が役立つ場合はお知らせください。追加します。

編集: json リクエストへのリンク: https://api.twitch.tv/kraken/streams?limit=2/

<?php
    //import data from twitch
    $json = json_decode(file_get_contents("https://api.twitch.tv/kraken/streams?limit=100/"), true);

    //create a DB connection
    $con = mysql_connect("CONNECTION INFO :D");
    mysql_connect_db('NOPE', $con);


    $result = json_decode($json);
    foreach ($result as $key => $value) {
        if ($value) {


            mmysql_query("INSERT INTO twitchinfo (viewers, status, display_name, game, delay, name) VALUES ($value->viewers, $value->status,$value->display_name,$value->game,$value->delay,$value->name)")or die(mysql_error());
        }
        // end connection
        mysql_close($con);
    }
    ?>
4

3 に答える 3

2

この URL をブラウザで開く -

https://api.twitch.tv/kraken/streams?limit=100/

JSON を提供します。私はそれをコピーしました -

http://www.jsoneditoronline.org/

ストリーム_linksキーがあることがわかりました。

あなたの問題が懸念されているので、これを試してください -

$result = json_decode($json);
if( isset( $result['streams'] )){
    $streams = $result['streams'];
    foreach($streams as $stream) {
        $viewers = $stream->viewers;
        $status = $stream->channel->status;
        $display_name = $stream->channel->display_name;
        $game = $stream->channel->game;
        $delay = $stream->channel->delay;
        $name = $stream->channel->name;
        $sql = "INSERT INTO twitchinfo (viewers, status, display_name, game, delay, name) VALUES ($viewers, \"$status\", \"$display_name\", \"$game\", $delay, \"$name\")";
        mysql_query($sql)or die(mysql_error());         
    }
}
于 2013-11-07T13:57:05.177 に答える
2

JSONオブジェクトは基本的に次のようなものです...

[
    links: {
        self: http://example.com,
        next: http://example.com/foo,
    },
    streams: [
            {
                channel: {
                    foo: 'bar'
                },
                one: 'one',
                somethingElse: 'Something else',
                moreStuff: 'more stuff',
            }
    ]
]

JSON オブジェクトをデコードすると、オブジェクトを表す PHP オブジェクト/配列が残ります。

$x = json_decode('[1,2,3]') 

あなたに同じ配列を与えるつもりです...

$x= array(1,2,3)

表示した JSON を読み込んで実行すると、次のようになります。

foreach ($result as $key => $value)

$result->linksこれは、およびにアクセスすることと同じ$result->streamsです。それぞれに、より多くのデータが含まれています。

私の例でチャネルから「foo」要素を取得したい場合は、次のようにします。

$streams = $result->streams //Get the streams array
$stream = $streams[0]       //Get the first stream object
$channel = $stream->channel //Get the channel object
$foo = $channel->foo        //Get the value 'bar' out of the foo property.

構造が予測可能である限り (実際にそうです)、ストリームは単なる配列であるため、ストリームを反復処理できます。

$streams = $result->streams //Get the streams array
foreach ($streams as $stream) {
    $channel = $stream->channel //Get the channel object
    $foo = $channel->foo        //Get the value 'bar' out of the foo property of every stream.
}
于 2013-11-07T13:54:53.080 に答える
0

あなたはこれを行うことができます:

$values = array();
$result = json_decode($json);

foreach($result['streams'] as $stream) {
    array_push(
        $values,
        array(
            'viewers'      => $stream['viewers'],
            'status'       => $stream['channel']['status'],
            'display_name' => $stream['channel']['display_name'],
            'game'         => $stream['channel']['game'],
            'delay'        => $stream['channel']['delay'],
            'name'         => $stream['channel']['name'],
        )
    );
}

または:

foreach($result['streams'] as $stream) {
    $sqlQuery= "INSERT INTO TABLE(viewers, status, display_name, game, delay, name) VALUES ($stream['viewers'], $stream['channel']['status'], $stream['channel']['display_name'], $stream['channel']['game'], $stream['channel']['delay'], $stream['channel']['name']);"
    //dbHandler->executeQuery($sqlQuery);
}
于 2013-11-07T13:48:19.870 に答える