【问题标题】:Parsehub API PHP解析器 API PHP
【发布时间】:2017-12-19 05:18:10
【问题描述】:

如何将结果转储到 MySql 数据库中? 专门解码 gzip 并将其解析为 HP 数组,然后转储到数据库中。

<?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 数据库中? 专门解码 gzip 并将其解析为 HP 数组,然后转储到数据库中。

【问题讨论】:

  • 你知道插入是做什么的吗?
  • 这是我得到的回复 ���8ZtqHycvgxB98L.csv]�1 �0н������v��N�:ANp{������w��'������!�l�;����ewaJIp_8�즃-T;Cu�
  • 取决于您所指的插入内容。虽然我知道 SQL 之一
  • 你的问题到底是什么?
  • 当我删除格式参数时,我得到一个 json 字符串,所以 api 工作

标签: php mysql csv web-scraping parsehub


【解决方案1】:

数据是 gzip 编码的

您的问题是响应数据是 gzip 编码的。

根据 parsehub 的 API documentation

此响应的 Content-Encoding 始终为 gzip。

解决方案

尝试解码 gzip 响应。

您可以使用gzdecode 来解码 gzip 响应。

同时获取格式为 json 的 API。

然后你可以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"
  }
 ]
}

【讨论】:

  • 通过修改更新了问题。如何处理 gzip 部分?
  • 已更新答案,立即查看完整解决方案
  • 很高兴我能提供帮助,如果解决方案有效,您可以接受答案。谢谢machi。
【解决方案2】:

您需要遍历yield_data 数组 请尝试以下操作:

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

demo

【讨论】:

  • 什么 echo 3 和 4?
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多