israeli-grocery-price-intelligence について
israeli-grocery-price-intelligenceは、公開フィードまたは利用可能なMCPサーバーを使ってイスラエルの食料品価格を分析するスキルです。フィード取得、XML解析、価格の正規化、チェーン間比較を案内し、自動化が不要な場合は既存の比較アプリも紹介します。
主な機能
- 01比較アプリと生データを選択
- 02チェーン別価格フィードへのアクセス
- 03XML価格の解析と正規化
- 04スナップショットと差分の反映
- 05チェーン間の商品比較
活用シーン
- 01買い物かごの価格比較を自動化
- 02独自の買い物リスト最適化ツールの構築
- 03価格推移の追跡
- 04飲食店の食材コスト分析
MCP 対応
supermarket-prices MCPサーバーが導入済みの場合、チェーン一覧、商品検索、価格比較、販促、店舗データ、XML資料の参照にそのツールを使うよう案内します。未導入の場合は、XMLフィードを手動で扱う方法を説明します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ skills-il/ food-and-dining --skill israeli-grocery-price-intelligenceインストール後、Claude Code で/israeli-grocery-price-intelligenceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CHANGELOG.mdevidence.jsonmetadata.jsonoptimization-log.jsonSKILL_HE.mdreferences/chain-feeds.mddomain-checklist.mdscripts/parse_price_xml.py詳細
イスラエルの食料品価格インテリジェンス
手順
開発者でない方に最も手軽な方法:すぐに使える比較アプリ
ユーザーが商品の価格や買い物かごの合計が最も安い店舗を知りたいだけで、自動化パイプラインを構築するわけではない場合は、これらのフィードをすでに解析している消費者向け価格比較サービスを案内してください。コードは必要ありません。
- CHP(https://chp.co.il)は、イスラエルで最も広く利用されている食料品価格比較サイトで、近隣の店舗を対象に買い物かご全体の価格を比較します。
- Pricez(https://www.pricez.co.il)と Savy(https://www.savy.co.il)は、その他の消費者向け比較アプリです。
- 経済省が承認した価格比較アプリの公式一覧(https://www.gov.il/he/pages/cpfta_apps)は、価格透明化法に基づいて審査されたサービスの公式ディレクトリです。
消費者向けアプリでは提供されない自動化、独自の買い物リスト最適化、トレンド追跡、レストランのコスト分析が必要な場合は、以下の生フィード/MCP の方法を使用してください。
優先(自動化向け):Supermarket Prices MCP Server を使用する
ユーザーが supermarket-prices MCP サーバーをインストールしている場合は、XML フィードを手動で取得する代わりにこれを使用してください。MCP が認証、CSRF トークン、SSL の問題、プラットフォーム固有の問題を自動的に処理します。
インストール手順:https://agentskills.co.il/he/mcp/supermarket-prices
利用可能な MCP ツール:
list_chains-- データソース(web / publishprice / FTP)に関する情報を含む、対象チェーンの一覧search_products-- 商品名またはバーコードで検索compare_prices-- チェーンをまたいだ価格比較。価格の安い順に表示get_promotions-- チェーンごとの現在のセールとプロモーションget_store_data-- 店舗の所在地。市区町村で絞り込み可能get_chain_files-- 生の XML 価格ファイルを閲覧get_xml_schema_info-- XML スキーマとフィールドの参照ドキュメント
MCP が利用可能な場合は、ステップ 1~2 を省略し、ステップ 3~6 では MCP ツールを直接使用してください。MCP がインストールされていない場合は、以下の XML フィードを手動で取得する方法を使用してください。
ステップ 1:スーパーマーケットの XML フィードにアクセスする(手動での代替方法)
食品・医薬品分野における競争促進法(חוק קידום התחרות בענפי המזון והפארם、2014 年。2015 年から施行)に基づき、店舗数が 3 店舗以上のイスラエルのスーパーマーケットおよび薬局チェーンは、商品価格を XML ファイルとして公開する必要があります。同法の名称に「医薬品」が含まれているため、Super-Pharm と Good Pharm も公開していますが、薬局のフィードに含まれるのはドラッグストアの商品 SKU(洗面用品、OTC、ベビーフード)のみで、生鮮食品や乳製品は含まれません。
-
チェーンごとに利用可能なデータファイル(政府仕様で定められたファイル名のプレフィックス):
- PriceFull -- 価格付きの商品カタログ全体のスナップショット
- Price -- 全体スナップショット間の差分更新
- PromoFull + Promo -- 現在のセールとプロモーションの全体スナップショットおよび差分
- StoresFull + Stores -- 店舗の所在地と詳細
-
ファイル名の形式を正規表現で判定しないでください。 2 種類の形式が使われており、プラットフォームごとに明確に分かれているわけではなく、単一チェーンの一覧に両方の形式が含まれることもあります。
- 3 セグメント形式:
PriceFull<ChainId>-<StoreId>-<yyyyMMddHHmm>.gz - 5 セグメント形式:
PriceFull<ChainId>-<SubChainId>-<StoreId>-<yyyyMMdd>-<HHmmss>.gz
Cerberus の Rami Levy のライブ一覧には、3 セグメント形式の
PriceFullファイルが 44 件、5 セグメント形式のファイルが 93 件あり、新しいファイルでは 5 セグメント形式が使われていました。Shufersal と Carrefour も 5 セグメント形式を使っています。Storesファイルには独自の 4 セグメント形式があり、多くの場合、.xmlのみのファイルです。プレフィックスの大文字・小文字は、同じ一覧内でも統一されていません(price、Price、pricefull、PriceFull)。そのため、大文字・小文字を区別せずに照合し、セグメント数を前提とせず右側から位置に基づいて解析してください。どちらの形式も.xml.gzでは終わりません。 より長いプレフィックスを先に照合してください。 大文字小文字を区別しないstartswith("price")はすべてのPriceFullにも一致し、startswith("promo")はすべてのPromoFullにも一致するため、差分用に書いたフィルターは完全スナップショットを黙って取り込んでしまいます。price/promoにフォールスルーする前に、pricefull/promofullを確認してください - 3 セグメント形式:
-
フィードはチェーンごとではなく、店舗ごとに1ファイル公開されます。 チェーン単位のファイルはありません。数百の支店を持つチェーンでは、支店ごとに毎日1つの
PriceFullが公開されます。適当なファイルを1つ取得して「Shufersal の価格」と呼ぶのは誤りです。また、結合したデータセットではすべて、ファイル自身のルート要素から読み取った(ChainId, SubChainId, StoreId, ItemCode)をキーにする必要があります。このタプルを使ってStoresフィードに結合すれば支店の住所を取得でき、これによって「近くの店舗」の回答が可能になります。 -
完全スナップショットは通常、毎日(夜間、イスラエル時間 01:00~05:00)更新されます。差分ファイルは1日に複数回配信される場合があります
-
Shufersal のダウンロード URL は有効期限付きの署名 URL です。 ポータルのルートはブラウザー用の UI にすぎません。
GET https://prices.shufersal.co.il/FileObject/UpdateCategory?catID=<N>&storeId=0(catID=1は Price、2は PriceFull、3は Promo、4は PromoFull、5は Stores)でファイルを一覧表示し、HTML からpricesprodpublic.blob.core.windows.netのリンクを読み取ってください。これらのリンクには、約30分後に期限切れとなるse=が含まれていますが、時間はリクエスト時点からではなく、時計の区切りに固定されているため、実際に利用できる時間はさらに短い場合があります。すぐに取得し、キャッシュしたりブックマークしたりしないでください。 -
Carrefour は、ポータルの HTML 内に
yyyyMMdd形式のpathとともに、ファイル一覧を JavaScript のfiles配列としてインラインで記載しています。https://prices.carrefour.co.il/<path>/<filename>からダウンロードしてください。ファイル名が間違っている場合は、実際に 404 が返されます。 -
チェーンごとのエンドポイント、アクセス方法、Cerberus 認証については
references/chain-feeds.mdを参照してください
チェーンは、1つでも3つでもなく、複数のプラットフォームを通じて公開しています。各プラットフォームでアクセス方法は異なります。チェーンを誤ったプラットフォームに振り分けることは、エージェントが「このチェーンは何も公開していない」と報告する最も一般的な原因です。以下の表は2026-08-27に実際に確認した結果です。確定情報とみなさず、出発点として利用し、改めて確認してください。
| プラットフォーム | URL | ここで公開されていることを確認したチェーン | アクセス |
|---|---|---|---|
| Shufersal Direct | https://prices.shufersal.co.il | Shufersal | 公開一覧ページ。ダウンロードは有効期限付き署名 URLです(下記参照) |
| Carrefour Israel Direct | https://prices.carrefour.co.il | Carrefour Israel(Carrefour/Mega/Yeinot Bitan ブランドの店舗) | 公開。ファイル一覧はページにインラインで記載され、/<yyyyMMdd>/<filename> からダウンロード |
| Cerberus (PublishedPrices) | https://url.publishedprices.co.il/login | Rami Levy、Yochananof、Tiv Taam、Osher Ad、Dor Alon、Keshet Taamim、Fresh Market / Super Dosh、Cofix(SuperCofixApp) | セッションログイン+CSRF(下記参照) |
| Super-Pharm own portal | http://prices.super-pharm.co.il | Super-Pharm | 公開一覧ページ |
| Bina Projects | https://goodpharm.binaprojects.com/Main.aspx | Good Pharm、および複数の小規模チェーン(King Store、Shuk Ahir、Zol VeBegadol、Bareket) | チェーンごとのサブドメインにある公開一覧ページ |
| Chain's own site | https://shop.hazi-hinam.co.il/Prices | Hazi Hinam | 公開ファイル一覧 |
Cerberus を利用していないチェーン(よく一覧に掲載されていますが、実際には利用していません)。 Victory、SuperPharm、GoodPharm、Bareket、Mega の Cerberus ログインは失敗します(POST は 200 を返し、有効なチェーンコードの場合の 302 ではなく、ログインフォームを再表示します)。HaziHinam はログインできますが、ディレクトリ一覧は空である一方、独自サイトでは完全なファイル一覧が提供されています。Cerberus での失敗から、そのチェーンが公開を停止したと判断せず、まず独自のポータルを探してください。
Victory と Mahsani A'Shuk は、機能停止した Nibit プラットフォームから後継エンドポイント
(laibcatalog.co.il)へ移行しました。このホストは名前解決できますが、2026-08-27 にこちらのプローブからの接続を受け付けませんでした。そのため、現在の状態も確認できていません。利用する前に、ご自身で確認してください。旧 matrixcatalog.co.il ホストは、タイムアウトではなく NXDOMAIN となり、名前解決できなくなっています。
Cerberus では、URL を取得するだけでは不十分で、実際の認証が必要です。また、ディレクトリ一覧の取得には POST を使用します。 手順は次のとおりです。GET /login → <meta name="csrftoken"> の値を解析し、レスポンス Cookie も保持する → username=<chain-code>、password=<password-or-empty>、csrftoken=<value> を指定して POST /login/user(有効なチェーンコードの場合は 302 が返り、無効な場合は 200 が返ってフォームが再表示されます)→ GET /file を実行し、そのページから新しい csrftoken を読み取る → DataTables のページングパラメーターとそのトークンを指定して POST /file/json/dir を実行し、ファイル一覧を取得する → GET /file/d/<filename> でダウンロードする。
/file/json/dir への GET は、{"aaData":[],"error":"Invalid request method used for this operation."} とともに HTTP 200 を返します。これは空の一覧であり、エラーステータスではありません。そのため、GET を実行するエージェントは、チェーンが何も公開していないと気付かないまま判断してしまいます。動作するコマンドとチェーンごとのコードについては、references/chain-feeds.md を参照してください。
ステップ 2:チェーン固有のデータ形式を解析する
各チェーンは、少しずつ異なる XML スキーマでデータを公開しています。主なチェーンは次のとおりです。
| チェーン | ヘブライ語名 | プラットフォーム | 備考 |
|---|---|---|---|
| Shufersal | שופרסל | 直接(prices.shufersal.co.il) | 最大手のチェーンで、Shufersal Deal、Sheli、Yesh、Express の各ブランドを運営しています。最も構造化されたデータを提供します。現在の店舗数は Stores フィードで確認してください |
| Rami Levy | רמי לוי | Cerberus(RamiLevi) | 低価格で知られています |
| Yochananof | יוחננוף | Cerberus | イスラエル中部を中心に展開しています |
| Victory | ויקטורי | Cerberus 非対応(プラットフォームに関する注意事項を参照) | Carrefour Israel とは別の会社で、Carrefour のブランドではありません。複数のブランド(Victory、Victory Local、Victory City、Victory Plus、Victory Online)を展開しており、同じ SKU でも価格が異なる場合があります。そのため、「Victory」を単一の事業体として比較するのではなく、特定のブランドと店舗を基準に比較してください |
| Carrefour Israel | קרפור ישראל | 直接(prices.carrefour.co.il) | 1 つの公開元が複数のブランドを並行して掲載しています。同社の Stores フィードには、Carrefour の店舗と並んで בעיר および יינות ביתן ブランドの店舗も記載されているため、すべての店舗が Carrefour ブランドというわけではありません |
| Osher Ad | אושר עד | Cerberus(ユーザー名:osherad、パスワードなし) | ディスカウントチェーンで、大型店舗を展開しています |
| Tiv Taam | טיב טעם | Cerberus(TivTaam) | 非コーシャ商品を扱っているため、商品の品揃えはコーシャ商品のみを扱うチェーンとは異なります |
フィードを正規化された JSON 形式に解析するには、scripts/parse_price_xml.py を使用してください。
主なフィールド:item_code、item_name、manufacturer、price、unit_price、quantity、unit_of_measure、is_weighted、update_date
量り売り商品の計算: bIsWeighted=1 の場合、ItemPrice は店頭のパッケージ価格ではなく、計量単位あたりの価格です。また、その単位は必ずしもキログラムではありません。 UnitOfMeasure を読み取り、単位を正規化してください。Carrefour の実際の PriceFull では、量り売り商品の 560 件中 174 件で、キログラム単位ではなく 100 גרם が指定されていました。そのため、ItemPrice を NIS/kg として扱うと、これらの価格を 10 倍過大に見積もってしまいます。実際に確認された値には、קילוגרם、ק"ג、1קילוגרם、100 גרם、さらには 100 ק"ג もあり、スペースの使い方にも一貫性がありません。Quantity は空の場合も、小数の場合もあります。比較の前に、すべての量り売り商品を共通の単位に正規化してください。そうしないと、チェーン間のランキングに気付かない誤りが生じます。
ステップ 2.5:差分ファイルをスナップショットと照合する
Price または Promo ファイルは差分であり、変更された行のみが含まれます。これをカタログとして解析すると、実際にはある朝の編集内容だけなのに、200 項目の「チェーンカタログ」ができてしまいます。
- その店舗の最新の
PriceFullを起点に、ファイル名のタイムスタンプ順にPriceの差分を適用します。順不同で適用すると、価格の変動が捏造されます。これはステップ 5 のトレンド追跡に致命的です。 - 差分に存在しない行は変更なしであり、削除されたわけではありません。
- 行を販売中の価格として扱う前に
ItemStatusを確認します。販売終了または無効な SKU を購入可能として提示してはいけません。 - 店舗ごとに照合します。差分は店舗単位でキー付けされているため、異なる支店のデータを混ぜると、価格が気付かれないまま上書きされます。
ステップ 3:チェーン間の価格比較
次の方法で、チェーン間で商品を照合します。
- バーコード(最も信頼性が高い方法。イスラエルの標準バーコードのプレフィックスは 729)
- 商品名+メーカー(名称の違いを考慮したファジーマッチング)
- 商品コード(チェーン固有のため、チェーン間の比較では信頼性が低い)
一部の主食・生活必需品は法定価格規制(פיקוח מחירים)の対象であり、規制対象の乳製品などは店頭価格が上限価格以下に抑えられ、チェーン間でほぼ同じです。規制対象の商品について「チェーンを変えれば節約できる」と提示すると、実際に可能な節約額を過大に見積もることになります。現行の規制対象商品一覧を信頼できる情報源から取得できませんでした(経済省のページは機械的に取得できません)。そのため、価格差が実際にあると決めつけず、生活必需品の節約額を提示する前に規制命令を確認してください。
特定の商品について比較表を生成します。
- 最安値のチェーン、平均価格、価格差(最高値-最安値)を算出します。
- 店舗ごとの価格設定に対応します(同じチェーンでも場所によって価格が異なる場合があります)。
ステップ 4:買い物リストを最適化する
買い物リストに基づいて、最も安い選択肢を見つけます:
- **1 店舗:**買い物かご全体が最も安くなる店舗
- **複数店舗:**近隣 2~3 店舗に最適に分ける(費用と移動を最小限に抑える)
PromoFull フィードの最新のプロモーションを考慮します。**プロモーションのフィールドがどこにあるかは方言によって異なります。**素朴なパーサーでは何も取得できず、問題が表面化しないことがあります。
- Cerberus 方言(Rami Levy など):
RewardType、MinQty、DiscountedPrice、DiscountRateは各<Promotion>の直下にあり、クラブ ID はClubs/ClubIdに単一の整数値としてネストされています。 - Shufersal/Carrefour 方言:
<Promotion>にはPromotionID、PromotionDescription、MinNoOfItemOffered、RedemptionLimit、PromotionDays、フラットなClubIDが含まれます。一方、RewardType、MinQty、MaxQty、DiscountRate、MinPurchaseAmountは 1 階層深いGroups/Group/PromotionItems/PromotionItemの中にあります。
実際のフィードでは RewardType の値として 1、2、3、7、9 が使われています。一般的には 1 = 割引後の固定価格、2 = N 個で固定価格、3 = N 個目の割引と解釈されますが、いずれのコードについても、信頼できる公開資料で対応関係を確認できませんでした。そのため、これらは仕様で定められた意味ではなく、PromotionDescription に照らして確認する慣例として扱い、確認していないコードを自動適用しないでください。
クラブ限定の扱いは方言によって異なります。Cerberus 方言では Clubs/ClubId は整数で、!= 0 はクラブ限定を意味します。Shufersal 方言では ClubID はコードで始まる文字列で、たとえば一般向けのプロモーションでは 0 - כלל הלקוחות となります。この文字列を 0 と比較すると必ず一致しないため、整数用のルールを Shufersal に適用するパーサーは、すべてのプロモーションをクラブ限定として除外してしまいます。- 区切り文字より前の整数を解析してから判定してください。ゲストの買い物かごには、クラブ限定のプロモーションを適用しないでください。
**適用する前に、プロモーションの有効性を確認してください。**プロモーションが有効なのは、PromotionStartDate/EndDate の期間内かつ PromotionStartHour/EndHour の時間内に限られ、PromotionDays によって曜日が限定される場合もあります。期限切れ、または対象時間外のプロモーションを適用すると、レジで再現できない買い物かごの合計金額が算出されます。これは、このスキルが返す誤答の中でも特に目立つものです。
代替品にも対応してください。同様の商品で、より安いものを提案します。
シナリオごとに買い物かごの合計金額を計算します。ユーザーの希望(コーシャの要件、オーガニック商品の選択肢、ブランドの好み)を考慮してください。
ステップ 5:価格の傾向を追跡する
追跡対象の商品について、価格を継続的に監視します:
- 大幅な変動(10%超の上昇または下落)を通知
- 追跡対象のカテゴリーについて、週次の価格傾向レポートを作成
- 食品カテゴリー別のインフレ傾向を追跡
- CPI の食品構成要素のデータと比較
ステップ 6:レストラン/ケータリング向けの食材費分析
レストランの経営者向けに、スーパーマーケットのデータをもとに食材費を計算します。
- 入力:食材と分量を含むレシピ
- 出力:入手可能な最安価格に基づく 1 食分あたりの費用
- 食材費の傾向を継続的に追跡
- 主要な食材の価格が急騰した際に通知
- メニューの価格決定に役立つ月次の費用レポートを作成
例
例1:チェーン間で牛乳の価格を比較する
ユーザーの発言:「Tnuva 3% milk 1 literを最も安く買えるのはどこですか?」 操作:
- 該当商品(バーコード照合)について、該当するチェーンおよび店舗の
PriceFullフィードを照会します (ChainId, SubChainId, StoreId, ItemCode)をキーに、チェーンごと、店舗ごとの価格をまとめます- 有効期間と会員制限で絞り込み、
PromoFullの適用中のプロモーションを適用します - 価格順に並べた比較表を作成します
まず、価格規制に関する質問に答えてください。 3%牛乳は価格規制対象の生活必需品のため、店頭価格に上限があり、チェーン間の価格差はほとんどありません。率直な回答は「この商品は価格上限が設定されているため、チェーンを変えても実質的な節約にはなりません」です。そのうえで、価格差が実際にある、買い物かごに含まれる価格規制対象外の商品を案内してください。価格規制対象商品について「店を変えれば節約できます」という提案をしてはいけません。また、価格を記憶に頼って伝えてはいけません。価格は毎日変わるため、最新のフィードから取得してください。
例2:1週間分の買い物リストを最適化する
ユーザーの発言:「今週の買い物リストはこちらです。ラマト・ガン近郊で最も安い方法を探してください」 操作:
- 買い物リストを解析します(15品目)
- ラマト・ガン近郊に店舗があるチェーンの価格を調べます
- 1店舗で購入する場合を計算します(Rami Levy:285 NIS、Shufersal:310 NIS、Yochananof:295 NIS)
- 2店舗に分けて購入する最適な方法を計算します(プロモーション適用のRami Levy + Shufersal:262 NIS)
- さらに18 NIS節約できる代替品を3つ提案します 結果:1店舗で最も安いのはRami Levyの285 NISです。最適な組み合わせは、Rami Levy(10品目、195 NIS)+ Shufersal(プロモーション適用の5品目、67 NIS)= 262 NISです。1店舗で購入する場合と比べた節約額は合計23 NISです。
例3:レストランメニューの食材費を追跡する
ユーザーの発言:「シャクシュカ料理に使う食材(トマト、卵、玉ねぎ、ピーマン、スパイス)の費用を追跡してください」 操作:
- 価格フィードから一致する商品を特定します(生トマト、Lサイズの卵、黄玉ねぎ、ピーマン、クミン、パプリカ)
- チェーン間で、食材ごとの最安値を調べます
- 1人前の費用を計算します(卵2個、トマト3個、玉ねぎ1個、ピーマン1個、スパイス)
- これらの食材について、週次の価格モニタリングを設定します
- 基準となる費用レポートを作成します 結果:現在の1人前の費用は8.40 NISです(最安のチェーンを組み合わせた場合)。費用の32%を卵が占めます。価格アラートが設定され、食材の価格が10%を超えて変動した場合に通知されます。
同梱リソース
リファレンス
references/chain-feeds.md-- プラットフォーム別に整理された、チェーンごとのフィードエンドポイント(Shufersal Direct、Carrefour Direct、Cerberus / PublishedPrices)。XMLスキーマのドキュメント、更新スケジュール、既知の形式の違いが含まれています。手順1~2でチェーンデータにアクセスする際に参照してください。
スクリプト
scripts/parse_price_xml.py--PriceFullおよびPromoFullフィードを正規化されたJSONに解析します。ドキュメントからXMLの方言を自動検出するため、どのチェーンでも動作します(--chainは由来を示すラベルとしてのみ使用されます)。チェーン/サブチェーン/店舗の識別情報を出力し、会員ID文字列形式を含む両方の方言のプロモーションを解析します。また、マジックバイトでgzipを検出し、BOM付きUTF-16も処理します。実行方法:python3 scripts/parse_price_xml.py --help
おすすめのMCP サーバー
| MCP | 提供機能 |
|---|---|
| イスラエルのスーパーマーケット価格 | 対応チェーンの価格透明化法フィードをラップします。Shufersal direct、Carrefour publishprice、Cerberus FTPの各転送方式を自動的に処理します。利用可能な場合は、手動でXMLを処理する代わりに使用してください。 |
| Shufersal MCP | shufersal.co.ilでのカート操作(検索、カートへの追加、レシピからカートへの追加)を提供します。価格情報に加えて、実際の購入手続きも行えます。 |
注意点
- チェーンがCerberusに対応していると決めつけないでください。Rami Levy、Yochananof、Osher Ad、Tiv Taam、Dor Alonは対応していますが、Victory、Super-Pharm、Good Pharm、Bareket、Megaは対応していません。また、Hazi HinamはCerberusにログインすると商品一覧が空ですが、自社サイトでは完全なファイル一覧を公開しています。同様に、ほとんどのチェーンには存在しないため、
prices.<chain>.co.ilホストを捏造しないでください。あるチェーンが公開をやめたと結論づける前に、references/chain-feeds.mdを確認し、再度プローブしてください。 - Cerberusは静的ファイルサーバーではなく、ディレクトリ一覧の取得はGETではなくPOSTです。
/file/json/dirへのGETはHTTP 200を返しますが、その内容は{"aaData":[],"error":"Invalid request method used for this operation."}です。errorキーを確認しないと、「このチェーンにはファイルがない」と誤解してしまいます。一覧取得のPOSTには、ログイン前のページのものではなく、ログイン後に/fileから読み取ったcsrftokenも必要です。セッションなしで/file/d/<filename>をリクエストすると、ファイルではなく短いリダイレクト用スタブをHTTP 302で返すため、レスポンスをデータとして扱う前に、ステータスが2xxでgzipペイロードがあることを必ず確認してください。 - 旧「Nibit (Matrix)」ホストの
matrixcatalog.co.ilは現在まったく名前解決できません(2026-08-27時点でNXDOMAIN)。そのため、リクエストはタイムアウトではなくDNSエラーで失敗します。VictoryとMahsani A'Shukの後継はlaibcatalog.co.ilです。名前解決はできますが、こちらのプローブからは接続を拒否されました。これを基に作業する前に、状態を確認してください。 - イスラエルの価格には、税抜き価格の米国とは異なり、デフォルトでVAT(18%)が含まれます。18%の税率は2025年1月1日から適用されています(17%から引き上げ)。2026年1月に19%へ引き上げる案は、クネセトの予算投票で否決されました。2025年より前に訓練されたエージェントは、18%を17%に「訂正」することがありますが、そうしてはいけません。また、エージェントは訓練データの前提によって、コスト比較でVATを二重に計上したり、無視したりすることがあります。
- イスラエルの製品バーコードには国コード729が使われますが、輸入製品の中には元の国のバーコードを維持しているものもあります。同じ製品でもチェーンごとにバーコードの形式が異なる場合、エージェントはチェーンをまたいだ照合に失敗することがあります。ストアブランド商品には、
2で始まる独自コードが使われることが多く、チェーンをまたいで照合できません。 - クラブIDフィールドの名前と型は、方言によって異なります。Cerberusのフィードではネストされた整数の
Clubs/ClubId、Shufersal/Carrefourでは0 - כלל הלקוחותのようなフラットな文字列のClubIDです。Cerberus用の整数判定をShufersalの文字列に適用すると、すべてのプロモーションがクラブ限定と判定され、気づかないまますべて破棄されます。フィールド全体を無視すると、節約額を過大に報告します。先頭のコードを解析してから判定してください。 - 「Mega」と「Yeinot Bitan」はCarrefourへ完全にブランド変更したわけではありません。3つのバナーすべてを対象とする公開元は1つです。Carrefour Israel独自の
Storesフィードには、Carrefourの店舗に加えて、בעירおよびיינות ביתןのブランド店舗も記載されています。代わりに使える別個のMegaフィードはなく、単独のprices.mega.co.ilホストは403を返し、CerberusにMegaとしてログインすることもできません。「Victory」はCarrefourのバナーではなく、まったく別の企業です。エージェントはこの2つをよく混同します。また、Victoryは同じSKUでも価格が異なる複数のバナーを運営しているため、「Victory」を単一の事業体として扱うのではなく、比較対象を特定のバナーと店舗に絞ってください。 - 薬局チェーン(Super-Pharm、Good Pharm)は法律の対象で、商品を公開していますが、Cerberus経由ではありません。Super-Pharmは独自のポータル
prices.super-pharm.co.ilを運営し、Good PharmはBina Projects経由で公開しています。SKUの範囲はドラッグストア商品(トイレタリー、一般用医薬品、ベビーフード)で、生鮮食品、乳製品、肉類は含まれません。そのため、Super-Pharmの牛乳価格を比較しようとしないでください。 - Cerberus方言では
RewardTypeと、これに関連するMinQty/MaxQty/DiscountRateは<Promotion>要素にありますが、Shufersal/Carrefour方言では1階層深く、Groups/Group内の各PromotionItemにあります。一方の形式に合わせて書かれたパーサーは、もう一方では何も見つけられず、プロモーション数をゼロと報告します。また、MinPurchaseAmount(Shufersal)とMinPurchaseAmnt、MinNoOfItemOfferedとMinNoOfItemOferedのように、フィード間でスペルが実際に異なる点にも注意してください。
参考リンク
| 出典 | URL | 確認する内容 |
|---|---|---|
| Wikisource、「食品分野における競争促進法」(法令本文) | https://he.wikisource.org/wiki/חוק_קידום_התחרות_בענף_המזון | 平易な要約、立法の経緯、最近の改正 |
| 経済省、価格公開規則 | https://www.gov.il/he/pages/cpfta_prices_regulations | 6 種類のファイルに関する仕様、命名規則、エンコード規則。Cloudflare で保護されているため、ブラウザーで開いてください |
| Shufersal Direct Portal | https://prices.shufersal.co.il | Shufersal の最新の PriceFull/PricesPromotions/Stores フィード |
| Cerberus PublishedPrices Portal | https://url.publishedprices.co.il/login | Rami Levy、Yochananof、Tiv Taam、Osher Ad、Dor Alon など、Cerberus 系チェーンの最新フィード。Victory、Super-Pharm、Good Pharm、Bareket、Mega はここにはありません。プラットフォームの表を参照してください |
| Carrefour Israel Direct Portal | https://prices.carrefour.co.il | Carrefour/Mega/Yeinot Bitan 店舗の最新フィード |
| OpenIsraeliSupermarkets、コミュニティーによるパーサー | https://github.com/OpenIsraeliSupermarkets | コミュニティーで利用されている Python スクレイパーとパーサーのリファレンス。有効なライブラリは il-supermarket-scraper(PyPI)で、Cerberus の CSRF ログイン、チェーンコードの検索、ファイル一覧の取得、解凍に対応しています。そのスクレイパークラスは、各チェーンが現在どのプラットフォームで公開しているかを確認するための、最も信頼できる照合手段でもあります |
| Super-Pharm 価格ポータル | http://prices.super-pharm.co.il | Super-Pharm 独自のフィード一覧(Cerberus にはありません) |
| Bina Projects ポータル(Good Pharm) | https://goodpharm.binaprojects.com/Main.aspx | Good Pharm と複数の小規模チェーンがここで公開しています |
| Hazi Hinam の価格ファイル | https://shop.hazi-hinam.co.il/Prices | Hazi Hinam 独自のファイル一覧 |
| イスラエル税務当局、解釈通達 01/2025 | https://www.gov.il/BlobFolder/dynamiccollectorresultitem/represent-info-051224-2/he/vat_represent-info-051224-2.pdf | 現在のイスラエルの VAT 税率(2025 年 1 月 1 日以降 18%)。過去の税率変更も記載されています |
トラブルシューティング
エラー:「XML フィードのダウンロードに失敗しました」
原因:特に Shufersal の場合、最も可能性が高い原因は署名付き URL の有効期限切れです。Shufersal ポータルのダウンロードリンクは、se= で指定された有効期限が約 30 分後に設定され、時刻の境界に固定された Azure Blob URL です。そのため、以前に取得したリンク、キャッシュされたリンク、またはドキュメントからコピーしたリンクは失敗します。それ以外の場合は、チェーンがプラットフォームを移行したか(プラットフォームの表を参照)、ファイルがまだ実際に公開されていません。
解決方法:保存済みの URL を再利用せず、ダウンロードの直前にファイル一覧を再取得してください。他のプラットフォームでは、一覧取得エンドポイントを再度確認し、チェーンが移行していないことを確認してください。フィードは夜間に更新されるため、日中の早い時間帯に PriceFull がないのはエラーではなく、想定される状態です。
エラー:「チェーン横断比較で商品が見つかりません」
原因:チェーンによって商品名またはバーコードが異なります。 解決方法:まずバーコードで照合してください(最も信頼性があります)。バーコードで一致しない場合は、メーカー名を使ったあいまいな商品名照合を試してください。同じ商品でも、チェーンによって商品名が異なることがあります(例:「חלב תנובה 3%」と「חלב 3% תנובה」)。
エラー:「価格データが古くなっています」
原因:前日のキャッシュデータを使用しているか、チェーンがまだ更新していません。 解決方法:XML フィードの UpdateDate フィールドを確認してください。ほとんどのチェーンは夜間に更新します。データが 24 時間以上古い場合は、最新データを強制的にダウンロードしてください。プロモーションフィードの更新は、PricesFull の更新より遅れることがあります。
エラー:「買い物リストの最適化が遅い」
原因:すべての商品をすべてのチェーンおよび店舗で比較すると、計算コストが高くなります。 解決方法:設定可能な範囲(デフォルト:5 km)内に店舗があるチェーンだけに比較対象を絞ってください。ユーザーが実際に利用するチェーンで事前にフィルタリングしてください。最適化のたびに最新データを取得するのではなく、キャッシュした価格データを使用してください。
エラー:「Cerberus が空のファイルリストを返す」
原因(2026-08-27 に検証済み):GET でリストをリクエストしていました。/file/json/dir は POST のみを受け付け、GET に対して HTTP 200 と {"aaData":[],"error":"Invalid request method used for this operation."} を返します。もう一つの検証済みの原因は、古い csrftoken です。リストの取得には、ログイン前のトークンではなく、ログイン後に /file に表示されるトークンが必要です。
原因ではないことを検証済み:通常と異なる User-Agent。ここより後のすべてのプローブは、標準の curl User-Agent を使用し、ブロックされることなくログイン、リスト取得、ダウンロードを完了しました。
解決策:references/chain-feeds.md の手順に従い、空の aaData を「ファイルなし」と判断する前に、必ず error キーを確認してください。
エラー:「Chain は Cerberus にログインするが、ファイルがない」
原因(2026-08-27 に検証済み):Chain は Cerberus 経由で公開していません。Victory、SuperPharm、GoodPharm、Bareket、Mega はログインに失敗します(302 ではなく、200 とフォームの再表示)。HaziHinam は認証されますが、ファイルが 0 件と表示される一方、shop.hazi-hinam.co.il/Prices では完全なテーブルが提供されています。
解決策:公開を停止したと結論付ける前に、references/chain-feeds.md で各チェーンの実際のプラットフォームを確認してください。「チェーン X は公開していない」と確信をもって判断するには、チェーン X 独自のポータルを積極的に検索する必要があります。