API לקבלת שערי מט"ח
-
אני מנסה לגשת לAPI הזה של בנק ישראל
https://www.boi.org.il/he/Markets/Pages/explainxml.aspxאבל מקוד זה לא עובד
מה פספסתי?async function gett(){ const apiCur = `http://www.boi.org.il/currency.xml?curr=01`; let response = await fetch(apiCur); let result = await response.json(); console.log(result); } -
בתכנות, תמיד תמיד יש תקלות ותמיהות.
אבל זה לא עוצר אותך מלהתקדם אם אתה לא ניגש לבעיה ככה:@ש-ב-ח אמר בAPI לקבלת שערי מט"ח:
אבל מקוד זה לא עובד
אם אתה רוצה להתקדם בחיים,
אתה צריך להבין שמה שלא עובד זה מרתק/מקדם לא פחות ממה שכן, ושווה להשקיע מחקר לראות מה בדיוק קורה שמה. -
אוקי בא אספר לך בינתיים איך התקדמתי בבעיה.
לקחתי את הקוד שלך ופתחתי את הקונסול של הדפדפן והדבקתי (בתוספת שורה שמפעילה את הפונקציה).
קיבלתי שגיאה ארוכה של Mixed Content שאומרת שאני מנסה לגשת לhttp מתוך דף מאובטח של https.
אז התקדמתי, ושיניתי בקוד שלך לhttps והרצתי שוב, וקיבלתי שגיאה ארוכה לא פחות של CORS policy, כלומר אתר תחומים לא מורשה לגשת לבנק ישראל.
אז הלכתי לאתר בנק ישראל ומשמה פתחתי את הקונסול והרצתי, ושמה קיבלתי שגיאה שקשורה לJSON - התוכן מתחיל בתו לא צפוי שהוא <.
הסתכלתי בNetwork לראות איך נראית התשובה, והנה היא XML! בטח הרי זה כתוב מפורש בכתובת currency.xml רק שלא שמתי לב.
טוב אז אני יודע לענות לך בפורום שהבעיה היא שזה לא JSON. -
שו"ר ש@yossiz כבר ענה על השאלה פה:
https://tchumim.com/topic/9348 -
@dovid אמר בAPI לקבלת שערי מט"ח:
אם אתה רוצה להתקדם בחיים,
אתה צריך להבין שמה שלא עובד זה מרתק/מקדם לא פחות ממה שכן, ושווה להשקיע מחקר לראות מה בדיוק קורה שמה.בשביל זה גם ניסיתי הכל וגם אני נתקלתי בcros...
(חשוב להדגיש שבאתר הבנק הכתובת מופיעה HTTP ולא HTTPS, לא שזה ראיה גדולה...)
וכבר הבנתי שהבנק לא מרשה...גם ידעתי שככל הנראה בסוף תהיה הבעיה של הJSON רק חיכיתי וציפיתי לראות את השגיאה הזאת עולה (הבנתי שגם לזה אצטרך למצוא פיתרון) אבל כל עוד היא לא עלתה... לא היה לי מה להמשיך.
בכל מקרה לא הבנתי מה כתב @yossiz ב
@yossiz אמר בjs- שימוש ב fetch לקובץ xml:@ב-ל צודק, כנראה שזה לא מיועד לשימוש בצד לקוח (או שהם עדיין לא שמעו על CORS...)
האם בצד שרת זה כן יעבוד?
-
@yossiz אמר בAPI לקבלת שערי מט"ח:
@ש-ב-ח מדיניית ה-CORS מואכפת רק בדפדפן - לא בשרת.
(יש לי עוד הרבה מה ללמוד, זה כנראה יקח זמן, אתם (גם @dovid ) תצטרכו לעזור לי להשלים את הפער... )
תודה על הכל! -
@ש-ב-ח זה הכי טוב - חינמי - מהיר
עדכני (אאלט כל חצי שעה זה מתעדכן)
https://www.currencyconverterapi.com/מחזיר JSON. עובד גם בצד לקוח כמובן (הרשאת CORS)
-
@ש-ב-ח כנראה שעשית משהו לא נכון.
הרצתי משרת:curl https://www.boi.org.il/currency.xml?curr=01
וקיבלתי במענה:
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <CURRENCIES> <LAST_UPDATE>2021-03-15</LAST_UPDATE> <CURRENCY> <NAME>Dollar</NAME> <UNIT>1</UNIT> <CURRENCYCODE>USD</CURRENCYCODE> <COUNTRY>USA</COUNTRY> <RATE>3.309</RATE> <CHANGE>-0.211</CHANGE> </CURRENCY> </CURRENCIES> -
@ש-ב-ח אמר בAPI לקבלת שערי מט"ח:
@yossiz
גם מצד שרת הוא לא נותןהמילים "לא נותן" "לא עובד", לא נסבלים.
תכתוב מה התוצאה, מה השגיאה מה הפלט. -
@dovid אמר בAPI לקבלת שערי מט"ח:
המילים "לא נותן" "לא עובד", לא נסבלים.
תכתוב מה התוצאה, מה השגיאה מה הפלט.@ש-ב-ח אמר בAPI לקבלת שערי מט"ח:
הוא מחזיר 404
-
@yossiz אמר בAPI לקבלת שערי מט"ח:
וקיבלתי במענה:
אכן ככל הנראה הבעיה היא בפונקציה בה אני משתמש
אני משתמש ב wp_remote_getאבל אני לא יודע מאיפה להתחיל כדי לבדוק מה הבעיה
אני מנסה לחפש... -
@dovid
כך:$res = wp_remote_get('https://www.boi.org.il/currency.xml?curr=01'); print_r($res); בשרת (מנסה להציג את התוצאה בדף)
@yossiz אמר בAPI לקבלת שערי מט"ח:
@ש-ב-ח בדקת ב-https?
בוודאי
-
למשל עם הפונקציה הפשוטה של PHP זה עובד חלק
simplexml_load_file('https://www.boi.org.il/currency.xml');
מה לא עלינו לא טוב לו עם wp_remote_get()?
(נכון, אני יכול להסתדר עם הפונקציה הזאת של PHP אבל אני סקרן נורא לדעת מה לא טוב בפונקציה של WP) -
@yossiz אולי תענה גם לו
https://wordpress.stackexchange.com/q/341706
...אני מייד חשבתי בכיוון כזה אבל simplexml_load_file קובע בלי שהתבקש user_agent?
וcurl גם?
19/21