data.gov.il רץ על CKAN, ולכן יש לו API אמיתי ולא רק הורדת קבצים. איך מוצאים resource id של מערכת נתונים, שולפים אותה עם datastore_search, ומתכננים סביב שני הדברים שישברו לך את התהליך.
עיקרי הדברים
- זה CKAN, ולכן ה-action API הסטנדרטי חל - אותן נקודות קצה ופרמטרים שמתועדים ל-CKAN באופן כללי עובדים גם כאן.
- מזהה המשאב, ולא שם מערכת הנתונים, הוא מה ששולפים מולו. יש למצוא אותו פעם אחת, לשמור אותו בתצורה, ולעולם לא לקבע אותו באמצע הקוד.
- לעמד עם limit ו-offset. מערכת נתונים שמוחזרת בנוחות היום תחרוג מההנחות שלך ברגע שהמפרסם יוסיף שנה של רשומות.
- דאטה ממשלתית משנה מבנה בלי הודעה. יש לאמת עמודות בכל ריצה ולהיכשל ברעש ולא לייבא בשקט מערכת נתונים ריקה או מוזזת.
data.gov.il הוא פורטל הדאטה הפתוחה של ממשלת ישראל, והוא רץ על CKAN - פלטפורמה בקוד פתוח עם API מלא ומתועד. המשמעות המעשית: אין צורך להוריד קבצים ידנית או לגרד את האתר. יש נקודות קצה אמיתיות שאפשר לשלוף מהן, וזו הדרך הנכונה.
למה זה משנה שזה 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.
שני הדברים שישברו לך את התהליך
זה החלק שמפריד בין סקריפט שרץ פעם לתהליך שאפשר לסמוך עליו.
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 רשמי שנבנה לגישה תכנותית, והנתונים פורסמו לשימוש ציבורי. שתי הסתייגויות נשארות: לכל מערכת נתונים רישיון משלה, שמופיע בפרטי מערכת הנתונים ושווה לקרוא אותו אם בונים עליו מוצר מסחרי, וכדאי לשלוף בקצב סביר כי זו תשתית ציבורית משותפת.
אילו בעיות איכות נתונים לצפות מדאטה פתוחה ישראלית?
פורמטי תאריך מעורבים באותה עמודה, שדות מספריים ששמורים כטקסט עם פסיקים או סימני מטבע, ערכים בעברית שנושאים רווחים כפולים ותווים בלתי נראים כך ששני ערכים שנראים זהים לא משתווים, וערכים חסרים שמיוצגים בכמה דרכים שונות. שכבת נורמליזציה בקליטה אינה אופציונלית - יש לנקות ולהמיר טיפוסים לפני שהנתונים מגיעים לשאר המערכת.
להמשך קריאה
שירות רלוונטי
אינטגרציות
לגרום למערכות שאתם כבר משלמים עליהן לדבר זו עם זו.
על הכותב
יהונתן סעדיה
מהנדס פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מהנדס בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה מנסה להפוך לאוטומטי או לבנות, ואומר לך מהי הדרך המהירה והאמינה ביותר ליישם את זה.
