PHP API Parsehub

0

Как сбрасывать результаты в 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.

Теги:
csv
web-scraping
parsehub

2 ответа

0
Лучший ответ

Данные кодируются gzip

Ваша проблема в том, что данные ответа кодируются 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"
  }
 ]
}
  • 0
    попробовал, но не сработало.
  • 0
    обновил ответ. Проверь сейчас
Показать ещё 4 комментария
0

Вам нужно yield_data массив yield_data Попробуйте следующее:

$arr = json_decode($results, true);
 foreach($arr['yield_data'] as $item) { 
   $name = $item['name'];
   $value = $item['value'];
 } 

демонстрация

  • 0
    Пробовал, но не сработало. Пропускает эхо 3 и 4
  • 0
    какие эхо 3 и 4?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню