#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);