2012-01-03 11 views
0

私は実際にPHPを初めて使いました。私は最近、自分のウェブサイトをAPIと統合するために最近勉強を始めました。これまでのところ、とてもうまくいっていますが、私は自分の問題に関する情報を見つけることができませんでした。SimpleXMLを使用して複数のURLを読み込んでデータを整理する

目的:外部APIを使用して「注文」、「商品」、「パッケージ」をプルすること。その後、すべての重要な情報とともに、ログインしたユーザーの注文(過去および現在)のリストのエクスポートを許可します。

効果:情報をプルして投稿します。

どうすればいいですか?APIは「ページ区切り」を使用しており、その制限を超えて進めません。一例として、現在22の注文があります。 APIを呼び出すと、最初の10個が送信され、完全に出力されます。もっと私は "per_page"と "page =#"を末尾に追加することができます。しかし、私は手動でこれを行うことができます。たとえば、私は "per_page = 20"でアドレスをハードコードするとすべて20と表示されます。しかし、問題は私がいつどれくらい引っ張るかを知ることではなく、私は23(1以上あります)何もロードしない。私が現在使用してコードを表示するように

(重要な部分を表示するために大幅に短縮されています):これに伴い

<?php 
$packages = 'http://[email protected]/packages.xml'; 
$products = 'http://[email protected]/products.xml'; 
$orders = 'http://[email protected]/orders.xml'; 

$packagelist = new SimpleXMLElement($packages,null,true); 
$productlist = new SimpleXMLElement($products,null,true); 
$orderslist = new SimpleXMLElement($orders,null,true); 

foreach($productlist->children() as $child) { 
    echo $child->getName().": 
"; 

    foreach($child->children() as $subchild) { 
    echo "<br />--->".$subchild->getName().": ".$subchild." 
"; 
    } 
} 


foreach($orderslist->children() as $child) { 
    echo $child->getName().": 
"; 

    foreach($child->children() as $subchild) { 
    echo "<br />--->".$subchild->getName().": ".$subchild." 
"; 
    } 
} 
?> 

、私は私の反復方法が効率的である場合になど興味があります。それは、注文リストで読み込み、サイトの電子メールアドレスと名前をリストと比較するように設定されています。ヒットした場合は、購入ID番号を取得し、パッケージと製品リストを解析して名前を取得します購入)の:

foreach($orderslist as $child) { 
    $purchaser = $child->{'buyer-name'}; 
    $email_addy = $child->{'buyer-email'}; 
    $download_url = $child->{'download-url'}; 
    $valid = $child->{'valid-until'}; 
    $expires = date("F j, Y", strtotime("$valid")); 
    $product_id = $child->{'product-id'}; 
    $package_id = $child->{'package-id'}; 
    if ($email_addy == "$activeEmail" && $purchaser == "$usersName" && ($child->state == "complete" || $child->state == "free")){ 
     foreach($productlist as $testing){ 
      if ($product_id == "{$testing->id}"){ 
    echo "<tr><td>{$testing->name}</td> <td><a href=\"$download_url\">Download</a></td> <td>$expires<br /></td></tr>"; 
    } 
} 

最後に、私はセットアップを持っている懸念は、システムがより多くの購入を取得するよう、読み込まれているリストは長く、長くなっ保つことです。そうであるように、誰かが自分のアカウントページを訪れるたびに、そのリストを引っ張って最新の情報を入手します。これを処理するより効率的な方法はありますか?

APIドキュメント:事前にhttp://www.digitaldeliveryapp.com/developers/api/introduction

ありがとう!私はあなたが見ることができるように、これは非常に新しいですが、これまでこれまでの素晴らしい学習経験でした!

答えて

0

Simplexmlをパーサーとして使用すると、すでに注文リストが急速に成長していると言われているので、メモリ全体にxmlがロードされないため、より良いdomdocumentを使用できます。 私はデータベースに注文を保存し、新しい注文をAPIから取り出すよう要求するだけです。したがって、顧客の注文のみを独自のデータベースに照会することもできます。

+0

私はデータベースクエリを使用することを考えていましたが、古い注文の変更が見落とされてしまうことを少し心配しました。たとえば、チャージバックをした場合、システムはX日までアクティブであることを示します。 、等ではありません。 – Bryan

+0

DomDocumentを読んだら、うまくいくと思いますが、必要なURLをすべて引き出すにはどうすればいいですか?(すべてのページが引かれるまで、URLはper_page = 50 && page = 1、page = 2、page = 3など) – Bryan

+0

それは本当ですが、あなたのために、apiが変更日付を提供してくれることを願っています。ページネーションの場合は、ページネーションパラメータをオーバーライドして50をフェッチし、56のオーダーを表示するとページの最後の6を –

関連する問題