Как я могу объединить 2 .json URL? - PullRequest
0 голосов
/ 07 октября 2018

Какую функцию я могу использовать для соединения двух данных .json?

По существу у меня есть:

https://api.coinmarketcap.com/v2/ticker/?limit=1&start=1 и https://api.coinmarketcap.com/v2/ticker/?limit=1&start=2

Я хочу подключитьсегмент данных вместе, так что он выглядит как сцепленный. Какую функцию php я могу использовать?Так что я могу узнать об этом.

$sources = array(1,2);
foreach ($sources as $sourcenum) {
  $source = "https://api.coinmarketcap.com/v2/ticker/?limit=2&start=".$sourcenum;
  $source_json = file_get_contents($source);
  $source_array = json_decode($source_json, TRUE);
  #I'm stuck here. How would I copy all the data and chuck it into my own file  called www.example.com/concatenated_data
#then keep concatenating in the next loop 
}

Тогда в моих concatenated_data это будет выглядеть так:

{
    "data": {
        "1": {
            "id": 1, 
            "name": "Bitcoin", 
            "symbol": "BTC", 
            "website_slug": "bitcoin", 
            "rank": 1, 
            "circulating_supply": 17309562.0, 
            "total_supply": 17309562.0, 
            "max_supply": 21000000.0, 
            "quotes": {
                "USD": {
                    "price": 6576.52005708, 
                    "volume_24h": 3304276557.4679, 
                    "market_cap": 113836681672.0, 
                    "percent_change_1h": -0.52, 
                    "percent_change_24h": -0.33, 
                    "percent_change_7d": -0.52
                }
            }, 
            "last_updated": 1538915062
        }, 
        "1027": {
            "id": 1027, 
            "name": "Ethereum", 
            "symbol": "ETH", 
            "website_slug": "ethereum", 
            "rank": 2, 
            "circulating_supply": 102421710.0, 
            "total_supply": 102421710.0, 
            "max_supply": null, 
            "quotes": {
                "USD": {
                    "price": 223.312150803, 
                    "volume_24h": 1527251449.77882, 
                    "market_cap": 22872012419.0, 
                    "percent_change_1h": -0.14, 
                    "percent_change_24h": -1.19, 
                    "percent_change_7d": -4.63
                }
            }, 
            "last_updated": 1538915014
        }
    }, 
}

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Это должно делать то, что вы хотите, если я правильно понял, что вы хотите:

$sources = array(1,2);
$target = ["data": []]; // pre-build the target output as blueprint
foreach ($sources as $sourcenum) {
  $source = "https://api.coinmarketcap.com/v2/ticker/?limit=2&start=$sourcenum";
  $source_json = file_get_contents($source);
  $source_array = json_decode($source_json, TRUE);
  // add the (first and only?) found data item with it's key to the pre-built target
  $keys = array_keys($source_array['data']);
  $target['data'][$keys[0]] = $source_array['data'][$keys[0]];
}
echo json_encode($target);

// OUTPUT
{
    "data": {
        "1027": {
            "id": 1027,
            "name": "Ethereum",
            "symbol": "ETH",
            "website_slug": "ethereum",
            "rank": 2,
            "circulating_supply": 102421710,
            "total_supply": 102421710,
            "max_supply": null,
            "quotes": {
                "USD": {
                    "price": 223.378253997,
                    "volume_24h": 1539026622.1182,
                    "market_cap": 22878782821,
                    "percent_change_1h": -0.09,
                    "percent_change_24h": -1.13,
                    "percent_change_7d": -4.6
                }
            },
            "last_updated": 1538915312
        },
        "1": {
            "id": 1,
            "name": "Bitcoin",
            "symbol": "BTC",
            "website_slug": "bitcoin",
            "rank": 1,
            "circulating_supply": 17309562,
            "total_supply": 17309562,
            "max_supply": 21000000,
            "quotes": {
                "USD": {
                    "price": 6577.6247973,
                    "volume_24h": 3306420413.0069,
                    "market_cap": 113855804242,
                    "percent_change_1h": -0.5,
                    "percent_change_24h": -0.32,
                    "percent_change_7d": -0.5
                }
            },
            "last_updated": 1538915245
        }
    }
}

Я оставил метаданные на данный момент, потому что неясно, как бы вы хотели поступить с этим.

0 голосов
/ 07 октября 2018

Это то, что вы хотите, просто создайте переменную массива $result и отправьте на нее все ответы.Вот и все:)

<code><?php
$sources = array(1,2);
$result = [];
foreach ($sources as $sourcenum) {
  $source = "https://api.coinmarketcap.com/v2/ticker/?limit=2&start=$sourcenum";
  $source_json = file_get_contents($source);
   $result[] = json_decode($source_json, TRUE); // push the response to $result
}

echo '<pre>';
print_r($result); // just for debug purpose
echo '
';echo json_encode ($ result);?>

Отредактировано: согласно новым требованиям OP

<?php
$sources = array(1,2);
$result = $required =  [];
foreach ($sources as $sourcenum) {
    $source = "https://api.coinmarketcap.com/v2/ticker/?limit=2&start=$sourcenum";
    $source_json = file_get_contents($source);
    $source_array = json_decode($source_json, TRUE);
    $result[] = $source_array['data'];
}
//print_r($result); // comment out to see what is inside it
foreach($result as $k=>$v){
    foreach($v as $key=>$value){
        $required[$value['name']] = $value['quotes']['USD']['price'];
    }
}
//print_r($required); // comment out to see what is inside it
$mydata=json_encode($required);
file_put_contents("mydata.txt",$mydata); // assumet mydata.txt is on the same directory
?>
...