オンラインストアへのデータのインポート:生活を楽にするアルゴリズム

以前の記事habrahabr.ru/post/209040で 、オンラインストアにデータをインポートする一般的な問題、これに関連する方法の特徴、利点、欠点について説明しました。 長期的には、各オンラインストアにデータをインポートするための独自のモジュールを開発すること(特定のCMSデータベースに直接インポートすること)が唯一の効果的な方法であると結論付けることができます。 なんで? まず、インポートモジュールのコードは完全に制御されており、いつでもプロンプトを変更できます。 もう1つは非常に重要ですが、モジュールのソフトウェアラインへの統合です。 インポートモジュールの特別な点は何ですか? これは、データのインポートプロセスに影響する多数のパラメーターです。 以下は、CatalogLoaderモジュールのデータインポートアルゴリズムの簡略図です。



オンラインストアにデータをインポートするためのアルゴリズム







実装



次の画像は、CatalogLoaderからOpenCartへの標準のアンロードダイアログを示しています。





OpenCartの標準オプション:

-商品を無効にします(「消えた」商品を無効にする機能を決定します)。

-更新する必要のない記事のプレフィックス。

-データベースプレフィックス。

-Catalogloader_handler.phpファイルへのパス。

-ファイルdelete_cache.phpへのパス(OpenCartで一般的)。

ユーザーに提供される標準のインポートモジュールには、アルゴリズムで使用可能なパラメーターセット全体が含まれていないことに注意してください。 これは、インターフェイスが煩雑にならないように、またユーザーに追加の質問がないように、意図的に行われます。 これらのパラメーターは、大部分のプロジェクトに十分です。 そして、パーツのみが特別なモードで利用可能な特別なパラメーターを必要とします。



次の画像は、1C-Exchangeプロトコルを介した標準のBitrixアップロードダイアログを示しています。



機能:

-1C-Exchangeプロトコルのサポート。

-デバッグモードのサポート。 多くの場合、このモードはBitrixへの唯一のインポートオプションです。



アルゴリズムの原理



アルゴリズムの原理は、次の考え方に基づいています。 アルゴリズムの入力は、オンラインストアの新しい状態を持つローカルデータベースです(このKLPデータベースと呼びます)。 つまり インポートプロセスが完了すると、KLPデータベースは必要なCMSデータベースに「流れ」ます。 一部の機能を使用するかどうかにかかわらず、完全にまたはそうではありません-ユーザーが定義するデータインポートプロセス自体の設定に既に依存しています。



以下は、インテグレーターおよび開発者が関心を持つ技術情報です。データのインポートプロセスに影響するパラメーターです。



CmsEngine文字列変数[デフォルト( "")]

オンラインストアのCMSを定義します。 可能な値:bitrix、commerceml、magento、insales、prestashop、vamshop、opencart、hostcms、shopcms、shopscript、virtuemart、joomshoping、simplaなど



ModeIsDisable boolean [デフォルト値(false)]

KLPデータベースにない商品を無効にするモードが含まれています。



DbPrefix文字列変数[デフォルト値( "")]

オンラインストアデータベースプレフィックスを定義します。



HttpTunnelLink文字列変数[デフォルト( "")]

CatalogLoaderとオンラインストア間のデータ転送インターフェイスとして機能するリンクを定義します。

可能なオプション:CatalogLoader_hanpler.phpスクリプトへのリンク、Co​​mmerceMLプロトコル経由で送信するための1c_exchange.phpスクリプトへのリンク。



HttpTunnelDelay数値変数[デフォルト値(0)]

HttpTunnelLinkで定義されたインターフェイスに送信されるリクエスト間の遅延を定義します。 これは、サイトが弱いホスティングにあり、CatalogLoaderによるアクティブなアクション(頻繁な呼び出し)がサイトを停止する場合(CPU制限など)に必要です。



HttpImageWebDownloaderLink文字列変数[デフォルト値( "")]

オンラインストアホスティングの画像アップロードスクリプトへのリンクを定義します。

Bitrixなどのcmsの場合、インソールは必要ありません。



HttpImageWebDownloaderLinkSaveToFile boolean [デフォルト値(false)]

HttpImageWebDownloaderLinkで定義されたインターフェイスを使用して画像を読み込むことを禁止し、このインターフェイスを呼び出すためのすべてのパラメーターを、CatalogLoaderプログラムでディレクトリ内のファイルに保存します。 これは、将来イメージのロードを延期する必要がある場合に必要です。



SqlConnectionString文字列変数[デフォルト( "")]

オンラインストアデータベースの接続文字列変数を定義します。 これにより、データのダウンロード速度が大幅に向上します。

文字列変数ShopUser [デフォルト値( "")]

ターゲットオンラインストアでの特定のユーザーログイン(通常は管理者)。

利用可能:1c交換モードのbitrix、インセールス。



ShopPassword文字列変数[デフォルト( "")]

ターゲットオンラインストアの特定のユーザーパスワード(通常は管理者)。

利用可能:1c交換モードのbitrix、インセールス。



CategoryNameForImportAll文字列変数[デフォルト( "")]

オンラインストアのすべての「新しい」製品が定義されるカテゴリを定義します。 すべての新製品を「新製品」カテゴリにインポートすることが必要な場合があり、古い製品は単に更新されます。

注:bitrix、commercemlでは機能しません。



PriceUpdate boolean [デフォルト値(true)]

製品の価格がCatalogLoaderによって変更されない製品更新機能の動作を定義します。 これは、サイト管理者が商品の価格を個別に設定する場合に必要です。



MissedProductIsDisabledブール値[デフォルト値(true)]

製品の非アクティブ化モードを定義します。 値がtrueの場合、製品の非アクティブ化は実際の非アクティブ化を意味し(製品はデータベースに残り、非アクティブとしてマークされます)、そうでない場合、製品はCatalogLoaderソフトウェアストアから削除されます。 (理解しないでください)



MissedProductProcessブール値[デフォルト(true)]

製品の非アクティブ化機能の動作を定義します。 値が「true」の場合、オンラインストアのデータベースに存在し、KLPファイルにない商品は無効化されます。そうでない場合、商品を無効化する機能は存在しない商品には適用されません。

ブール変数MissedCombinationIsDisabled [デフォルト値(true)]

製品の組み合わせを非アクティブ化する機能の動作を定義します。 値が「true」の場合、オンラインストアのデータベースに存在し、KLPファイルにない製品の組み合わせは非アクティブ化されます。そうでない場合は、データベースから削除する必要があります。



CustomParameters文字列変数[デフォルト(“”)]

特定のCMSに固有のパラメーターが決定されます。 たとえば、prestashopの場合、このパラメーターの値はid_lang = 7です。これは、商品のテキストデータをオンラインストアの言語7にインポートする必要があることを意味します。



CallUrlOnStart文字列変数[デフォルト値(“”)]

インポートプロセスを開始する前に、CatalogLoaderソフトウェア(get request)から呼び出されるhttpリンクを定義します。 一般的にデータベースのバックアップに使用されます。



CallUrlOnFinish文字列変数[デフォルト値(“”)]

インポートプロセスが完了した後、CatalogLoaderソフトウェア(get request)から呼び出されるhttpリンクを定義します。 通常、キャッシュをクリアするか、データベースのバックアップコピーを作成するために使用されます。



ProductsUpdateSkip boolean [デフォルト値(false)]

製品更新機能の動作を定義します。 falseに設定すると、更新機能が製品に適用されますが、そうでない場合は適用されません。



CustomerProductSkuTemplate文字列変数[デフォルト値(“”)]

テンプレート(正規表現)を定義します。テンプレートを使用すると、CatalogLoaderソフトウェアではなく、オンラインストアに手動で入力された製品を判別できます。 テンプレートが定義されている場合、商品番号がテンプレートに適合する商品は、「非アクティブ化」機能を適用する商品の選択から除外されます。

たとえば、CustomerProductSkuTemplate = CUS_



ImagesUpdate boolean [デフォルト(false)]

画像更新機能の動作を定義します。 値が「false」の場合、画像は更新されません。それ以外の場合は完全に更新されますが、処理された製品のすべての画像は事前に自動的に削除されます。 通常、以前の更新の繰り返しで写真の品質が高くない場合、このパラメーターを一度「true」に設定する必要があります。



ImagesUpdateMissedブール値[デフォルト値(false)]

画像更新機能の動作を定義します。 値がfalseの場合、画像は更新されません。それ以外の場合は、追加モードで更新されます。 最初に、プログラムは製品にすでにある画像を決定し、その後にのみ、必要な「新しい」画像を製品に追加します。 通常、このパラメーターは、以前の更新の繰り返しで低品質の写真をアップロードする場合、「true」に1回設定する必要があります。

対象:prestashop。



MiminumProductsCountInSet数値変数[デフォルト値(0)]

商品の最小数量を定義します。 パラメーター値がゼロより大きい場合、処理されたKLPファイル内のパラメーターが決定したよりも少ない商品がある場合、CatalogLoaderソフトウェアは商品のインポートプロセスを開始しません。



もちろん、多くのニュアンスが存在するすべての場所で、アルゴリズムのすべてのパラメーターをサポートすることは、CMSごとに常にではなく、必ずしもそうではありません。 これは、交換プロトコル、データベースのアーキテクチャ、またはCMS実装の機能が原因である可能性があります。 提示されたアプローチにより、オンラインストアにデータをインポートするプロセスを非常に柔軟にカスタマイズでき、最大数十万のポジションまでの大量のデータに対応できます。



このアプローチは、次のCMSにデータをインポートするために実装されました。





ニコライ・ケキシュ、

CatalogLoaderのディレクター



All Articles