שלום וברכה,

במדריך הזה אני הולך לגעת בנושא שכבר נגעתי בו בעבר, וזה שאיבת מידע מהאינטרנט.

הנושא הזה רחב, ואני מעוניין שבאמת תוכלו לשאוב מידע בכוחות עצמכם בסוף המדריך, ולכן חילקתי את זה למספר מדריכים, כאשר כל ההקדמה והסבר המושגים הבסיסיים נמצאים במדריך הזה.

חלק 1 זה המדריך הזה — מדריך לשאיבת מידע מתוך API   ב PowerQuery של Excel

חלק 2 — מדריך לשאיבת מידע מהאינטרנט מעמוד בודד ב Power Query

חלק 3 — מדריך לשאיבת מידע מהאינטרנט מעמודים רבים ב Power Query

סרטון - איך לשאוב מידע מ-API אל אקסל

מדריך לשאיבת מידע מתוך API   ב PowerQuery של Excel

לטובת הקוראים שלא מכירים מהו המונח API,  נתחיל את המדריך בהסבר קצרצר על המושגים ואז נתקדם לתכלס.

אם המונחים הטכניים הבאים מוכרים לך : API / GET / POST , אתה יכול לגלול להמשך המאמר, אם לא – עוד דקה תדע בדיוק על מה מדובר.

כאשר אנחנו גולשים באינטרנט, התקשורת שמבוצעת, מתבססת על פי תקן כלשהוא שמישהו הגדיר פעם.

כלומר ישבה ועדה של אנשים חכמים, טכנולוגים, והם החליטו על יצירת תקן תקשורת שבאמצעותו נוכל לקרוא תוכן באינטרנט.

התקן הזה נקרא http  והוא מגדיר לדפדפן כיצד הוא צריך לתקשר עם שרתים כדי לקבל מידע.

התקן, הוא השפה שבה מדברים באינטרנט.

הדפדפן שלנו , למשל chrome/edge יודע לתקשר באמצעות השפה הזו, שפת http

מה למשל הוא יודע לומר ?

לדוגמה, אם ניכנס לדפדפן, ובשורת הכתובת נקליד את הכתובת www.ynet.co.il  אז הדפדפן יודע לפנות לשרת של ווינט, ולומר לו בשפת ה http    משהו כמו :“תביא לי בבקשה את התוכן של העמוד הראשי שלך”.

הדפדפן יודע לעשות כל מיני סוגים של בקשות לפי התקן, לפי השפה.

לדוגמה, הבקשה שתיארנו לפני כן, בקשה לקבל מידע, נקראת בקשה מסוג GET,  כיוון שאנחנו רוצים לקבל מידע.

לעומת זאת, יש עוד סוגי בקשות שהדפדפן יודע לעשות, למשל, כאשר אנחנו ממלאים טופס באתר כלשהוא, ובסופו לוחצים על כפתור שלח , במקרה כזה הדפדפן יבצע בקשה מסוג אחר, זוהי בקשה לשלוח מידע, והיא נקראת בקשה מסוג  POST.

אם נמשיך עם הדוגמא שלנו, אז במקרה של אתר תוכן כמו ynet  המידע שחוזר, חוזר בצורה שמאפשרת לדפדפן להציג אותו. במילים אחרות, המידע חוזר כשהוא כתוב בשפה מסויימת, במקרה הזה, הוא כתוב בשפה שנקראת HTML שזוהי השפה בה כתובים אתריך באינטרנט.

יש אפשרות מבחינה טכנית, שהשרת גם יחזיר תשובה בשפות/בפורמטים שונים. כלומר, השרת לא חייב להחזיר תשובה דווקא בשפת HTML. אלא הוא יכול להחזיר גם תשובה בשפה אחרת.

למשל… כולנו מכירים את המצב שבו אנחנו לוחצים ב google  על קישור למסמך word  או pdf  אז במקרים כאלו, השרת שמחזיר תשובה, מחזיר תשובה מסוג שונה.

מה זה משנה ? ולמה חשוב כיצד השרת מחזיר תשובה ?

במדריך הזה אנחנו נתמקד בשאיבת מידע מהאינטרנט, מתוך שירותים ייעודיים שמיועדים רק להחזיר מידע. השירותים האלו לפעמים חינמיים ולפעמים בתשלום, נקראים API  — שזה קיצור של ממשק תיכנותי ליישומים. התרגום לעברית קצת נשמע לא מובן בהתחלה, ולכן אסביר למה הכוונה באמצעות סיפור דימיוני שימחיש את העניין.

יזמית צעירה, סיימה זה עתה את התואר השני במנהל עסקים, והחליטה לכבוש את העולם ולהקים אתר אינטרנט שיספק שערי מניות למעוניינים בכך.

האתר התחיל לצבור קהל, והיזמית שלנו מאושרת.

האתר התחיל לצבור קהל, והיזמית שלנו מאושרת.
האתר התחיל לצבור קהל, והיזמית שלנו מאושרת.

האתר התחיל לצבור קהל, והיזמית שלנו מאושרת.

( קרדיט תמונה : Image by PublicDomainPictures from Pixabay )

יום אחד היא מקבלת פנייה מאדם אחר שמעוניין להציג כמה שערי מניות ספציפים באתר שלו, שישאבו מתוך המידע הקיים באתר שלה.  על מנת לחשוף את המידע בלבד לאתר השני, המתכנתת שלה פותחת כתובת באתר, שגישה אל הכתובת הזו תחזיר רק את שערי המניות הרלוונטים, בלי עיצוב בכלל , אלא בצורה \ שפה \ פורמט שהאתר השני יוכל לקרוא מהם.

הגישה הזאת , נקראת גישה באמצעות API. המתכנתת של היזמת שלנו, בעצם פיתחה אפשרות לקבל את הנתונים באמצעות תיכנות. זאת אומרת, שאם מתכנת כלשהוא יקבל ממנה את ההנחיות, ויפעל לפיהן - אזי הוא יוכל לקבל את הנתונים אל התוכנה שלו.    זאת אומרת, המונח API זהו מונח כללי, שמתאר את העובדה שתוכנה מסויימת מאפשרת גישה אליה, באמצעות סט של פקודות מבחוץ.

אין שום תקן ל API  אבל יש כמה צורות מקובלות.

אנחנו נתמקד ספציפית בצורות שבהן אפשר לקבל את המידע, כאשר המיקוד שלי יהיה על הפורמט שנקרא json.

זהו הפורמט המקובל היום. (מעט פחות מקובל ממנו הוא פורמט אחר, שנקרא xml  שהיה נפוץ בעבר).

הנה דוגמה ל API שמחזיר  נתונים ב Json

דוגמא ל-JSON
דוגמא ל-JSON

כך נראה מידע בפורמט JSON

עוד נקודה חשובה להבנה

כאשר אנחנו מתחברים ל API - זה מה שנקרא “ללכת בדרך המלך”. זוהי הדרך המקובלת, הטובה והרצויה לשאוב מידע מהאינטרנט.

לעומת זאת, במדריכים הבאים אני אציג שיטות לשלוף מידע מתוך אתר רגיל.

מה ההבדל בין אתר רגיל לבין API ?

ההבדל הוא שכאשר אנחנו מתחברים ל API אז מי שפיתח אותו התכוון שאנחנו ניגש וניקח את הנתונים בקלות, ולכן הוא פתח לנו גישה ל API  שלו.

דוגמא כזו, היא האתר הממשלתי https://data.gov.il/ שבו יש הרבה מאוד מידע ממשלתי, שממשלת ישראל רוצה לחשוף לטובת כל מי שמעוניין בו.

במקרה כזה, אנחנו פשוט ניגשים למידע… וזהו - זה מה שנלמד לעשות כעת, במדריך הזה.

לעומת זאת, כאשר אנחנו שולפים מידע מאתר רגיל, מי שפיתח את האתר, לא תיכנן שנשלוף ממנו מידע, אלא הכוונה שלו הייתה שאנחנו נגלוש באתר, ובעצם כאשר אנחנו רק מעוניינים לשלוף מידע מתוך האתר. לא באמת מעניין אותנו כל העיצוב, אנחנו רוצים רק את הנתונים, תכלס. ובמצב כזה, אנחנו נצטרך לעבוד קצת כדי לעבד את המידע, ובעצם “להתעלם” מכל החלקים שלא רלוונטים באתר - כמו עיצוב למשל, ולדעת לשלוף רק את המידע שחשוב לנו.

למזלנו, אקסל או Power Query  יעזרו לנו מאוד להתגבר על המכשולים האלו, אבל עדין, אם יש לכם אפשרות לשלוף מידע מ API   זה כמובן עדיף מאשר להתחיל לשלוף מתוך אתר.

אז בואו נצעד בדרך המלך…

מה אנחנו צריכים כדי להשיג מידע מתוך API ?

אנחנו צריכים לענות לעצמנו על השאלות הבאות :

מהי כתובת האינטרנט של ה API – נקרא גם url/uri

באיזה פורמט חוזריך הנתונים ? האם הם חוזרים ב Json  או ב xml ?

במידה וה api  הזה מוגן על ידי סיסמה וכדומה, אז האם יש לנו את הסיסמה ?

איך שואבים נתונים מ API   מקובץ אקסל ?

באקסל – לוחצים על נתונים —- מהאינטרנט —- ופשוט מקלידים או מדביקים את כתובת ה api

מרגע זה אקסל מזהה לבד את השדות בתוך ה json   ומציג לנו טבלה איך הוא הולך למשוך אותם.

כל מה שנותר הוא ללחוץ על אישור

לוחצים על -קבל נתונים- ואז על - ממקורות אחרים - מהרשת
לוחצים על -קבל נתונים- ואז על - ממקורות אחרים - מהרשת

לוחצים על -קבל נתונים- ואז על - ממקורות אחרים - מהרשת

או בתוך PowerQuery לוחצים על : מקור חדש » מקורות אחרים »> מהאינטרנט.

בתוך PowerQuery לוחצים על : מקור חדש -מקורות אחרים - מהאינטרנט
בתוך PowerQuery לוחצים על : מקור חדש -מקורות אחרים - מהאינטרנט

בתוך PowerQuery לוחצים על : מקור חדש »מקורות אחרים » מהאינטרנט

ואז מדביקים \ מקלידים את כתובת האתר וממשיכים כרגיל עם שלבי ה- PowerQuery.

בהצלחה.