尝试获取将JSON返回到一个CSV文件的API的多个页面。目前,将它将循环通过的最大页数设置为120就足够了。
这是第一个没有任何循环的请求,它创建一个工作的CSV文件(output.txt)。
<?php
$pageNo = "1";
$jsonString = file_get_contents("http://api.domain.com/apikey/?
name1=value1&name2=value2&pageNo=$pageNo");
$jsonDecoded = json_decode($jsonString, true);
$csvHeader=array();
$csvData=array();
$csvFileName = 'output.txt';
$fp = fopen($csvFileName, 'w');
$counter=0;
foreach($jsonDecoded["result"]["items"] as $key => $value)
{
jsontocsv($value);
if($counter==0)
{
fputcsv($fp, $csvHeader, ';');
$counter++;
}
fputcsv($fp, $csvData, ';');
$csvData=array();
}
fclose($fp);
function jsontocsv($data)
{
global $csvData,$csvHeader;
foreach($data as $key => $value)
{
if(!is_array($value))
{
$csvData[]=$value;
$csvHeader[]=$key;
}
else
{
jsontocsv($value);
}
}
}
?>
我猜这应该在一个while循环中,在最后使用类似于++$pageNo的东西来更新值。但是,以前的所有尝试都会导致每次都覆盖文件,并且只将最后一页写入文件。如何在每次循环时向CSV中添加内容?不过,理想情况下,每次运行整个脚本(每天一次)时,整个CSV文件都将被替换为更新后的值。
谢谢
发布于 2018-06-10 02:27:47
您正在以写入模式打开文件,这会将指针放置到文件的开头(fopen($csvFileName, 'w')
),这就是它被覆盖的原因。尝试使用追加模式,它应该将指针放到末尾。此外,如果要在文件不存在的情况下创建该文件,请使用加号,如下所示:fopen($csvFileName, 'a+')
https://stackoverflow.com/questions/50777103
复制相似问题