פיתוח נוסף של הנושא לאחר התכתבות עם שגיא -
סקריפט של שגיא ל־Bash עבור נתונים מתחנה מסויימת -
curl -sd '{"stopMonitoring":{"monitoringRef": {"value":
"6109"},"previewInterval":"P0Y0M0DT1H0M0.000S"}}'
http://otp.hamakor.org.il/SiriServer/SiriServer | awk -F'[ ,"]' 'START
{p=0;} p==1 { print "Line: "$(NF-2); p=0; } /publishedLineName/ &&
$(NF-1)!="null" {p=1;} /expectedArrivalTime/ { print "Time:
"strftime("%H:%M:%S",substr($(NF-1),0,10))}'
הסקריפט מציג זמני הגעה לפי שעון (לדוגמא 15:30) לכל קו וקו שעובר בתחנה,
במקרה של הדוגמא שלמעלה, אלו הנתונים של תחנת המוצא 'מרכזית ירושלים'. ניתן
גם לבקש נתונים מצומצמים יותר, עבור קו ספציפי של חברה ספציפית, כפי שהודגם
בשאילתא למטה, אך דומני שעל פי רוב הנתונים המבוקשים הם בעבור תחנה (פעמים
רבות עוברים בתחנה מספר קווים עם מסלול זהה, לפחות לקטע דרך מסויים).
המשתנה 'previewInterval' מאפשר לבחור קבלת תוצאות לפרק זמן קבוע, ברירת
המחדל (כאשר הוא אינו מופיע) היא 2\1 שעה, במקרה הזה נבחר פרק זמן של שעה,
אפשר לבחור זמן של עד שעתיים קדימה.
למעשה הסקריפט נצרך להשתמש ב־gawk ולא ב־awk, אך gawk היא כבר ברירת המחדל
במספר הפצות לינוקס מודרניות. מי שיתקל בהודעת שגיאה לאחר הרצת הסקריפט, זה
בגלל שאצלו gawk אינו ברירת המחדל במערכת. יש להתקין את החבילה, ולהחליף
בסקריפט את awk ב־gawk.
סקריפט Bash שלי, שמציג זמני הגעה לפי עוד כמה דקות מעכשיו מגיע האוטובוס
לתחנה (הזמנים מעוגלים כלפי מטה, במקרה של זמן פחות מדקה, מוצג ('now!'
STATION=6109; t=$(date +%s); curl --silent -d
'{"stopMonitoring":{"monitoringRef": {"value":
"'$STATION'"},"previewInterval":"P0Y0M0DT1H0M0.000S"}}'
http://otp.hamakor.org.il/SiriServer/SiriServer > /tmp/res; grep "value"
/tmp/res | grep "," | grep -v "Line" > /tmp/list2; cat /tmp/list2 |
while read i; do a=$(echo $i | cut -d '"' -f4); b=$(grep "$i" -A57
/tmp/res | tail -n 1 | cut -d " " -f13 | cut -c1-10); c=$(echo "(" $b
"-" $t ")" "/" 60 | bc); if [ $c == 0 ]; then d='now!'; else d=$(echo $c
"min."); fi; echo $a" - "$d; done
הקוד המספרי של התחנה מבוסס על קבצי ה־GTFS של משרד התחבורה. בחלק מהתחנות
בארץ, מופיע המספר על עמוד התחנה. דומני שכדי למצוא את הנתון עבור תחנה
מסויימת, האפשרות הקלה ביותר הוא להעזר באתר צד שלישי כדוגמת efobus.com,
שמציג מפה דינמית של תחנות עם זמני האמת, כאשר לכל תחנה יש tooltip (כאשר
סמן העכבר ניצב עליה), בה מוצג מספרה ושמה.
ב־ -10/01/37 21:59, Sagi Ben-Akiva כתב\ה:
שלום לכולם,
הוספתי לשרת otp, שירות (ניסיוני) עבור נתוני זמן אמת של משרד התחבורה,
השרת מקבל שאילתות מסוג POST בפורמט JSON, וכרגע מדפיס את השאילתה שנשלחה
לשרת של משרד התחבורה ואת התשובה שהתקבלה.
אני מקווה שבזמן הקרוב אוכל להתקדם עוד קצת כדי שהתשובה שתתקבל תכיל את
המידע הרלוונטי ובצורה נוחה לעבודה.
דוגמא לשאילתא :
curl -d '{"stopMonitoring":{"monitoringRef": {"value":
"21005"},"operatorRef": {"value": "18"},"lineRef": {"value":
"1207325"}}}' http://otp.hamakor.org.il/SiriServer/SiriServer
כאשר :
monitoringRef = מזהה תחנה
operatorRef = מזהה חברה
lineRef = מזהה קו
המידע עבור מספרי התחנות והקווים מגיע מנתוני GTFS שפורסמו ע"י משרד התחבורה.
שגיא.
2013/2/1 Sagi Ben-Akiva <[email protected] <mailto:[email protected]>>
לא נראה לי שצריכה להיות בעיה, אני מאמין ש Relay/Proxy יכול לעשות
את העבודה.
העניין הוא, שכל אחד שירצה להשתמש בשירות יצטרך למממש בעצמו את
שאילתות ה SAOP
שגיא.
2013/1/30 Tomer Cohen <[email protected] <mailto:[email protected]>>
קיימת בעיה כלשהי להגדיר את השרת בתור פרוקסי "רגיל" ואז פשוט
להזין את הכתובת שלו במקום ישירות את כתובת השרת של משרד
התחבורה, ואז ניתן יהיה להתממשק אליו מכל תוכנה שתיכתב, הן אם
היא כוללת קוד צד שרת והן אם היא רצה על מכשיר נייד באופן עצמאי?
2013/1/30 Sagi Ben-Akiva <[email protected]
<mailto:[email protected]>>
היי משה,
אין לי שום בעיה שהממשק למשרד התחבורה יהיה בכל שפה שהיא, כל
עוד אפשר לייצר שאילתת SOAP ולקבל מהשרת שלהם תשובה
אנו זקוקים בעצם לשרת שמשמש בעצם כפרוקסי:
1. מקבל שאילתה (בשפה פשוטה שאנחנו יכולים להגדיר)
2. ממנה יוצר שאילתה שמתאימה לפורמט ולפרוטוקול של משרד התחבורה
3. שולח שאילתה לשרת של משרד התחבורה
4. מהתשובה שמקבלים יוצרים תשובה בפרוטוקול שהגדרנו
5. שולחים תשובה חזרה לשולח השאילתה המקורית.
גם כאן הבחירה בג'וואה הייתה בגלל שהשרת שעמותת המקור הקצתה
לפרוייקט מריץ כבר שרת tomcat עבור otp ובגלל שאין צורך
לכתוב שרת http אלא רק לממש פונקציות doPost ו doGet
שעל המימוש שלהן אני עובד לאחרונה. ומכיוון שהמחלקות שנוצרו
מקובץ הWSDL כתובות גם הן בג'אווה.
שגיא.
2013/1/30 moshe nahmias <[email protected]
<mailto:[email protected]>>
בוקר טוב,
האם ובמה אפשר לעזור אם לא יודעים ג'אווה?
2013/1/30 Sagi Ben-Akiva <[email protected]
<mailto:[email protected]>>
בוקר טוב,
נכון מאוד, משרד התחבורה לא מחייב להשתמש בשפה
מסויימת, מבחינתו אפשר לכתוב באסמבלי, העיקר שיגיעו
שאילתות בפורמט מתאים.
ושוב נכון, השתמשתי בג'נרטור בשם Apache CXF שיצר את
כל טריליוני המחלקות הללו, בתחילת הדרך השתמשתי בכלל
ב gSoap ע"מ לייצר את המחלקות ב C++ , אך הקוד שנוצר
היה כבד מידי, קובץ הרצה בן 12MB
לשאלתכם, שם הקובץ המכיל את הפונקציה main הוא :
SOAPPort_SiriWSPort_Client.java
אך אל תבנו עליו יותר מידי :
1. הוא משמש אותי רק כדי לבדוק שליחת שאילתות לשרת
והדפסת התשובות.
2.ובגלל מגבלה של משרד התחבורה, שליחת השאילתות
יכולה להתצבע רק מIP ספציפי שאושר.
2013/1/29 moshe nahmias <[email protected]
<mailto:[email protected]>>
זה גם מה שאני הבנתי, אבל אם הוא כותב את המערכת
שלו בג'אווה לא אוכל לעזור לו בתכנות של ממש
(אני יודע רק פרל).
בכל מקרה אפשר ליצור אובייקטים גם בשפות אחרות
עם המידע במקרה הגרוע דרך יצירה עצמאית בקוד
שכותבים (משרד התחבורה לא מחייב להשתמש בשפה
מסויימת).
2013/1/29 Amir Eldor <[email protected]
<mailto:[email protected]>>
משה, לפי הבנתי המערכת שמביא משרד התחבורה
מספקת קובץ wsdl שממנו ניתן ליצור אובייקטים
לכל מיני שפות שמבינות את הפורמט הזה, למשל,
PHP. שגיא השתמש באיזה ג'נרייטור לג'אווה
(שגיא, תקן אותי אם אני טועה). או שגם ל־PHP
יש כזה ג'נרייטור? והוא לא יוצר את
האובייקטים אוטומטית דרך ה־wsdl בזמן ריצה?
שגיא, אני מרגיש n00b, איפה ה־main בקוד
ג'וואה שנתת :)? אני רק בתהליכי למידת
סינטקס ארוכים בג'אווה, ככה שלמצוא את
הנקודת כניסה של התוכנת קומנד ליין שהזכרת
בין כל המחלקות שיש בפרוייקט בגיטהאב זה כמו
לחפש כרוב בערימת מרגרינה.
2013/1/29 moshe nahmias
<[email protected]
<mailto:[email protected]>>
אני אשמח לעזור, השאלה אם אפשר לעזור
בלי לדעת ג'אווה?
2013/1/29 Sagi Ben-Akiva
<[email protected]
<mailto:[email protected]>>
לצערי בצד שלי הדברים קורים לאט ...
עומס בעבודה עומס בבית ...
שגיא.
2013/1/29 Amir Eldor
<[email protected]
<mailto:[email protected]>>
סתם מתעניין - קרה משהו בנושא
מאז ההודעה האחרונה?
אמיר
2012/12/30 Sagi Ben-Akiva
<[email protected]
<mailto:[email protected]>>
שלום לכולם,
בשעה טובה, פתחתי פרוייקט
בgithub בכתובת הבאה :
https://github.com/sagiben/SIRI_IL
כרגע הפרוייקט מכיל את קבצי
המקור שנוצרו מקובץ ה wsdl
שסיפק משרד התחבורה ו main
מאוד פשוט ששולח שאילתות
לשרת ומדפיס את התשובה לקונסול.
אם למישהו יש משאבים פנויים
והוא מעוניין להצטרף, אשמח
לכל עזרה שתינתן ע"מ להמשיך
ולקדם את הפרוייקט.
תודה,
שגיא.
2012/10/18 Lior Kaplan
<[email protected]
<mailto:[email protected]>>
היי שגיא,
זאת אכן בעיה, אבל לא
גדולה מידי.
אם תרצה את עזרת העמותה
במשיכת הנתונים אז לא
אמורה להיות בעיה.
קפלן
2012/10/18 Sagi
Ben-Akiva
<[email protected]
<mailto:[email protected]>>
נכון, משרד התחבורה
פתח את הנתונים לציבור.
אבל המערכת משתמשת
ב IP based
Authentication
והחברה המפעילה
דורשת IP קבוע כדי
לתת גישה לנתונים.
המשמעות היא, שכדי
להשתמש בנתונים
חייבים להקים שרת
(בעל IP קבוע,
כמובן) שמתשאל את
השרת של משרד התחבורה
ואפליקציה מקבלת
נתונים מהשרת שהוקם.
שגיא
2012/10/9 Lior
Kaplan
<[email protected]
<mailto:[email protected]>>
2012/9/30 Lior
Kaplan
<[email protected]
<mailto:[email protected]>>
2012/9/28
Tomer
Cohen
<[email protected]
<mailto:[email protected]>>
טכנית
הם
מבקשים
שנחתום
על
המסמך,
אבל
אני לא
רואה
בטופס
שום
מידע
לגבי
מניעת
הפצת
המידע
לגורם
שלישי.
כלומר
אני לא
בטוח
אם
אפילו
אסור
לנו
להפיץ
את
כתובת
הממשקים.
אנחנו
מבקשים
גישה
בשם
"תאגיד
עמותת
המקור"?
אם יהיה
לזה ביקוש
מחברי
העמותה,
אני לא
רואה סיבה
שהעמותה לא
תקח את
ההתחייבות
על עצמה
(דורש
כמובן
התייעצות
עם היועץ
המשפטי
והחלטת
ועד). כמו
כן, גם אני
לא ראיתי
שום מגבלה
על הפצת
המידע
מחדש, ולכן
יש סיכוי
טוב שנפיץ
את המידע הלאה.
ומערכת בנושא
זה:
http://openplans.org/projects/an-open-platform-for-real-time-bus-tracking/
_______________________________________________
Discussions
mailing list
[email protected]
<mailto:[email protected]>
http://hamakor.org.il/cgi-bin/mailman/listinfo/discussions
_______________________________________________
Discussions
mailing list
[email protected]
<mailto:[email protected]>
http://hamakor.org.il/cgi-bin/mailman/listinfo/discussions
_______________________________________________
Discussions mailing list
[email protected] <mailto:[email protected]>
http://hamakor.org.il/cgi-bin/mailman/listinfo/discussions
--
Tomer Cohen
http://tomercohen.com <http://tomercohen.com/>
_______________________________________________
Discussions mailing list
[email protected]
http://hamakor.org.il/cgi-bin/mailman/listinfo/discussions