Как сбрасывать результаты в MySql db? Специально декодируйте gzip и проанализируйте его до массива HP, а затем сбрасывайте в db.
<?php
$connection = mysqli_connect("localhost","root","Aruns@cal");
if (!$connection) {
die("Database connection failed: " . mysqli_error());
}
$db_select = mysqli_select_db($connection, "arunslocal");
if (!$db_select) {
die("Database selection failed: " . mysqli_error());
}
$params = http_build_query(array(
"api_key" => "xxxxxxx",
"format" => "JSON"
));
$result = file_get_contents(
'https://www.parsehub.com/api/v2/projects/tmnx0bN0Ty0U/last_ready_run/data?'.$params,
false,
stream_context_create(array(
'http' => array(
'method' => 'GET'
)
))
);
echo "1";
$arr = json_decode($result, true);
echo "2";
foreach((array)$arr as $item){
echo "3";
$name = $item['name'];
$value = $item['value'];
echo "4";
$sql = "INSERT INTO 'arunslocal'.'scrap_yielddata'( 'yield_name', 'yield_value') VALUES(1,3)";
//$sql = "INSERT INTO 'arunslocal'.'scrap_yielddata'( 'yield_name', 'yield_value') VALUES('$name','$value')";
if(!mysqli_query($connection,$sql))
{
die('Error : ' . mysqli_error($connection));
}
}
echo "5";
?>
Как сбрасывать результаты в MySql db? Специально декодируйте gzip и проанализируйте его до массива HP, а затем сбрасывайте в db.
Ваша проблема в том, что данные ответа кодируются gzip.
Согласно документации API Parsehub,
Контекстное кодирование этого ответа всегда является gzip.
Решение
Попробуйте декодировать ответ gzip.
Вы можете использовать gzdecode
для декодирования ответа gzip.
Также запустите API с помощью формата json.
Затем вы можете json_decode
преобразовать его в массив и использовать его.
пример
<?php
$params = http_build_query(array(
"api_key" => "xxxxxx",
"format" => "json"
));
$result = file_get_contents(
'https://www.parsehub.com/api/v2/projects/tmnx0bN0Ty0U/last_ready_run/data?'.$params,
false,
stream_context_create(array(
'http' => array(
'method' => 'GET'
)
))
);
$result = gzdecode($result);
echo $result;
$parsed_result = json_decode($result, true);
$yield_data = $parsed_result['yield_data'];
foreach($yield_data as $item){
$name = $item['name'];
$value = $item['value'];
$sql = "INSERT INTO 'arunslocal'.'scrap_yielddata'( 'yield_name', 'yield_value') VALUES('{$name}',{$value})";
if(!mysqli_query($connection,$sql)) {
die('Error : ' . mysqli_error($connection));
}
}
?>
Выход
{
"yield_data": [
{
"name": "Sri Lanka 3M",
"value": "7.760"
},
{
"name": "Sri Lanka 6M",
"value": "8.500"
},
{
"name": "Sri Lanka 1Y",
"value": "9.054"
},
{
"name": "Sri Lanka 2Y",
"value": "9.283"
},
{
"name": "Sri Lanka 3Y",
"value": "9.588"
},
{
"name": "Sri Lanka 4Y",
"value": "9.850"
},
{
"name": "Sri Lanka 5Y",
"value": "10.000"
},
{
"name": "Sri Lanka 6Y",
"value": "10.100"
},
{
"name": "Sri Lanka 7Y",
"value": "10.150"
},
{
"name": "Sri Lanka 8Y",
"value": "10.200"
},
{
"name": "Sri Lanka 9Y",
"value": "10.250"
},
{
"name": "Sri Lanka 10Y",
"value": "10.300"
},
{
"name": "Sri Lanka 15Y",
"value": "10.575"
}
]
}
Вам нужно yield_data
массив yield_data
Попробуйте следующее:
$arr = json_decode($results, true);
foreach($arr['yield_data'] as $item) {
$name = $item['name'];
$value = $item['value'];
}