用于替换IMPORTXML的Google脚本(使用IMPORTXML导入太大的xml)

时间:2017-01-29 21:21:04

标签: php xml google-apps-script google-sheets google-sheets-api

我想将Google购物XML导入Google电子表格,但Google电子表格显示错误:

错误 url内容的资源超过了最大大小。

我需要导入数据(并且每6小时更新一次),我不知道这个错误是怎么回事。

我使用的一个例子是:

=IMPORTXML("http://avambu.xtechcommerce.com/datafeeds/google_shopping","//channel/item")

但是使用更大的XML。

有一个脚本或其他解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我现在找到的最佳解决方案是使用PHP脚本。

$filexml = 'GoogleProductFeed.xml';
$xml = simplexml_load_file($filexml);
$xml->registerXPathNamespace('g', 'http://base.google.com/ns/1.0');

if (file_exists($filexml))  {    
   $xml = simplexml_load_file($filexml);
   $i = 1;           // Position counter
   $values = [];     // PHP array

   // Writing column headers
   $columns = array('title', 'link', 'description', 'g:availability', 'g:price', 'g:image_link', 'g:product_type',
                    'g:google_product_category', 'g:condition', 'g:identifier_exists', 'g:id');

   $fs = fopen('GoogleProductFeed.csv', 'w');
   fputcsv($fs, $columns);      
   fclose($fs);

   // Iterate through each <item> node
   $node = $xml->xpath('//item');

   foreach ($node as $n) {               
       // Iterate through each child of <item> node
       foreach ($columns as $col) {         
         $values[] = trim($xml->xpath('//item['.$i.']/'.$col)[0]);
       }    
       // Write to CSV files (appending to column headers)
       $fs = fopen('GoogleProductFeed.csv', 'a');
       fputcsv($fs, $values);      
       fclose($fs);  

       $values = [];    // Clean out array for next <item> (i.e., row)
       $i++;            // Move to next <item> (i.e., node position)
   }
}

感谢@Parfait为另一个question提供了更好的PHP脚本的答案。

要自动运行脚本,我需要使用linux服务器上的CRON。