Извлечение данных из URL в php не работает в localhost

#php #json #api #session #curl

#php #json #API #сессия #curl

Вопрос:

я хочу получить данные из URL https://data-asg.goldprice.org/dbXRates/USD

итак, я пишу следующий код

 $curlSession = curl_init();
curl_setopt($curlSession, CURLOPT_URL, 'https://data-asg.goldprice.org/dbXRates/USD');
curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);

$jsonData = json_decode(curl_exec($curlSession));

$item =  $jsonData->items;
$date =  $jsonData->date;
$gold_price = $item[0]->xauPrice;
echo "Gold price on ".$date." is ".$gold_price;
  curl_close($curlSession);
 

Но по какой-то причине это не работает. Пожалуйста, проверьте

Примечание: попытка получить свойство «элементы» не-объекта в C:xampphtdocstest.php в строке 9

Примечание: попытка получить свойство ‘date’ не-объекта в C:xampphtdocstest.php в строке 10

Примечание: попытка получить свойство ‘xauPrice’ не-объекта в C:xampphtdocstest.php в строке 11


из goldprice.org мы получаем золото-> доллар США-> унция = 1,275.67 . это значение мы выводим, используя приведенный выше код. Но мне нужно золото-> USD-> g = 41.01. Пожалуйста, проверьте goldprice.org вы поймете

Комментарии:

1. Не работает как ?

2. я обновил вопрос. Пожалуйста, проверьте сейчас

3. Дамп $jsonData , дамп curl_exec($curlSession) .

4. paiza.io/projects/lv217ZqNqE7H9jX5wKd2Lg Я запустил его в онлайн-среде разработки, и он работает нормально

5. не могли бы вы также проверить это в localhost

Ответ №1:

Используйте это:

 $curlSession = curl_init();
curl_setopt($curlSession, CURLOPT_URL, 'https://data-asg.goldprice.org/dbXRates/USD');
curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, 0);
$output = curl_exec($curlSession);
$jsonData = json_decode($output);
var_dump($jsonData);
$item =  $jsonData->items;
$date =  $jsonData->date;
$gold_price = $item[0]->xauPrice;
echo "Gold price on ".$date." is ".$gold_price;
curl_close($curlSession);
 

У вас нет:

 curl_setopt($curlSession, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, 0);
 

Комментарии:

1. хорошее решение, но не могли бы вы, пожалуйста, помочь нам получить текущую цену в gm

2. Это валюта?

3. цена золота в граммах

4. Как обстоят дела сейчас? за килограмм? Какое преобразование вам нужно?

5. из goldprice.org мы получаем золото-> доллар США-> унция = 1,275.67 . это значение мы выводим, используя приведенный выше код. Но мне нужно золото-> доллар США-> g = 41,01 . Пожалуйста, проверьте goldprice.org вы поймете

Ответ №2:

Вы можете преобразовать свой ответ в массив и получить доступ к нужному элементу

 $jsonData = json_decode(curl_exec($curlSession));
 

заменить на

 $jsonData = json_decode(curl_exec($curlSession), true);
 

Параметр true преобразует объект в массив.

 print_r($jsonData);

Array
(
 [ts] => 1555669932973
 [tsj] => 1555669926185
 [date] => Apr 19th 2019, 06:32:06 am NY
 [items] => Array
    (
        [0] => Array
            (
                [curr] => USD
                [xauPrice] => 1275.67
                [xagPrice] => 14.905
                [chgXau] => 3.77
                [chgXag] => -0.032
                [pcXau] => 0.2964
                [pcXag] => -0.2142
                [xauClose] => 1271.9
                [xagClose] => 14.937
            )

    )

)
 

Ответ №3:

Попробуйте это:

 <?php
$json = file_get_contents("https://data-asg.goldprice.org/dbXRates/USD");
$jsonData = json_decode($json);
$items = $jsonData->items;
$item = $items[0];
$date =  $jsonData->date;
$gold_price = $item->xauPrice;

echo "Gold price on ".$date." is ".$gold_price;
 

Ответ №4:

Используйте это:

 $curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://data-asg.goldprice.org/dbXRates/USD",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Cache-Control: no-cache",
    "Postman-Token: 67666a77-d99b-c8fb-f202-5ae0003cfe31"
  ),
));

$response = curl_exec($curl);
$res = json_decode($response);
echo $res->date.' ';
$price = $res->items;
echo $price[0]->xauPrice;
$err = curl_error($curl);
curl_close($curl);