设置cron作业以提取HTTP请求并从结果中创建/缓存文件


Setting up cron job to pull HTTP request and create/cache file from results

首先感谢您提供的任何帮助。我对PHP有些陌生,这是我创建的第一个"Web服务"。

目标:我需要从另一台服务器提取XML数据。这家公司的API是这样设置的,所以你必须提供一个IP,所以你只能从服务器到服务器,而不是从客户端到服务器。使用HTTP请求从API中提取数据。。。与YQL非常相似。(本质上,结构化查询位于URL中)。这个API还要求我的服务器每10-15分钟只ping他们的服务器,以减少服务器请求。

我脑子里的逻辑想法是设置:一个cron作业,每10分钟运行一个PHP脚本。然后,PHP脚本将执行以下操作:1.发出HTTP请求2.打开现有文件或创建一个(在我的服务器上)3.从API获取返回的XML数据,并写入新打开的文件。4.将XML转换为JSON。5.保存JSON6.缓存JSON文件7.停止

我的想法是在前3个步骤中使用curl和fopen。我在PHP.net上找到了一个基本的脚本(如下所示)。在那之后,我几乎不知道如何继续。

<?php
$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

我真的很感谢在这方面的任何帮助。此外,如果你有时间,请评论并解释你在任何代码示例中做了什么以及为什么。。。。那会有很大帮助的。我真的很想学习,而不仅仅是抓一个片段就跑。所以,你的评论对我来说至关重要。

谢谢!!!

您可以使用更方便的函数来实现这一点,例如file_get_contents和file_put_contents。

将XML转换为JSON是一种模棱两可的语句,因为XML数据结构不一定直接映射到JSON,因为XML可以包含属性等。因此,您必须根据数据的结构自行解决如何实现这一点。您可以使用SimpleXMLPHP模块(http://php.net/manual/en/book.simplexml.php)或DOM模块(http://www.php.net/manual/en/book.dom.php)。

在高级上,您的代码可能会看起来像这样:(这假设您不需要通过使用HTTP头或类似的东西对API进行任何特殊的身份验证)

    <?php
    $remote_data_xml = file_get_contents("http://www.example.com/file.xml");
    $parsed_data = my_custom_xml_parsing_function($remote_data_xml);
    $parsed_data_json = json_encode($parsed_data);
    file_put_contents("my_json_cache.json", $parsed_data_json);
    ?>