0

もっと良い方法があるはずです!これは私のコードです:

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 データベースに挿入し、翌日レポートを作成できるようにすることです。何か案は?ありがとう!

4

1 に答える 1

1

私はチャンクでそれをします。最初の API 呼び出しを行い、それをループして ID だけのリストを作成し、それを保存します。Idはそれらを1行に1つずつファイルに保存します...その後、配列全体をバッファにロードする代わりに、後で1行ずつファイルを作成できます。または、ファイルを配列に読み取ることもできます...最終的にはどちらがより良い解決策になります.

次に、ファイルを読み取り、ID をループして詳細呼び出しを行い、それらを保存します。

更新

xpath クエリを使用して、コンパイルされた側で ID の取得を維持することもできます。

$xmlNew2->xpath("//THE_ELEMENT_WITH_THE_ID/@id");

しかし、これをループする必要があるため、これがあなたを大いに節約するかどうかはわかりません...SimpleXMLElement::attributes各ノードで呼び出す必要があるだけです。しかし、結果は依然としてアトリビュート エレメントの配列になります。

于 2012-08-30T03:38:53.477 に答える