data.gov.il רץ על CKAN, ולכן יש לו API אמיתי ולא רק הורדת קבצים. איך מוצאים resource id של מערכת נתונים, שולפים אותה עם datastore_search, ומתכננים סביב שני הדברים שישברו לך את התהליך.
עיקרי הדברים
- זה CKAN, ולכן ה-action API הסטנדרטי חל - אותן נקודות קצה ופרמטרים שמתועדים ל-CKAN באופן כללי עובדים גם כאן.
- מזהה המשאב, ולא שם מערכת הנתונים, הוא מה ששולפים מולו. יש למצוא אותו פעם אחת, לשמור אותו בתצורה, ולעולם לא לקבע אותו באמצע הקוד.
- לעמד עם limit ו-offset. מערכת נתונים שמוחזרת בנוחות היום תחרוג מההנחות שלך ברגע שהמפרסם יוסיף שנה של רשומות.
- דאטה ממשלתית משנה מבנה בלי הודעה. יש לאמת עמודות בכל ריצה ולהיכשל ברעש ולא לייבא בשקט מערכת נתונים ריקה או מוזזת.
data.gov.il הוא פורטל הדאטה הפתוחה של ממשלת ישראל, והוא רץ על CKAN - פלטפורמה בקוד פתוח עם API מלא ומתועד, ולכן ה-API של data.gov.il הוא ה-action API של CKAN. המשמעות המעשית: אין צורך להוריד קבצים ידנית או לגרד את האתר. יש נקודות קצה אמיתיות שאפשר לשלוף מהן, וזו הדרך הנכונה.
למה זה משנה שזה CKAN
הרבה אנשים ניגשים לפורטל, מורידים CSV, ובונים סביבו תהליך ידני. זה עובד עד שהקובץ מתעדכן.
מכיוון ש-CKAN היא פלטפורמה סטנדרטית, התיעוד הכללי שלה חל - מה שאומר שאתה לא תלוי בתיעוד ייעודי. אותן פעולות שמתועדות ל-CKAN עובדות כאן, והן נגישות דרך ה-action API בתבנית /api/3/action/{action}.
שלוש הפעולות שמכסות כמעט כל שימוש:
| פעולה | למה |
|---|---|
package_search | למצוא מערכות נתונים לפי מילות חיפוש |
package_show | לקבל את פרטי מערכת הנתונים, כולל רשימת המשאבים והמזהים שלהם |
datastore_search | לשלוף את השורות עצמן ממשאב |
המפתח: resource id, לא שם
זו נקודת הבלבול הראשונה, ושווה להבין את ההיררכיה:
- מערכת נתונים (dataset/package) - הפריט שאתה רואה בפורטל. יכולה להכיל כמה קבצים.
- משאב (resource) - קובץ בודד בתוכה. לכל משאב יש מזהה ייחודי.
ו-datastore_search עובד מול מזהה משאב, לא מול שם מערכת הנתונים. הפרמטרים המרכזיים:
resource_id- חובהlimitו-offset- עימודq- חיפוש חופשיfields- אילו עמודות להחזירsort- מיון
איך למצוא את המזהה: לחפש את מערכת הנתונים ב-package_search, ואז package_show כדי לראות את המשאבים שלה ואת המזהים.
ואז לשמור אותו בתצורה. לא באמצע הקוד. מערכת נתונים שמפורסמת מחדש כמשאב חדש - וזה קורה - מקבלת מזהה חדש, ואתה רוצה שזה יהיה שינוי הגדרה ולא deploy.
מה הכתובות והפרמטרים של ה-API של data.gov.il?
כל קריאה ל-API של data.gov.il היא GET לכתובת https://data.gov.il/api/3/action/{action} עם פרמטרים, וכל תשובה היא JSON עם success ו-result. לקריאה לא צריך מפתח API. הקריאות שתהליך משיכה משתמש בהן, ומה כל אחת החזירה בבדיקה ב-4 בנובמבר 2026:
| קריאה | דוגמה | מה חוזר |
|---|---|---|
package_list | /api/3/action/package_list | שמות כל מערכות הנתונים (1,206 ביום הבדיקה) |
organization_list | /api/3/action/organization_list | הגופים המפרסמים (61) |
package_search | ?q=<מילים>&rows=10 | count ורשימת מערכות נתונים, כל אחת עם ה-resources שלה, המזהים ו-datastore_active |
package_show | ?id=<שם מערכת הנתונים> | מערכת נתונים אחת: רישיון, גוף מפרסם, משאבים עם כתובת הורדה ו-last_modified |
datastore_search | ?resource_id=<id>&limit=1000&offset=0 | records, fields עם הטיפוסים, total ו-_links.next |
רק משאב עם datastore_active: true עונה ל-datastore_search; השאר הם קבצים להורדה. פרמטרים שימושיים מעבר לעימוד:
filters- אובייקט JSON של התאמות מדויקות, למשל{"shnat_yitzur": 2026}. כמה שדות מצטרפים ב-AND, ורשימת ערכים מתאימה לכל אחד מהם.fields- רשימת עמודות מופרדת בפסיקים, שמקטינה מאוד את התשובה בטבלאות רחבות.sort- למשלshnat_yitzur desc.limit=0- מחזיר רק אתtotalואת רשימת השדות, ספירה זולה לפני משיכה מלאה.
ערכים בעברית ב-q וב-filters צריך לקודד ב-URL encoding.
מה המגבלות של ה-API של data.gov.il?
ה-datastore של data.gov.il לא מתנהג לפי ברירות המחדל של CKAN, ולכן כדאי למדוד לפני שמתכננים. זה מה שהראתה בדיקה מול משאב רישוי כלי הרכב ב-4 בנובמבר 2026:
- גודל עמוד ברירת מחדל. התיעוד של CKAN מגדיר
limitברירת מחדל של 100 ומקסימום של 32,000, אלא אם האתר הגדיר אחרת. כאן בקשה בליlimitהחזירה 32,000 שורות, ו-limit=100000התקבל והחזיר 100,000 שורות (כ-57MB, בפחות מ-8 שניות). תמיד שלחlimitמפורש. - סה"כ משוער. בטבלה של 4.2 מיליון שורות בלי סינון,
total_was_estimatedהיהtrue; עם סינון הסה"כ היה מדויק. אל תשתמש ב-totalבלי סינון כבדיקת שלמות. - שגיאות חוזרות כ-HTML ולא כ-JSON. מזהה משאב שגוי, עמודה לא קיימת ב-
fieldsומערכת נתונים שלא קיימת החזירו כולם HTTP 404 עם עמוד HTML, במקום הודעת השגיאה של CKAN ב-JSON. בדוק את קוד הסטטוס ואת סוג התוכן לפני הפענוח. - SQL אינו דרך. שאילתת
datastore_search_sqlמול משאב החזירה את אותו 404 ב-HTML, ולכן תכנן את התהליך עלdatastore_search.
שני הדברים שישברו לך את התהליך
זה החלק שמפריד בין סקריפט שרץ פעם לתהליך שאפשר לסמוך עליו.
1. המבנה משתנה בלי הודעה
דאטה ממשלתית מתפרסמת על ידי גופים שונים, ואין הבטחת יציבות מבנה. עמודה יכולה לשנות שם, להיעלם, או להתווסף - בין ריצה לריצה. ואף אחד לא יודיע לך.
מה שקורה בפועל: הסקריפט רץ, לא קורס, ומייבא אפס שורות או שורות עם שדות ריקים. הכשל השקט הזה גרוע יותר מקריסה, כי הוא מתגלה שבועות אחר כך בדוח שנראה מוזר.
ההגנה: לאמת את העמודות בתחילת כל ריצה. אם עמודה שהתהליך מסתמך עליה חסרה - לעצור ולהתריע, לא להמשיך. ולהתריע גם כשמספר השורות צונח פתאום; ירידה מ-40,000 ל-12 היא לא עדכון, היא בעיה.
2. איכות הנתונים אינה אחידה
מקורות שונים, סטנדרטים שונים. בדאטה ישראלית זה מתבטא בכמה דפוסים חוזרים:
- תאריכים בפורמטים מעורבים באותה עמודה.
- שדות מספריים כטקסט - עם פסיקים, רווחים, או סימן מטבע.
- עברית עם רווחים כפולים ותווים בלתי נראים בקצוות. שני ערכים שנראים זהים ולא משתווים כמחרוזות.
- ערכים חסרים שמיוצגים בכמה דרכים - ריק, מקף, "לא ידוע".
המסקנה: שכבת נורמליזציה אינה מותרות. לנקות ולהמיר טיפוסים מיד בקליטה, לפני שהנתונים נוגעים בשאר המערכת.
מה מותר לעשות עם זה
הנתונים בפורטל פורסמו לשימוש ציבורי, וזו הנקודה שמבדילה את זה מגירוד אתרים: יש כאן API רשמי שנועד בדיוק לזה.
שתי הסתייגויות מעשיות:
- לכל מערכת נתונים יש רישיון משלה. הוא מופיע בפרטי מערכת הנתונים, ושווה לקרוא אותו - במיוחד אם אתה בונה מוצר מסחרי מעל הנתונים.
- לשלוף בקצב סביר. זו תשתית ציבורית. עימוד עם השהיות עדיף על מאה בקשות מקבילות, וזה גם מה שישאיר את התהליך שלך יציב.
הדפוס שעובד
- לגלות פעם אחת: למצוא את מערכת הנתונים ואת מזהי המשאבים, ולשמור אותם בתצורה.
- לשלוף בעמודים עם
limitו-offset, לא הכול בבת אחת. - לאמת מבנה בתחילת כל ריצה - ולעצור אם הוא השתנה.
- לנרמל בקליטה - תאריכים, מספרים, טקסט עברי.
- לשמור עותק גולמי של מה שהתקבל. כשמשהו ייראה מוזר בעוד חודש, זו הראיה מה באמת הגיע.
- להתריע על שינוי חד בכמות השורות.
ולשמור את הנתונים אצלך ולא לשלוף בזמן אמת בכל בקשה. פורטל ציבורי אינו מסד הנתונים שלך, והזמינות שלו אינה באחריותך - אבל התהליך שלך כן.
למה זה שימושי
הפורטל מכיל אלפי מערכות נתונים ציבוריות. השימושים הנפוצים שראיתי:
- העשרת נתונים - להצליב רשומות פנימיות מול מקור ציבורי.
- מחקר שוק - נתונים סטטיסטיים לפי אזור או ענף.
- ניטור - לעקוב אחרי מערכת נתונים שמתעדכנת ולהתריע על שינוי.
ובכל אחד מהם, החלק היקר אינו המשיכה - הוא הנורמליזציה והאמינות. את המשיכה עצמה תסיים בשעה.
מקורות
שאלות נפוצות
האם ל-data.gov.il יש API?
כן. הפורטל רץ על CKAN, ולכן ה-action API הסטנדרטי של CKAN חל דרך נתיבים בתבנית /api/3/action/{action}. שלוש הפעולות שמכסות את רוב השימושים הן package_search למציאת מערכות נתונים, package_show לראות את המשאבים של מערכת נתונים ואת המזהים שלהם, ו-datastore_search לשליפת השורות עצמן.
מה זה resource id ואיפה מוצאים אותו?
מערכת נתונים יכולה להכיל כמה קבצים, וכל קובץ הוא משאב עם מזהה ייחודי משלו. datastore_search שולף מול מזהה המשאב הזה ולא מול שם מערכת הנתונים. מוצאים אותו בחיפוש עם package_search ואז קריאה ל-package_show כדי לראות את המשאבים - ואז שומרים את המזהה בתצורה ולא מקבעים בקוד, כי מערכת נתונים שמתפרסמת מחדש מקבלת מזהה חדש.
למה ייבוא הדאטה הממשלתית שלי מחזיר כלום בשקט?
כמעט תמיד כי מבנה מערכת הנתונים השתנה - עמודה ששמה שונה, הוסרה או נוספה - בלי שום הודעה. הסקריפט לא קורס; הוא מייבא אפס שורות או שורות עם שדות ריקים, וזה מתגלה שבועות אחר כך בדוח שנראה שגוי. יש לאמת את העמודות הצפויות בתחילת כל ריצה ולעצור ברעש, ולהתריע כשמספר השורות צונח.
האם שימוש ב-data.gov.il זהה לגירוד אתרים?
לא - יש API רשמי שנבנה לגישה תכנותית, והנתונים פורסמו לשימוש ציבורי. שתי הסתייגויות נשארות: לכל מערכת נתונים רישיון משלה, שמופיע בפרטי מערכת הנתונים ושווה לקרוא אותו אם בונים עליו מוצר מסחרי, וכדאי לשלוף בקצב סביר כי זו תשתית ציבורית משותפת.
אילו בעיות איכות נתונים לצפות מדאטה פתוחה ישראלית?
פורמטי תאריך מעורבים באותה עמודה, שדות מספריים ששמורים כטקסט עם פסיקים או סימני מטבע, ערכים בעברית שנושאים רווחים כפולים ותווים בלתי נראים כך ששני ערכים שנראים זהים לא משתווים, וערכים חסרים שמיוצגים בכמה דרכים שונות. שכבת נורמליזציה בקליטה אינה אופציונלית - יש לנקות ולהמיר טיפוסים לפני שהנתונים מגיעים לשאר המערכת.
צריך מפתח API כדי להשתמש ב-API של data.gov.il?
לקריאה לא צריך מפתח. package_search, package_show ו-datastore_search על מערכות נתונים ציבוריות עונים לבקשות GET רגילות לכתובת https://data.gov.il/api/3/action/. כדאי לשמור על קצב בקשות סביר, כי זו תשתית ציבורית, ולשמור את מזהי המשאבים בתצורה.
כמה שורות מחזיר datastore_search בבקשה אחת ב-data.gov.il?
בבדיקה ב-4 בנובמבר 2026, בקשה בלי limit החזירה 32,000 שורות, אף שברירת המחדל המתועדת של CKAN היא 100. limit של 100,000 התקבל והחזיר כ-57MB. כדאי לשלוח limit מפורש, למשל 1,000 עד 10,000, ולעבור בין העמודים עם offset או _links.next.
למה data.gov.il מחזיר עמוד HTML במקום JSON?
בבדיקה, כל קריאה שנכשלה - מזהה משאב שגוי, עמודה לא קיימת ב-fields, מערכת נתונים שלא קיימת או שאילתת datastore_search_sql - החזירה HTTP 404 עם עמוד שגיאה ב-HTML, ולא את הודעת השגיאה של CKAN ב-JSON. בדוק את קוד הסטטוס ואת סוג התוכן לפני הפענוח, ושמור בלוג את כתובת הבקשה.
להמשך קריאה
שירות רלוונטי
אינטגרציה בין מערכות
לגרום למערכות שאתם כבר משלמים עליהן לדבר זו עם זו.
יש לך פרויקט דומה?
ספר לי מה אתה רוצה לבנות או איזה תהליך להפוך לאוטומטי. אני חוזר תוך 24 שעות עסקים עם כמה שאלות ממוקדות, ואז עוברים על זה יחד בשיחת היכרות חינמית של 30 דקות, בלי התחייבות. בסוף יש לך היקף עבודה, לוח זמנים ומחיר קבוע - או תשובה כנה שלא שווה לבנות את זה.