2

私はOpenIcecat(Icecat Open Catalog)に基づいた製品のカタログの作成に取り組んでおり、これを経験したり、別の同様のサービス(C-Netなど)を経験したりする可能性のある人からのアドバイスを探しています。

私の質問は、製品カタログのデータベースにデータを入力するための良いモデルは何ですか?

これが私がこれまでに持っているものです...

  1. カタログ全体のXMLフィードを取得します
  2. カテゴリIDに基づいて必要な製品に関するデータを抽出します
  3. この時点で、すべてのデータをテーブルに挿入したので、「Printer cats」のようなテーブルができました。これには、カテゴリ内の各製品の画像へのURLとXMLのIDが含まれています...簡単です

ここで私は質問/懸念に遭遇します...各XMLファイルと画像に対してGETリクエストを使用するスクリプトをアドホックにするのは簡単です...それからそれらをディレクトリにダンプできますが、Icecatはあなたに非常にリッピングすることを望んでいません大量。私のカテゴリには、数千(たとえば40k以上)の製品が含まれています。

私がしなければならないと感じているのは、製品のXMLを取得し、画像を取得して保存することです。それは明白な解決策であり、それがクライアントが求め続けているものであるため、私はこのように感じています...しかし、それが正しいことを意味するわけではありません。したがって、個々のXMLを解析して、説明やSKUなどをテーブルに抽出し、Magentoで使用するようにカタログを作成し、後で必要に応じて追加/変更することができます(価格、関連製品など)。 )簡単そうに見えますが、約3〜4kのGETリクエストの後、大量のデータをリッピングしているために起動します。カタログ全体(必要なカテゴリのカタログ)を取得したら、更新を取得するのは簡単です。ファイル(XML ..および比較して小さい)およびそれに応じて変更を加えます...これは重要なポイントですが、最初にすべてのデータを取得し、最初に製品テーブルを作成する必要があります。

だからここに私が蹴り回すものがあります...

1つのアイデアは、必要に応じてリアルタイムでデータを取得することですが、これはクライアントや私自身には望まれていません。クライアントは、わかりやすいカタログを望んでいます...そして、リアルタイムでパフォーマンスが低下し、(簡単に)多くのソリューションにプラグインできないことに気付きました。しかし、「リアルタイム」のアイデアを拡張すると、XMLデータのリアルタイムGETを使用し、ローカルに存在しない場合は「ローカルに存在しない場合」のようなロジックを使用してデータを保存します...取得してから保存しますそれ; ローカルに存在する場合は、最新の情報であるかどうかを確認します...更新しない場合は、'...もちろん、最新であるかどうかを確認する場合は、保存しても意味がありません。データは、何があっても毎回リクエストを実行しているためです...データを取得して破棄するだけでもかまいませんが、これは非効率的です。

-また-

たぶんすべてがリアルタイムです:製品はリアルタイムでフェッチされて表示され、管理者が操作のために製品を表示すると、リアルタイムで表示されます。 「メイン」カタログファイルからすでに入力されているデータベース...Icecatから利用可能なカタログ全体を記述しますが、これは多くのソリューションにプラグインせず、パフォーマンスに打撃を与えます。さらに、一部のホストは私たちを許可しませんとにかくGET...ここには非常に多くの制限がありますが、常に最新の情報を持っていることを確認するための素晴らしい解決策のように聞こえます(ここでは必要ありません)

これが私がすでに向かっているところです...

メインカタログ(50万以上のアイテム)に基づくメタデータがあります。私はすでに希望のカテゴリに基づいてテーブルにデータを入力しました...今、私はこれに向かっています:単一のカテゴリなど、私が作業しているものをより洗練するアプリ(ツール)を構築します。次に、ジョブを生成し、'カテゴリIDを使用してすべてのXMLフィードを取得します'...次に'cat.ID(おそらく再び同じ)を使用してから画像をフェッチします' ...次に、同じCatを取得します。SKU、説明、画像ファイル名などを取得して製品を識別および構築し、カタログを構築します。ワークフローのこの時点で、私はすべての情報を持っており、SKU(または必要なもの)を使用して、他のフィードから価格などを取得したり、説明を操作したり、必要に応じて画像の名前を変更したり(SEO)することができます。

次に、別のフィードから価格と配送重量を更新するためのモデルを構築する必要があります...この場合はSynnexですが、配送と価格はリアルタイムである必要があるため、はるかに簡単に見えます...一度、私が考えているのはカートの中のものだけです。

まだこれを行う方法がわかりません..おそらく他の人がIcecatリポジトリをリッピングして同じクライアント用にこのようなカタログを作成しましたが、将来の操作などのためのツールを作成/提供することはありません...これが私が向かっているところです。さらに、古いカタログは非常に古く/古く、完全なセットではなく、実際にデータをリッピングしてカタログを作成したという「証拠」を見たことがありません。

OK、混乱を助けるために...

私が使用しているソースには、多くのカテゴリの600,000を超える製品のリポジトリがあります。必要な製品は約45,000個です(いくつかのカテゴリにわたって)。現状では、1時間あたり約1000のように、それぞれのxmlファイルをダウンロードするのに数時間かかります(これは過去の経験からわかっています)。

問題の一部は、すべてのXMLファイルが完全に同じであるとは限らず、さまざまなカテゴリからのさまざまな情報が必要になることです。これらの要件はおそらく変更されるでしょう(おそらく最初はもっと)。したがって、それらすべてを格納する単一のスキーマを持つことはできません。45,000(またはそれくらい)のファイルがダウンロードされると、将来の変更/更新を取得するだけで済みます。ですから、私が本当にやろうとしているのは、必要なカテゴリのみのローカルリポジトリを構築して、それらをより効率的に操作できるようにすることです。関連するカテゴリもすぐに使用する予定はないので、戻ったときにファイルをローカルで使用することも必要です。

4

2 に答える 2

2

これを解決したことはありますか?http://sourceforge.net/projects/icecatpim/をインストールしようとしたことがありますか?実行するのは非常に困難ですが、製品データベースをローカルmysqlデータベースにダウンロードできます。ローカルデータベースを取得したら、cronを作成できます。必要に応じてデータベースを定期的に更新するスクリプト。次に、独自のプログラムを使用してデータにアクセス/操作します。

http://code.google.com/p/icecat-import/に役立つ可能性のあるこのプロジェクトもあり ます。ローカルデータベースにデータを書き込むコードがあり、元々は完全なデータベースをダウンロードするように設計されていましたが、多くのデータがありません。

データベースのinnodbバージョンのパッチを投稿しました。 http://sourceforge.net/tracker/?func=detail&aid=3578405&group_id=312187&atid=1314070お 役に立てば幸いです。データベースには、注意しなければならない悪い参照がたくさんあります。

これは、db参照整合性をチェックおよび設定するためのチートシートです。

//# is the db holding refrential integrity.
SELECT * FROM Aclass a LEFT JOIN Bclass b ON a.column=b.column WHERE b.column IS NULL;

//# Set NULL on update
UPDATE Aclass a LEFT JOIN Bclass b ON a.column=b.column SET a.column=NULL WHERE b.column   IS NULL; 

//# Cascade on delete 
DELETE FROM A WHERE id NOT IN (SELECT DISTINCT B.id FROM B);
于 2012-11-13T01:42:37.037 に答える
0

IcePIM のようにインストールが非常に難しいアプリケーションを見たことはありません。
PHPスクリプトを見つけました:

http://snipplr.com/view/33098/icecat-product-specifications-drawer/

于 2014-05-07T20:24:06.277 に答える