如何生成带正确表头的CSV:API JSON结果转Excel可导入格式
解决KeywordTool.io API导出CSV表头横向排列的问题
嘿,我看你遇到了CSV导出格式的问题——原来的代码把每个关键词的字段都拆成了纵向的行,完全不是我们想要的横向表头+每行对应一个关键词的结构。我来帮你调整代码解决这个问题。
问题根源分析
你原来的三层循环是把每个关键词的单个键值对单独写成一行(比如cat,string,cat),这就导致所有数据都呈纵向排列,完全不符合Excel导入的常规格式。我们需要先提取统一的表头,再把每个关键词的所有字段值整理成一行,和表头一一对应。
修改后的完整代码
<?php $apikey = 'XXXXXXXXXXXX'; $array = explode("\n", file_get_contents('kw1.txt')); $params = [ 'apikey' => $apikey, 'keyword' => $array, 'metrics_location' => '2840', 'metrics_language' => 'en', 'metrics_network' => 'googlesearchnetwork', 'metrics_currency' => 'USD', 'output' => 'json', ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.keywordtool.io/v2/search/volume/google'); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($ch); $response = json_decode($output, TRUE); // 简单的API返回异常检查 if (empty($response) || !is_array($response)) { die("API返回数据异常,请检查请求参数或API密钥是否正确"); } $csvFileName = 'file.csv'; $fp = fopen($csvFileName, 'w'); // 第一步:提取并写入表头 // 从第一个关键词的字段中获取所有键,把默认的'string'替换为更直观的'keyword' $firstKeywordGroup = reset($response); if (!empty($firstKeywordGroup)) { $firstEntry = reset($firstKeywordGroup); $headers = array_keys($firstEntry); // 替换表头字段名,让CSV更易读 $stringIndex = array_search('string', $headers); if ($stringIndex !== false) { $headers[$stringIndex] = 'keyword'; } // 写入表头到CSV fputcsv($fp, $headers); } // 第二步:遍历每个关键词数据,整理成一行写入CSV foreach ($response as $keywordGroup) { foreach ($keywordGroup as $entry) { $row = []; // 按照表头顺序匹配对应的值 foreach ($headers as $header) { // 处理keyword字段对应的原始string值 $row[] = $header === 'keyword' ? $entry['string'] : ($entry[$header] ?? ''); } fputcsv($fp, $row); } } fclose($fp); echo "CSV文件已成功生成:{$csvFileName}"; ?>
关键修改说明
- 表头提取:通过
reset()拿到第一个关键词的数据集,用array_keys()获取所有字段名,把默认的string替换成keyword,让表头更符合业务逻辑。 - 行数据整理:遍历每个关键词的条目时,严格按照表头的顺序提取对应的值,确保每行内容和表头一一对应,不会出现错位。
- 异常处理:增加了API返回空数据的检查,避免后续代码报错。
修改后生成的CSV格式
现在生成的CSV会是你期望的结构:
keyword,volume,m1,m1_month,m1_year,... cat,6120000,7480000,5,2019,... dog,7480000,...,...,...,...
内容的提问来源于stack exchange,提问作者Gray Ridley
相关产品推荐
相关产品推荐

