必须有更好的方法!这是我的代码:
checksession();
$restNew2 = new RESTConnector();
$urlNew2 = "https://localhost:9630/api/products/";
$restNew2->createRequest($urlNew2,"GET", null, $_SESSION['cookies'][0]);
$restNew2->sendRequest();
$responseNew2 = $restNew2->getResponse();
$xmlNew2 = new SimpleXMLElement($responseNew2);
foreach ($xmlNew2 as $purge){
$id = (string)$purge->attributes()->id;
checksession();
$restNew = new RESTConnector();
$urlNew = "https://localhost:9630/api/products/".$id."/";
$restNew->createRequest($urlNew2,"GET", null, $_SESSION['cookies'][0]);
$restNew->sendRequest();
$responseNew = $restNew->getResponse();
$xmlNew[] = new SimpleXMLElement($responseNew);
}
$array = array();
foreach ($xmlNew as $purgeDet){
$code[] = (string)$purgeDet->code;
$classId[] = (string)$purgeDet->class['id'];
for($i=0, $count = count($xmlNew); $i < $count; $i++) {
$array[$code[$i]]['classId'] = $classId[$i];
}
}
print_r($array);
第一个响应给了我大约300,000行,所以我必须解析它以获取产品的ID以发送另一个请求来获得产品的完整渲染。它最终会发送40,000个请求。我希望晚上使用cron将其插入到mySQL数据库中,这样我就可以在第二天创建报告。有任何想法吗?谢谢!
答案 0 :(得分:1)
我是以大块的方式做的。进行第一次API调用并在其上循环,构建一个只有ID的列表并存储它。我将它们存储在一个文件中,每行1个...然后你可以逐行输出文件,而不是将整个数组加载到缓冲区中,或者你仍然可以将文件读取到数组中...无论哪个最终都是更好的解决方案
然后读取文件并遍历ID,进行详细调用并存储它们。
<强>更新强>:
您还可以使用xpath查询继续抓取编译端的ID。
$xmlNew2->xpath("//THE_ELEMENT_WITH_THE_ID/@id");
但是我不知道如果这会为你节省很多,因为你仍然需要循环这个...它只是节省你必须在每个节点上调用SimpleXMLElement::attributes
。但结果仍然是属性元素数组。