mcpField
I
israel-gov-api

israel-gov-api

github.com/skills-ilデータ・データベース14169 回インストール今日更新
リポジトリ

israel-gov-api について

israel-gov-apiは、イスラエルのdata.gov.il CKAN APIでデータセットを検索、照会、分析するためのスキルです。検索やページングに加え、クエリ制約やデータ品質の注意点を扱います。

主な機能

  1. 01キーワードや省庁別のデータセット検索
  2. 02メタデータと表形式レコードの取得
  3. 03APIクエリの絞り込み、並べ替え、ページング
  4. 04SQL、WAF、応答形式の問題への対処
  5. 05データ品質と更新時期の確認

活用シーン

  1. 01調査テーマに合う政府データの検索
  2. 02条件を指定したレコードの抽出
  3. 03項目の違いを確認しながらデータセットを結合
  4. 04データ上の注意点を添えた統計の提示

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/skills-il/government-services --skill israel-gov-api

インストール後、Claude Code で/israel-gov-apiを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

CHANGELOG.md
evidence.json
metadata.json
optimization-log.json
SKILL_HE.md
references/
ckan-api-reference.md
scripts/
query_datagov.py

詳細

イスラエル政府 API

手順

ステップ 1:データのニーズを把握する

ユーザーに次の項目を尋ねます。

  • トピックは何ですか?(交通、健康、教育、経済など)
  • 対象地域はどこですか?(全国、特定の都市・地域、特定の住所)
  • 対象期間はいつですか?(現在、過去、時系列)
  • 形式は何ですか?(生データ、要約統計、可視化)
ステップ 2:データセットを検索する

data.gov.il の CKAN API を使用して、関連するデータセットを検索します。

キーワードで検索:

GET https://data.gov.il/api/3/action/package_search?q=KEYWORD&rows=10

組織(省庁)で検索:

GET https://data.gov.il/api/3/action/package_search?fq=organization:MINISTRY_ID

一般的な組織 ID(以下の 7 件はすべて、2026-08-27 に package_search?fq=organization:<id> で再検証済みで、それぞれ 0 件を超える結果が返されています):

省庁IDヘブライ語
イスラエル中央統計局lamashalishka hamerkazit listatistika
イスラエル運輸省ministry_of_transportmisrad hatahaburah
イスラエル保健省ministry-healthmisrad habriut
イスラエル教育省ministry_of_educationmisrad hachinuch
イスラエル税務局taxes-authorityrashut hamisim
イスラエル土地庁the_israel_lands_administrationrashut mekarkei yisrael
イスラエル内務省interior_affairsmisrad hapnim
ステップ 3:データを取得してクエリする

データセットが見つかったら:

データセットの詳細を取得する:

GET https://data.gov.il/api/3/action/package_show?id=DATASET_ID

表形式データをクエリする(datastore):

GET https://data.gov.il/api/3/action/datastore_search?resource_id=RESOURCE_ID&limit=100

フィールド値でフィルターする:

GET https://data.gov.il/api/3/action/datastore_search?resource_id=RESOURCE_ID&filters={"field_name":"value"}&limit=100

特定のフィールドを選択して並べ替える:

GET https://data.gov.il/api/3/action/datastore_search?resource_id=RESOURCE_ID&fields=field1,field2&sort=field1 desc&limit=100

リソース内を全文検索する:

GET https://data.gov.il/api/3/action/datastore_search?resource_id=RESOURCE_ID&q=search+term&limit=100

datastore_search_sql は機能しますが、WAF による穴が 1 つあります。 2026-08-27 にライブ環境で再テストしたところ、SELECT、WHERE、ORDER BY、GROUP BY、sum()、LIMIT はすべて、success:true と実際の行を含む HTTP 200 を返しました。WAF がブロックするのは、count(、1=1、UNION など、インジェクション判定シグネチャーに一致する一部の文字列です。その際、JSON エラーでも 403 でもなく、HTML の 404 ページを返すため、success だけを確認するクライアントは、ブロックをパースエラーと誤認します。

  • count(*) の代わりに sum(1) を使います。SELECT col, sum(1) AS n FROM "<resource_id>" GROUP BY col ORDER BY n DESC LIMIT 10 は、ブロックされる count(*) 形式とまったく同じ結果を返します。
  • 単純に行数を数えるだけなら、SQL は不要です。datastore_search の total フィールドに、すでにその値が含まれています。
  • 実際のキーベースページングを行う唯一の方法が SQL です。 filters では実行できませんが、SELECT ... FROM "<rid>" WHERE _id > <last_id> ORDER BY _id LIMIT <n> は、深い offset とは異なり、どの深さでも高速に動作します。
  • 何かを診断する前に、レスポンスの SHAPE を確認してください。 data.gov.il は、2 種類の失敗に対してまったく異なる応答を返します。これらを混同すると、エージェントは誤った修正に進んでしまいます。
    • HTTP 409 の JSON に psycopg2 のメッセージが含まれている場合、SQL は Postgres まで到達しており、Postgres が拒否したということです(不明なカラム、不正な構文、不明なテーブル)。メッセージを読み、クエリを修正してください。
    • 約 1.4 kB の HTTP 404 の HTML ページが返る場合、リクエストは SQL レイヤーに到達していません。これはサイトの一般的なエラーページで、少なくとも 3 つの異なる原因が考えられます。WAF に一致する文字列、未定義のアクション名、存在しない resource_id です。WAF が原因だと決めつけないでください。同じリソースに対して既知の正常なクエリ(SELECT * FROM "<rid>" LIMIT 1)を再実行して原因を切り分けます。成功した場合はリソースに問題はなく、SQL が WAF に引っかかっています。HTML が返る場合は、resource_id が無効か、アクション名が誤っています。

ヒント:

  • フィールド名はヘブライ語であることが多いため、まず datastore_search を limit=1 で実行してフィールド名を確認してください。
  • filters パラメーターに JSON オブジェクトを指定すると、フィールドを完全一致で絞り込めます(例:filters={"city_code":"5000"})。
  • q パラメーターを使うと、すべてのフィールドを対象に全文検索できます。
  • 大規模なデータセットでは、ページネーションに limit と offset を使います。
  • 日付フィールドはさまざまな形式の場合があります。データセットのドキュメントを確認してください。

ページネーション:

  • limit + offset でページングします。レスポンスに含まれる _links.next(offset ベースの次ページ URL)を使うか、offset を自分で増やせます。深い offset によるページングも引き続き動作し(大きな offset でもデータが返され、厳密な上限はありません)、ページを進めるほど各リクエストが遅くなります。
  • data.gov.il の filters は完全一致のみをサポートするため、filters による _id キーベースページングはできません。filters={"_id":">N"} は success:false(無効なクエリ)を返します。offset によるページングを使うか、datastore_search_sql で WHERE _id > N ORDER BY _id を指定してください。こちらでは実際のキーベースページングが可能です(ステップ 3 を参照)。
  • 非常に大規模なデータセットや全件抽出の場合は、records_format=csv を指定するか、package_show の resources[].url からリソースファイルをダウンロードしてください。リソースファイルは CSV ではなく XLSX のことが多い(mosdot リソースが該当)ため、確実に CSV を取得するには records_format=csv を使ってください。形式を決めつける前に resources[].format を確認してください。
  • レスポンスの total フィールドは、ページ内ではなくリソース内の全レコード数です。必要なページ数の計画に使ってください。
  • records_format では objects(デフォルトの JSON)、lists(位置ベースの配列)、csv、tsv を指定できます。大量のデータを取得する場合、lists と csv は明らかに高速で効率的です。ストリーミングや一括抽出では、こちらを使ってください。
ステップ 3b:データレイヤーの落とし穴(数値を引用する前にお読みください)

ステップ 3 では、行を含む 200 が返されます。ここでは、その行が依然として正しくない場合を説明します。以下のすべては、2026-08-27 に稼働中の API で再現されています。

テキスト列には空白がパディングされており、数値に見えるコードもテキストとして保存されています。 CBS の地方自治体リソースでは、סמל_ישוב の型は text で、値の末尾に空白があります。filters={"סמל_ישוב":"4000"} は success:true と total:0 を返しますが、"4000 " ならハイファが返されます。行数 0 の成功は、この API が返すサイレントな誤回答の中で最もよくあるものです。エージェントは「データがありません」と報告し、何も問題がないように見えてしまいます。テキストフィールドを等価フィルターで絞り込む前に、必ず limit=1 で生の値を確認し、filters ではパディングを含めた完全一致の文字列を指定してください({"סמל_ישוב":"4000 "} は機能します)。または、q= の全文検索に切り替えてください。次の段落で説明する理由から、SQL で TRIM して解決することはできません。

WAF は、述語や関数でヘブライ語名の列を参照する SQL もブロックします。 これは API の制約の中で最も意外なもので、どのツールを使うべきかを左右します。2026-08-27 に確認済みです。

SQL結果
SELECT "שנה" FROM "<rid>" LIMIT 1200、動作します
... GROUP BY "שנה"200、動作します
... ORDER BY to_date("תאריך רישום עמותה",'DD/MM/YYYY') DESC200、動作します。テキスト形式の日付を正しく処理する方法です
... WHERE "שנה" = 2015HTML 404、ブロックされます
... WHERE TRIM("סמל_ישוב") = '4000'HTML 404、ブロックされます
... WHERE shnat_yitzur = 2016(ラテン文字の列)200、動作します
... WHERE _id > 100200、動作します

したがって、使い分けは次のとおりです。ヘブライ語の列は datastore_search の filters で絞り込みます(ヘブライ語の値も問題なく扱えますが、上記の末尾の空白に注意してください)。_id によるキーページング、ラテン文字の列の述語、GROUP BY、sum(1)、to_date による並べ替えには SQL を使います。SQL でヘブライ語の列を TRIM しようとしないでください。代わりに、filters でパディングを含めた完全一致の文字列を指定してください。

地方自治体名を使った結合は、正規化しないと機能しません。 このスキルで結合するよう案内している 2 つのリソースでは、同じ都市の表記が 3 通りあります。localities では 'תל אביב - יפו '(末尾に空白あり)、mosdot の שם ישוב では 'תל אביב - יפו'、שם רשות では 'תל אביב-יפו' です。単純な等価結合では、すべての行が除外されます。両方のデータを取得し、コード内で正規化してください(空白を削除し、ハイフンの前後の空白を統一します)。ヘブライ語の列に対する関数はブロックされるため、この正規化を SQL に任せることはできません。

複数年にわたるパネルデータを含むリソースがあり、見出しに表示される行数は対象の数ではありません。 mosdot リソースには、2011 年から 2015 年までの各年について、機関 1 つあたり 1 行が格納されています。そのため、119,761 行は同じ機関の 5 年分のデータであり、2015 年以降のデータは含まれていません。件数を数える前に שנה で絞り込み、リソースの合計行数を「学校の数」として提示しないでください。

リソースメタデータの鮮度は、データの鮮度を意味しません。 mosdot の resource_show は、ファイルが再公開された時期を示す last_modified として 2026 年を報告しますが、データ自体は 2015 年までです。ユーザーに数値を伝える前に、データ内の日付列からデータの時点を判断してください。

日付列はテキストなので、sort による並べ替えは辞書順になり、正しくありません。 amutot リソースでは、תאריך רישום עמותה と תאריך עדכון סטטוס の両方の型が text で、形式は DD/MM/YYYY です。そのため、sort=תאריך רישום עמותה desc では、2026 年 1 月の行よりも 31/12/2025 が上に来ます。日付の「日」を先に並べ替えているからです。同じリソース内でも、列によって形式が異なる場合があります。実際の時系列順に並べ替えるには、SQL を使います。ORDER BY to_date("תאריך רישום עמותה",'DD/MM/YYYY') DESC では、2026-08-27 に確認したとおり、26/08/2026 が先頭に返されます。ヘブライ語の列でも、ORDER BY 内での to_date は許可されています。ブロックされるのは述語と TRIM だけです。

records_format=csv が返すのは、ヘッダーのない CSV 文字列です。 列名は result.fields に順番どおりに格納されています。自分で列名を先頭に追加してください。そうしないと、ヘブライ語の列が気付かないうちにずれてしまいます。 クエリを実行する前に datastore_active を確認してください。 package_show/resource_show では各リソースについてこの値を確認でき、format とは独立しています。mosdot リソースの形式は XLSX ですが、それでも datastore_active:true です。datastore_active:false のリソースは、resources[].url からダウンロードし、ローカルで解析する必要があります。

ステップ 4:分析と提示

取得したデータについて:

  1. 主な調査結果をわかりやすい言葉で要約します
  2. 要望があれば基本統計量(平均値、中央値、傾向)を算出します
  3. データに適した可視化(棒グラフ、折れ線グラフ、地図)を提案します
  4. データの鮮度(最終更新日)と注意点を記載します
  5. 参照用に data.gov.il のデータセットへの直接リンクを提示します
ステップ 5:相互参照(応用)

複数のデータセットを組み合わせる場合:

  1. 共通のキー(市区町村コード、日付、カテゴリコード)を特定します
  2. 地理的な結合にはイスラエルの行政コード(CBS の市区町村コード)を使用します
  3. データセット間でフィールド名が異なる場合があるため、名前ではなく内容を基に照合します
  4. データの系譜を記録します。分析にどのデータセットが使われたかを明記します

よくリクエストされるデータセット

以下のリソース ID は、2026-08-27 に datastore_search?resource_id=<id>&limit=1 を使って実データを確認済みです。応答 BODY を確認してください(records 配列が空の 200 応答は、ステータスにかかわらずリソースが無効であることを意味します)。data.gov.il の ID は予告なく変更されます。ユーザーに提示する前に、必ず再確認してください。

データセットリソース ID説明
個人用および商用車両(車両登録)053cea08-09bc-40ec-8f7a-156f0677aff3メーカー、モデル、年式を含む、個人用および商用車両のナンバープレートの全登録簿。417 万行。
公共交通機関の車両cf29862d-ca25-4691-84f6-1be60dcb4a1e公共交通機関の車両(バス、タクシー)の有効なナンバープレート。65,953 行。
教育機関(mosdot)5548fd63-5868-4053-ad81-98caddc5e232教育省の監督下にある教育機関の特性。119,761 行。リソース形式は XLSX です。
登録済みアムタ(NGO)be5b7935-3922-45d4-9638-08871b17ec95法務省の協会/非営利団体登録簿。75,680 行。

その他の分野では、package_search を使って現在のデータセットを探し、次に package_show を使って有効な resources[].id を取得してください。データセットが年ごとに再公開されるたび、これらの ID は変わります。

data.gov.il にないもの(2026-08-27 に確認済み。これらを CKAN で検索するとユーザーの手間を無駄にし、エージェントがデータセットを捏造するおそれがあります):

データ実際の所在CKAN での確認結果
不動産取引nadlan.gov.il(独自 API。CKAN ではありません)q=nadlan の件数は 0。fq=organization:taxes-authority は 4 件のデータセットを返しますが、すべて税関関連です
公共交通機関の GTFSgtfs.mot.gov.il(静的な zip ファイル)q=gtfs は無関係なデータセットを 2 件返します
地域別人口を含む、ほとんどの CBS 統計系列cbs.gov.ilfq=organization:lamas は 14 件のデータセットを返しますが、その大半は道路事故の PUF と地域コード一覧で、人口を含むものはありません
金融・財務系列boi.org.ilCKAN を通じて公開されていません

CKAN の lamas 組織が扱う CBS の出力は、その一部に限られます。特定の系列がポータルにあることを確認するまでは、CBS の系列をユーザーに提供できると約束しないでください。

例

例 1:学校データを見つける(完全な一連のワークフロー)

ユーザーの依頼:「テルアビブの学校に関するデータが必要です」

操作(検索手順を省略しないでください。リソース ID は入れ替わります):

  1. 候補となるデータセットを検索します:
    curl -s "https://data.gov.il/api/3/action/package_search?q=mosdot&rows=5"
    
  2. 選んだデータセットを確認し、有効な resources[].id を取得します:
    curl -s "https://data.gov.il/api/3/action/package_show?id=mosdot" \
      | python3 -c "import sys,json; r=json.load(sys.stdin)['result']['resources']; [print(x['id'], x['format'], x.get('name','')) for x in r]"
    
  3. limit=1 でフィールド名を確認します:
    curl -s "https://data.gov.il/api/3/action/datastore_search?resource_id=5548fd63-5868-4053-ad81-98caddc5e232&limit=1"
    
  4. mosdot リソースでは、地域名は数値の市コードではなく、NAME フィールド שם ישוב(都市名のテキスト。例:תל אביב - יפו)として公開されています。都市名でフィルターする(または全文検索の q= を使う)必要があります。ヘブライ語はパーセントエンコードしてください:
    # full-text search for Tel Aviv schools (q = "תל אביב", percent-encoded)
    curl -s "https://data.gov.il/api/3/action/datastore_search?resource_id=5548fd63-5868-4053-ad81-98caddc5e232&q=%D7%AA%D7%9C%20%D7%90%D7%91%D7%99%D7%91&limit=100"
    
    数値の CBS 地域コード(テルアビブ・ヤッフォは 5000、ハイファは 4000、エルサレムは 3000)は、フィールド סמל_ישוב にあります。ただし、これは mosdot リソースではなく、CBS の地域データセット(リソース 5c78e9fa-c2e2-4771-93ff-7f400a12f7ba)に含まれています。値には前後に空白があるテキストが使われているため、TRIM(...) で照合し、結合の前に都市名を正規化してください(ステップ 3b を参照)。
  5. 年を選んでください。そうしないと、5 年分の重複が表示されます。 mosdot リソースは 2011 年から 2015 年のみを対象とした年次パネルであり、フィルターなしの q=תל אביב の結果 18,574 は学校数ではありません。שנה はヘブライ語名の列なので、SQL ではなく datastore_search を使ってフィルターしてください(ヘブライ語の列に対する WHERE は WAF によってブロックされます。ステップ 3b を参照):
    # schools in the 2015 slice, filtered by year through `filters`
    curl -s 'https://data.gov.il/api/3/action/datastore_search?resource_id=5548fd63-5868-4053-ad81-98caddc5e232&filters=%7B%22%D7%A9%D7%A0%D7%94%22%3A%222015%22%7D&limit=1'
    
    件数には、そのレスポンスの total を確認してください。年ごとの内訳は、WHERE とは異なり、ヘブライ語の列に対する GROUP BY が許可されているため、正規の SQL クエリで取得できます:
    SELECT "שנה", sum(1) AS n FROM "5548fd63-5868-4053-ad81-98caddc5e232" GROUP BY "שנה"
    

結果:指定した年のテルアビブの学校一覧を、2015 年時点のデータであることを明記して提示します。現在の数値としては提示しません。

例 2:カタログでは対応できない依頼

ユーザーの依頼:「ハイファの住宅価格の推移を見せてください」

ここでの正しい対応は、検索を続けるのではなく、そこで止めることです。不動産取引データは data.gov.il にありません。q=nadlan の件数は 0 で、税務当局の 4 つの CKAN データセットはすべて税関関連です(2026-08-27 に確認)。

操作:

  1. 検索を一度実行し、推測ではなく根拠に基づいて回答します。
  2. 件数が 0、または関連性がない場合は、そのことを明確に伝え、独自の非 CKAN API で取引データを公開している nadlan.gov.il を案内します。
  3. 別の組織のもっともらしいデータセットで代用してはいけません。また、数値を合成してはいけません。

結果:ユーザーは、3 ターンかけることなく、実際にデータを保有する情報源へ案内されます。この例があるのは、このスキルでエージェントが起こしうる最も重大な問題、つまり検索して何も見つからず、データセットを捏造してしまうことを防ぐためです。

例 3:自治体データの比較

ユーザーの依頼:「イスラエルの都市間で教育支出を比較してください」

操作:

  1. package_search?q=%D7%AA%D7%A7%D7%A6%D7%99%D7%91%20%D7%97%D7%99%D7%A0%D7%95%D7%9A(ヘブライ語で「予算」+「教育」をパーセントエンコードしたもの)を実行します。
  2. 自治体予算のデータセットを選び、package_show で有効なリソース ID を取得します。
  3. datastore_search で教育カテゴリの行に絞り込みます。大規模なリソースの場合は offset でページングするか、リソースの CSV をダウンロードしてください。
  4. 1 人当たりに正規化するには人口データが必要ですが、人口データは CKAN にありません(fq=organization:lamas に人口テーブルはありません)。cbs.gov.il から取得し、出典を明記するか、1 人当たりへの正規化を行っていないことを明記して実額を提示してください。

結果:データソースと年を明記し、イスラエルの主要自治体間で、生徒 1 人当たりの教育支出を順位付けして比較します。

同梱リソース

スクリプト
  • scripts/query_datagov.py -- コマンドラインからデータセットを検索し、リソースを確認して、data.gov.il の CKAN API にクエリを実行します。サブコマンド:search、dataset、query、sql、orgs。query は --filters/--fields/--sort/-q/--offset/--records-format を受け付けます。sql は datastore_search_sql を使ってキーセットページングと集計を行います。どちらも、連鎖して利用できる機械可読な出力を得るための --json を受け付けます。実行方法:python scripts/query_datagov.py --help
参考資料
  • references/ckan-api-reference.md -- data.gov.il CKAN API のすべてのエンドポイントを掲載しています。検索パラメーター、データストアのクエリー構文、よく使われる組織 ID も含まれます。API 呼び出しを作成する際や、クエリー構文の問題をデバッグする際に参照してください。

おすすめの MCP サーバー

このスキルを MCP サーバーと組み合わせると、HTTP 呼び出しをスクリプトで記述せずに、エージェントがツールとして data.gov.il(またはそこから派生したデータセット)を直接呼び出せます。

MCPURL利用できる機能
datagov-israelhttps://agentskills.co.il/he/mcp/datagov-israeldata.gov.il CKAN API(search、package_show、datastore_search)を MCP ツールから直接利用できます。
data-gov-ilhttps://agentskills.co.il/he/mcp/data-gov-il同じ data.gov.il CKAN API をラップする別の MCP です。
israel-vehicleshttps://agentskills.co.il/he/mcp/israel-vehicles車両登録データセットに特化した MCP(ナンバープレート照会、メーカー/モデル/年)。
israel-amutothttps://agentskills.co.il/he/mcp/israel-amutot司法省のamutot(NGO)登録簿に特化した MCP です。
israel-electionshttps://agentskills.co.il/he/mcp/israel-electionsイスラエルの選挙結果データに特化した MCP です。

このスキルがユーザーにクエリーの手順を案内する場合、専用 MCP がインストールされていればそちらを優先し、そうでなければ CKAN API を直接使用してください。

注意点

  • イスラエル政府のデータ API(data.gov.il)は、予告なく URL やエンドポイント構造を頻繁に変更します。エージェントが、先月は使えたものの現在は 404 を返すエンドポイントをハードコードしている場合があります。ID を示す前に、package_show でリソース ID を再確認してください。
  • data.gov.il API は、デフォルトでヘブライ語の列見出しを返します。JSON または CSV 出力に ASCII 以外の見出しが含まれる場合、エージェントがレスポンスを解析できないことがあります。
  • ヘブライ語のフィルター値と q パラメーターは UTF-8 でパーセントエンコードする必要があります。URL にヘブライ語をそのまま記述すると、一部の HTTP クライアント(特定の curl ビルド、古いバージョンの requests、一部のプロキシ)で問題が発生します。例:「רכב」を検索する場合は q=%D7%A8%D7%9B%D7%91、「חיפה」でフィルターする場合は filters=%7B%22city%22%3A%22%D7%97%D7%99%D7%A4%D7%94%22%7D とします。
  • レート制限は文書化されておらず、その厳しさは誇張されやすいものです。**2026-08-27 に検証済み:6.5 秒間に datastore_search を連続で 25 回呼び出したところ、すべて 200 を返し、セッション中に約 60 回呼び出してもスロットリングは一切発生しませんでした。**適度な遅延は礼儀として扱い、文書化された要件とは見なさないでください。根拠なく、ユーザーの問題がレート制限によるものだと伝えてはいけません。実際に遭遇するブロックは、以下の SQL パターン WAF によるものです。
  • data.gov.il の WAF は、インジェクションのシグネチャに一致する SQL(count(、1=1、UNION はすべて 2026-08-27 に確認済み)をブロックし、JSON や 403 ではなく、約 1.4 kB の HTML 404 ページを返します。クエリーの表現を変えればすぐに解決します。スロットリングは発生していないため、待っても解決しません。2026 年 6 月には本文が Security Violation の 403 が確認されましたが、2026-08-27 には再現できませんでした。もし表示された場合は、クエリーの問題ではなくセッション単位のブロックとして扱い(Cookie を破棄し、新しい User-Agent を使って、指数バックオフを適用してください)。
  • 多くの政府データセットでは、日付フィールドが ISO 8601 ではなく DD/MM/YYYY 形式(イスラエルで一般的な形式)です。エージェントが「01/02/2026」を 1 月 2 日ではなく 2 月 1 日として解析することがあります。
  • 大規模なデータセットでは、オフセットが大きくなるほどページングが遅くなります(2026-08-27 に検証済み:offset=500000 でも 200 を返すため、上限はありませんが、大きなオフセットはコストがかかります)。filters ではキーベースのページングを実行できません({"_id":">N"} は success:false で失敗します)。ただし、datastore_search_sql で WHERE _id > N ORDER BY _id を指定すれば実行でき、データ全件を取得するにはこちらが適切です。

参考リンク

ソースURL確認する内容
data.gov.il ポータルhttps://data.gov.ilイスラエルのオープンデータカタログ、組織、データセットを閲覧します
CKAN API リファレンスhttps://docs.ckan.org/en/latest/api/package_search、package_show、datastore_search のシグネチャ
data.gov.il データセット一覧https://data.gov.il/datasets組織やタグ別に利用可能なデータセットを探します。複数形に注意してください。/dataset はクライアント側で 404 ページを表示します
イスラエル中央統計局https://www.cbs.gov.ildata.gov.il の多くの統計データの上流ソース
イスラエル銀行のデータhttps://www.boi.org.ildata.gov.il にない金融・通貨関連データセット

トラブルシューティング

package_search が count: 0 を返す

原因:検索語が具体的すぎる、言語が正しくない、またはデータが実際にこのポータルに存在しません。 解決策:より広いヘブライ語のキーワードで再試行します(カタログの主な言語はヘブライ語です)。続けて fq=organization:<id> で検索します。それでも 0 件の場合は、結論を出す前にステップ 2 の「data.gov.il にないもの」の表を確認してください。不動産、GTFS、または CBS の大半の系列で 0 件となるのは正しい最終結果です。別のデータセットで代用するのではなく、ユーザーを適切な場所に案内してください。

HTTP 409 とヘブライ語の Validation Error を含む JSON

原因:リクエストは CKAN に到達し、CKAN が引数を拒否しました。たとえば resource_id がない場合、HTTP 409 とともに {"error":{"resource_id":["ערך חסר"],"__type":"Validation Error"},"success":false} が返されます。メッセージはヘブライ語です。 解決策:ステータスではなく error を確認してください。これは呼び出し側のバグであり、サービス停止ではありません。

リソースにクエリ可能なデータストアがない

原因:そのリソースの datastore_active が false です。これは format とは独立しています。XLSX リソースでもデータストアが有効な場合があり(mosdot が該当します)、CSV リソースでも有効でない場合があります。 解決策:datastore_search を呼び出す前に、package_show または resource_show から resources[].datastore_active を確認してください。false の場合は resources[].url をダウンロードして、ローカルで解析します。

datastore_search_sql が JSON ではなく HTML ページを返すエラー

原因(2026-08-27 に検証済み):リクエストは SQL レイヤーに到達していません。1,376 バイトの HTML 404 はサイトの汎用エラーページで、3 つの原因に共通します。WAF が SQL 内のインジェクション署名文字列(count(、1=1、UNION はすべて該当)に一致した、アクション名が存在しない、または resource_id が存在しない、のいずれかです。success だけを調べるクライアントでは、いずれの場合も解析エラーになります。 解決策:まず原因を切り分けます。SELECT * FROM "<resource_id>" LIMIT 1 を再実行してください。成功する場合、SQL が WAF に検出されています。count(*) を sum(1) に置き換え、通常の行数は datastore_search の total から取得し、UNION と恒真条件を避けてください。これも HTML を返す場合は、resource_id が無効になっている(package_show で再解決してください)か、アクション名が誤っています。SQL エンドポイント自体は無効化されていません。単純な SELECT、WHERE、ORDER BY、GROUP BY、sum() はすべて、データを含む 200 を返します。 原因ではないことを確認済み:レート制限(6.5 秒間に連続して行った 25 回の呼び出しはすべて 200 を返しました)、および実際の SQL エラー(HTML ではなく、psycopg2 のメッセージを含む HTTP 409 の JSON を返します)。

バンドルされたスクリプトで Connection error: [SSL: CERTIFICATE_VERIFY_FAILED] が発生するエラー

原因:macOS 向けの python.org ビルドには CA ストアが登録されていないため、urllib が data.gov.il の証明書を検証できません。これはローカルの信頼ストアの問題であり、data.gov.il の障害ではありません。同じマシン上の curl は成功します。 解決策:スクリプトは、インストールされている場合は certifi のバンドルを優先するようになりました(pip install certifi)。それ以外の場合は、/Applications/Python\ 3.x/Install\ Certificates.command を一度実行するか、SSL_CERT_FILE=$(python3 -c 'import certifi; print(certifi.where())') を設定してください。

success:true with total: 0 なのに、データが明らかに存在する

原因(2026-08-27 に確認済み):ほとんどの場合、テキスト列の値にスペースが含まれています。CBS の自治体リソースで filters={"סמל_ישוב":"4000"} を指定すると、保存されている値が "4000 " のため、行が 0 件返されます。数値のように見えるコードも text として保存されるため、"4000" と 4000 も異なる値です。 解決策:まず limit=1 で生の値を確認してから、スペースを含む正確な文字列で照合するか、WHERE TRIM("col") = 'value' を指定して datastore_search_sql を使用します。ステップ 3b を参照してください。

ヘブライ語のフィールド名

エラーではありません。多くのデータセットでは列名にヘブライ語が使われており、リソースによってスペースを含む場合(שם ישוב)とアンダースコアを含む場合(שם_ישוב)があります。まず limit=1 を指定して正確なフィールド名を確認し、URL 内ではパーセントエンコードしてください。

コメント