You are currently viewing מה אפשר לעשות עם API של נאס”א ו- ChatGPT?

מה אפשר לעשות עם API של נאס”א ו- ChatGPT?

  • תגובות:יש תגובה אחת
  • זמן קריאה:זמן קריאה 4 דקות

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

במסגרת המיני-פרויקט על וויאג’ר (את הפוסט הראשון אפשר לקרוא פה), החלטתי שבאחד הפוסטים ארצה לשלב בָּאנֶר המציג את המרחק של הגשושיות מכדור הארץ. אני מעוניין שהבאנר יתעדכן ב- Live כל מספר שניות, ויציג כמה מהר הן מתרחקות מאיתנו. הגשושיות הן אמצעי החישה המרוחק ביותר שיש כיום לאנושות, הן נעות במהירות של 15-17 ק”מ בכל שניה (55,000 קמ”ש) ומרחקן מאיתנו הוא מיליארדי קילומטרים – מספרים מעוררי מחשבה שבהחלט כדאי להמחיש בבאנר בולט ומתעדכן שיוסיף עניין וצבע לפוסט.

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

דרך אחרת היא לקחת את העמוד באתר נאס”א שמציג נתוני Live ולעשות עליו מניפולציות לחילוץ המידע, אך למה לבצע מניפולציות כשאפשר לקבל את המידע הגולמי עצמו, ועוד מנאס”א?

קבלו את מערכת Horizons של מעבדות JPL בנאס”א. מעבדת JPL היא אחד הגופים המרכזיים בנאס”א שאחראי על המשימות הלא מאויישות של הסוכנות. בין התוכניות המפורסמות שלה אפשר למנות את Mariner, Voyager, Galileo, Cassini-Huygens, Juno, New-Horizons. גם משימת Europa Clipper שמתוכננת לצאת לדרך בסוף השנה היא תכנית של JPL. מערכת Horizons הוא שירות אינטרנטי המספק באופן חופשי וללא תשלום מידע אונליין על גופים במערכת השמש. השירות כולל מידע על כל כוכבי הלכת, כוכבי הלכת הננסיים, 293 ירחים במערכת השמש, לוויינים וגשושיות (למשל תחנת החלל הבינלאומית או טלסקופ ג’יימס ווב) ואפילו נקודות לגראנז’. על פי הצהרת סוכנות החלל, מסד הנתונים של Horizons מונה כארבעת אלפים שביטים וקרוב למיליון וחצי אסטרואידים! דאטה-בייס רציני, וכולו עדכני ונגיש לכל דורש. 

המערכת מכילה מידע פלנטרי כמו אורך יממה, נפח ומסת הפלנטה, תאוצת כבידה, אלְבֵּדוֹ ועוד (חלק מהנתונים מתעדכנים מידי מספר חודשים בהתאם לתצפיות). בנוסף השירות מספק נתוני אפמריס (Ephemeris) שהוא למעשה קובץ נתונים המכיל את המיקומים המדוייקים של גרמי השמיים על פני טווח והפרש זמנים מוגדר. מקור המילה אפמריס הוא מלטינית ופירושו לוח שנה או יומן.

את המידע מ- Horizons אפשר לקבל במגוון דרכים – ממשק web דרכו אפשר להזין ידנית את השדות המבוקשים ולקבל פלט טקסטואלי על המסך או דרך שורת פקודה המבוססת על פרוטוקול telnet (פרוטוקול client-server מיושן אך פשוט לקבלת מידע משרתים), באמצעות email או באמצעות API. כך נראית התוצאה הסופית של הבאנר (הסרטון ברקע כמובן לא קשור להורייזנס 🙂 עם המידע שהתקבל מה- API של הורייזונס:

איפה הן עכשיו?

המרחק של וויאג'ר 1 מכדור הארץ

Km

המרחק של וויאג'ר 2 מכדור הארץ

Km

בשורות הבאות אציג סקירה קצרה ומאוד בסיסית כיצד לפנות להורייזנס, לקבל מידע ולהציג אותו בדף אינטרנט. האם נדרשים ידע והבנה בתכנות ובאינטרנט? כן, אבל בסיסי למדי. לא צריך לדעת PHP או HTML. מי שלמד שפה כלשהי (כמו: C, JAVA, PYTHON, VB Macros), יידע להתמודד בצורה טובה עם התוכן.

API או AI? למה לא שניהם בעצם?

API, ראשי תיבות של Application Programming Interface ובעברית ממשק תכנות יישומים, הוא ספריה של פקודות ופונקציות בהן יכולים מתכנתים להשתמש בקלות בלי הצורך לקודד ולכתוב אותן בעצמם. במילים אחרות ובהקשר שלנו, נאס”א עשתה לנו את העבודה והעמידה לרשותנו שרת מחשב, שניתן לפנות אליו עם שאילתת מידע למשל על כוכב הלכת צדק ולקבל בחזרה תשובה עם הנתונים. כל מה שצריך לדעת זה להיכן להפנות את השאילתה ומה לשאול. אופן קידוד השאילתות מופיע בעמוד ההדרכה של נאס”א בקישור הזה, הכולל תיעוד מלא על האופן שפונים להורייזנס.

למשל, על מנת לגשת לשרת צריך לפנות לכתובת הבאה:

https://ssd.jpl.nasa.gov/api/horizons.api

כדי לכתוב שאילתה חוקית, כזו ששרת הורייזנס יידע “לפרש”,  צריך לדעת אילו פרמטרים לכלול בה, ומה להציב באותם הפרמטרים. כאן נכנס לתמונה כלי שימושי נוסף, רב עוצמה ומאוד מוכר – ChatGPT. למה לעמול על קוד שעות, שלא לדבר על ללמוד שפת תכנות חדשה, כש- AI יכול לכתוב אותו בשניות? ביקשתי מה- Chat לכתוב לי קוד PHP שמציג את המרחקים של כוכב הלכת צדק מהשמש היום ובשבעת הימים הבאים. PHP זוהי שפה לכתיבת סקריפטים ליישומי אינטרנט. במקרה שלנו, סקריפט ה- PHP הוא קוד לקוח (אני הלקוח, ה- client) הפונה אל השרת של נאס”א (Horizons) לקבל נתוני ה- Ephemeris ואז מציג אותו בדפדפן. לכן ביקשתי מ- ChatGPT משהו בנוסח:

Write a php script that turns to NASA horizons API and then returns and echoes to my web browser the distance of Jupiter from the sun for the next 7 days.

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

				
					<?php
// Function to fetch Jupiter's distance from the Sun for 7 days from today
function get_jupiter_sun_distance() {
    // Set the current date and the date 7 days from today
    $start_time = gmdate('Y-m-d'); // Current date in YYYY-MM-DD format
    $stop_time = gmdate('Y-m-d', strtotime('+7 days'));  // Next day in YYYY-MM-DD format

    $base_url = 'https://ssd.jpl.nasa.gov/api/horizons.api';
    $params = array(
        'format' => 'text',
        'COMMAND' => "'599'", // Jupiter's ID is 599
        'OBJ_DATA' => 'YES',
        'MAKE_EPHEM' => 'YES',
        'EPHEM_TYPE' => 'OBSERVER',
        'CENTER' => '500@10', // Center at the Sun
        'START_TIME' => "'$start_time'",
        'STOP_TIME' => "'$stop_time'",
        'STEP_SIZE' => "'1d'", // Correct step size without space
        'QUANTITIES' => "'19'" // 'r' value (heliocentric distance)
     );

    $query_string = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
    $url = $base_url . '?' . $query_string;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    curl_close($ch);

    return $response ?: ['error' => 'Failed to retrieve data from NASA Horizons API.'];
    
}

// Call the function to display the distances
echo "<pre>" . htmlspecialchars(get_jupiter_sun_distance()) . "</pre>";
?>

				
			

אציין שיש לי רקע בתכנות, בעיקר מהלימודים (לפני הרבה שנים) ומתחביבים, אך איני מתכנת במקצועי. הידע שלי בכתיבת syntax של PHP דל מאוד, ובוודאי שאני לא מכיר את כל הפונקציות. ChatGPT עושה פה את רוב העבודה, וכאשר הקוד לא עובד טוב, אני מכוון אותו לתיקונים הנדרשים. זו סוג של עבודת צוות, רק עם בינה מלאכותית. 

נעבור בקצרצרה על הקוד. החלק העיקר של הסקריפט הוא פונקציה בשם ()get_jupiter_sun_distance שמטרתה להחזיר Ephemris עם המרחק של צדק מהשמש. 

בשורות 5-6 אנו מגדירים את טווח התאריכים – התאריך של היום ועד שבעה ימים נוספים קדימה.

בשורה 8 מוגדרת הכתובת של ה- API, ובשורה 9 מוגדרים הפרמטרים שלו:

format – מגדיר את מבנה הנתונים שיוחזרו (טקסט או קובץ JSON).

COMMAND – מגדיר את קוד האובייקט. במקרה שלנו צדק.

OBJ_DATA – מגדיר האם הורייזנס תחזיר גם סיכום מידע טקסטואלי.

MAKE_EPHEM – הדלקה או כיבוי של נתוני אפמריס.

EPHEM_TYPE – קובע את סוג האפמריס. ניתן לקבל אפמריס בסוגים שונים של הצגה (מערכות קוארדינטות). לא ניכנס לזה כאן, ונאמר ש- OBSERVER הוא הפשוט והאינטואיטיבי ביותר.

START_TIME ו- STOP_TIME מגדירים את טווח הזמנים, ונציב בהם את משתני הזמנים שהגדרנו בשורות 5-6.

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

QUANTITIES – מגדיר איזה יכלל באפמריס. בחרנו בקוד ’19’ שהוא ערך הרדיוס בין כוכב הלכת לשמש. הערך יוחזר ביחידות אסטרונומיות. איך יודעים? נראה בהמשך. כל הקודים מופיעים בדף ההסבר וגם בממשק ה- web.

בשורות 22-28 בונים את השאילתה, בשורה 30 מבצעים אותה, ואת התשובה מהורייזנס מאחסנים במשתנה response$. בשורה 33 מופיעה פקודה שמסיימת למעשה את הפונקציה ומחזירה את המידע שהתקבל לתוכנית הראשית שתריץ אותה. התוכנית קצרה ביותר – בסך הכול שלוש שורות (38-39 בנוסף לשורה 1).

התוכנית הראשית מדפיסה על המסך את הערך שמתקבל מ- ()get_jupiter_sun_distance

את הקוד שמרתי בקובץ בשם horizons_demo.php. כעת צריך שרת כדי להריץ אותו. ניתן להעתיק אותו לשרת אינטרנט כפי שעשיתי מהאתר שלי. למי שלא מחזיק דומיין, שאלו כנראה רוב הקוראים, יש תוכנות מחשב שיודעות לייצר שרת אינטרנט בשבילכם. למשל זאמפ (XAMPP), תוכנה חופשית בקוד פתוח להרצת שרת אינטרנט במחשב האישי המבוססת על Apache HTTP Server – תוכנת שרת HTTP הנפוצה בעולם, גם היא קוד פתוח. ההסבר על נושא שרתי האינטרנט חורג ממטרות הפוסט הזה, והמעוניינים בהרחבה יכולים להתחיל בצפייה בסרטון הזה, שהוא לבדו יכול להיות מספיק בשביל להרים שרת בסיסי לטובת “משחק” עם ה- API.

לאחר שמריצים בדפדפן את הקובץ (מי שרוצה להריץ בעצמו יכול בקישור הזה), מוצג האפמריס מהורייזנס:

				
					API VERSION: 1.2
API SOURCE: NASA/JPL Horizons API

*******************************************************************************
 Revised: April 12, 2021               Jupiter                              599
 
 PHYSICAL DATA (revised 2024-Jun-30):
  Mass x 10^22 (g)      = 189818722 +- 8817 Density (g/cm^3)  = 1.3262 +- .0003
  Equat. radius (1 bar) = 71492+-4 km       Polar radius (km)     = 66854+-10
  Vol. Mean Radius (km) = 69911+-6          Flattening            = 0.06487
  Geometric Albedo      = 0.52              Rocky core mass (Mc/M)= 0.0261
  Sid. rot. period (III)= 9h 55m 29.711 s   Sid. rot. rate (rad/s)= 0.00017585
  Mean solar day, hrs   = ~9.9259         
  GM (km^3/s^2)         = 126686531.900     GM 1-sigma (km^3/s^2) =  +- 1.2732
  Equ. grav, ge (m/s^2) = 24.79             Pol. grav, gp (m/s^2) =  28.34
  Vis. magnitude V(1,0) = -9.40
  Vis. mag. (opposition)= -2.70             Obliquity to orbit    =  3.13 deg
  Sidereal orbit period = 11.861982204 y    Sidereal orbit period = 4332.589 d
  Mean daily motion     = 0.0831294 deg/d   Mean orbit speed, km/s= 13.0697
  Atmos. temp. (1 bar)  = 165+-5 K          Escape speed, km/s    =  59.5           
  A_roche(ice)/Rp       =  2.76             Hill's sphere rad. Rp = 740
                                 Perihelion   Aphelion     Mean
  Solar Constant (W/m^2)         56           46           51
  Maximum Planetary IR (W/m^2)   13.7         13.4         13.6
  Minimum Planetary IR (W/m^2)   13.7         13.4         13.6
*******************************************************************************


*******************************************************************************
Ephemeris / API_USER Thu Sep 12 13:25:20 2024 Pasadena, USA      / Horizons    
*******************************************************************************
Target body name: Jupiter (599)                   {source: jup365_merged}
Center body name: Sun (10)                        {source: jup365_merged}
Center-site name: BODYCENTRIC
*******************************************************************************
Start time      : A.D. 2024-Sep-12 00:00:00.0000 UT      
Stop  time      : A.D. 2024-Sep-19 00:00:00.0000 UT      
Step-size       : 1440 minutes
*******************************************************************************
Target pole/equ : IAU_JUPITER                     {West-longitude positive}
Target radii    : 71492.0, 71492.0, 66854.0 km    {Equator_a, b, pole_c}       
Center geodetic : 0.0, 0.0, -695700.0             {E-lon(deg),Lat(deg),Alt(km)}
Center cylindric: 0.0, 0.0, 0.0                   {E-lon(deg),Dxy(km),Dz(km)}
Center pole/equ : IAU_SUN                         {East-longitude positive}
Center radii    : 695700.0, 695700.0, 695700.0 km {Equator_a, b, pole_c}       
Target primary  : Sun
Vis. interferer : None
Rel. light bend : Sun                             {source: jup365_merged}
Rel. lght bnd GM: 1.3271E+11 km^3/s^2                                          
Atmos refraction: NO (AIRLESS)
RA format       : HMS
Time format     : CAL 
Calendar mode   : Mixed Julian/Gregorian
EOP file        : eop.240911.p241205                                           
EOP coverage    : DATA-BASED 1962-JAN-20 TO 2024-SEP-11. PREDICTS-> 2024-DEC-04
Units conversion: 1 au= 149597870.700 km, c= 299792.458 km/s, 1 day= 86400.0 s 
Table cut-offs 1: Elevation (-90.0deg=NO ),Airmass     n.a.    , Daylight (NO )
Table cut-offs 2: Solar elongation (  0.0,180.0=NO ),Local Hour Angle( 0.0=NO )
Table cut-offs 3: RA/DEC angular rate (     0.0=NO )                           
*******************************************************************************
 Date__(UT)__HR:MN                   r        rdot
**************************************************
$$SOE
 2024-Sep-12 00:00      5.047842880328   0.5127477
 2024-Sep-13 00:00      5.048139288401   0.5141976
 2024-Sep-14 00:00      5.048435880008   0.5129155
 2024-Sep-15 00:00      5.048732674529   0.5142420
 2024-Sep-16 00:00      5.049029019985   0.5130290
 2024-Sep-17 00:00      5.049326074399   0.5147403
 2024-Sep-18 00:00      5.049623605687   0.5167339
 2024-Sep-19 00:00      5.049922442732   0.5168340
$$EOE
*******************************************************************************
Column meaning:
 
TIME

  Times PRIOR to 1962 are UT1, a mean-solar time closely related to the
prior but now-deprecated GMT. Times AFTER 1962 are in UTC, the current
civil or "wall-clock" time-scale. UTC is kept within 0.9 seconds of UT1
using integer leap-seconds for 1972 and later years.

  Conversion from the internal Barycentric Dynamical Time (TDB) of solar
system dynamics to the non-uniform civil UT time-scale requested for output
has not been determined for UTC times after the next July or January 1st.
Therefore, the last known leap-second is used as a constant over future
intervals.

  Time tags refer to the UT time-scale conversion from TDB on Earth
regardless of observer location within the solar system, although clock
rates may differ due to the local gravity field and no analog to "UT"
may be defined for that location.

  Any 'b' symbol in the 1st-column denotes a B.C. date. First-column blank
(" ") denotes an A.D. date.
 
CALENDAR SYSTEM

  Mixed calendar mode was active such that calendar dates after AD 1582-Oct-15
(if any) are in the modern Gregorian system. Dates prior to 1582-Oct-5 (if any)
are in the Julian calendar system, which is automatically extended for dates
prior to its adoption on 45-Jan-1 BC.  The Julian calendar is useful for
matching historical dates. The Gregorian calendar more accurately corresponds
to the Earth's orbital motion and seasons. A "Gregorian-only" calendar mode is
available if such physical events are the primary interest.

  NOTE: "n.a." in output means quantity "not available" at the print-time.
 
 'r        rdot' =
   The Sun's apparent range ("r", light-time aberrated) and range-rate ("rdot")
relative to the target center, as seen by the observer. A positive "rdot" means
the target center was moving away from the Sun, negative means moving toward
the Sun.  Units: AU and KM/S

Computations by ...

    Solar System Dynamics Group, Horizons On-Line Ephemeris System
    4800 Oak Grove Drive, Jet Propulsion Laboratory
    Pasadena, CA  91109   USA

    General site: https://ssd.jpl.nasa.gov/
    Mailing list: https://ssd.jpl.nasa.gov/email_list.html
    System news : https://ssd.jpl.nasa.gov/horizons/news.html
    User Guide  : https://ssd.jpl.nasa.gov/horizons/manual.html
    Connect     : browser        https://ssd.jpl.nasa.gov/horizons/app.html#/x
                  API            https://ssd-api.jpl.nasa.gov/doc/horizons.html
                  command-line   telnet ssd.jpl.nasa.gov 6775
                  e-mail/batch   https://ssd.jpl.nasa.gov/ftp/ssd/hrzn_batch.txt
                  scripts        https://ssd.jpl.nasa.gov/ftp/ssd/SCRIPTS
    Author      : Jon.D.Giorgini@jpl.nasa.gov

****************************************************************
				
			

נעבור על הנתונים שהתקבלו מה- API. החלק העליון מכיל נתונים שונים על כוכב הלכת צדק. החלק השני מפרט על סוג האפמריס ומאפייניו הבסיסיים. בין מילות הקוד SOE$$ ל- EOE$$ (שהם קיצור של Start Of Ephemeris ו- End Of Ephemeris) נמצאים הנתונים עצמם, אלו שמעניינים אותנו. 

				
					Date__(UT)__HR:MN                   r        rdot
**************************************************
$$SOE
 2024-Sep-13 00:00      5.048139288401   0.5141976
 2024-Sep-14 00:00      5.048435880008   0.5129155
 2024-Sep-15 00:00      5.048732674529   0.5142420
 2024-Sep-16 00:00      5.049029019985   0.5130290
 2024-Sep-17 00:00      5.049326074399   0.5147403
 2024-Sep-18 00:00      5.049623605687   0.5167339
 2024-Sep-19 00:00      5.049922442732   0.5168340
 2024-Sep-20 00:00      5.050221165165   0.5183988
$$EOE
				
			

אלו הנתונים שהוחזרו עבור קוד ’19’ של הפרמטר QUANTITIES שהגדרנו בשאילתה. ניתן לראות עמודה של תאריך, עמודה של r (המרחק בין השמש לצדק), ועמודה של rdot, הנגזרת של r או בקיצור מהירות ההתרחקות (או ההתקרבות) של מרכז הפלנטה יחסית לשמש (זו אינה מהירות הסיבוב של הפלנטה סביב השמש). אם הפלנטות היו סובבות סביב השמש במעגל מושלם, rdot היה שווה 0.

ניתן לראות שבתאריך 13 בספטמבר 2024 בשעה 00:00 (שעון UTC) המרחק של צדק מהשמש הוא 5.048139288401=r והמהירות היא 0.5141976=rdot.

איך יודעים (מעבר לרמז בכותרת העמודה) שהזמן הוא UTC (ולא שעון ישראל), ומה המשמעות ויחידות המדידה של r ו- rdot? בשביל זה צריך לקרוא את החלק האחרון בתשובת ה- API.

המידע על הזמן:

				
					Column meaning:
 
TIME

  Times PRIOR to 1962 are UT1, a mean-solar time closely related to the
prior but now-deprecated GMT. Times AFTER 1962 are in UTC, the current
civil or "wall-clock" time-scale. UTC is kept within 0.9 seconds of UT1
using integer leap-seconds for 1972 and later years.
				
			

והמידע על r ו- rdot:

				
					'r        rdot' =
   The Sun's apparent range ("r", light-time aberrated) and range-rate ("rdot")
relative to the target center, as seen by the observer. A positive "rdot" means
the target center was moving away from the Sun, negative means moving toward
the Sun.  Units: AU and KM/S
				
			

כעת אנו יודעים שצדק נמצא כחמש יחידות אסטרונומיות (AU) מהשמש ומתרחק ממנה במהירות של כחצי ק”מ בכל שניה!

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

				
					<?php
// Function to fetch Jupiter's distance from the Sun for 7 days from today
function get_jupiter_sun_distance() {
    // Set the current date and the date 7 days from today
    $start_time = gmdate('Y-m-d'); // Current date in YYYY-MM-DD format
    $stop_time = gmdate('Y-m-d', strtotime('+7 days'));  // Next day in YYYY-MM-DD format

    $base_url = 'https://ssd.jpl.nasa.gov/api/horizons.api';
    $params = array(
        'format' => 'text',
        'COMMAND' => "'599'", // Jupiter's ID is 599
        'OBJ_DATA' => 'YES',
        'MAKE_EPHEM' => 'YES',
        'EPHEM_TYPE' => 'OBSERVER', // Heliocentric data (Sun-centered)
        'CENTER' => '500@10', // Center at the Sun
        'START_TIME' => "'$start_time'",
        'STOP_TIME' => "'$stop_time'",
        'STEP_SIZE' => "'1d'", // Correct step size without space
        'QUANTITIES' => "'19'" // 'r' value (heliocentric distance)
     );

    $query_string = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
    $url = $base_url . '?' . $query_string;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    curl_close($ch);

    // Check if the response is valid
    if (!$response) {
        return 'Failed to retrieve data from NASA Horizons API.';
    }
    
    
    // Split the response into lines
    $lines = explode("\n", $response);
    $parsed_data = null;
    $found = false;

    // Loop through each line and find the data between $$SOE and $$EOE
    foreach ($lines as $line) {
        if (strpos($line, '$$SOE') !== false) {
            $found = true;
            continue;
        }
        if (strpos($line, '$$EOE') !== false) {
            break;
        }
        
        // Find the first floating-point number (which should be the 'r' value)
        if ($found && preg_match("/\s+([+-]?\d+\.\d+)/", $line, $matches)) {
            $parsed_data = ltrim($matches[1]); // Extract the 'r' value (AU)
            break;
        }
    }

    // If 'r' value was found, convert it to kilometers and echo the result
    if ($parsed_data) {
        // Convert 'r' from AU to kilometers (1 AU = 149,597,870.7 km)
        $r_km = $parsed_data * 149597870.7;
        echo "Jupiter's distance from the Sun is: " . number_format($r_km, 2) . " km<br>";
    } else {
        echo "Failed to extract 'r' value from the response.";
    }
}

    
// Call the function to display the distances
echo get_jupiter_sun_distance();
//echo "<pre>" . htmlspecialchars(get_jupiter_sun_distance()) . "</pre>";
?>

				
			

ומה שיתקבל בדפדפן:

				
					Jupiter's distance from the Sun is: 755,190,888.54 km
				
			

מערכת השמש ב- 2D

מכאן השמיים הם לחלוטין לא הגבול! בעזרת שני הכלים רבי העוצמה הללו, ה- API של נאס”א וה- AI כדוגמת ה- ChatGPT, אפשר ליצור אפליקציות, סימולציות, מפות, תרשימים, באנרים, אלמנכים ומה בעצם לא?

נסיים במודל של מערכת השמש בדו-מימד שיצרתי באמצעות המידע מהורייזנס וקוד המבוסס על WebGL, ממשק API של JavaScript המאפשר יצירת תוכן 3D בעל ביצועים גבוהים בדפדפני אינטרנט מודרניים ללא צורך בהתקנת תוספים. ל- WebGL יש ספריה בשם three.js המבוססת על קוד פתוח (איך לא) של API המכיל פונקציות קלות ליישום ליצירת אובייקטי תלת מימד. מה שעשיתי כאן לא מגרד אפילו את קצה היכולות של הפלטפורמה הזו. זו רק הדגמה מה אפשר לעשות עם המידע הכל כך נגיש כיום. יצרתי תרשים נוסף של הפלנטות הפנימיות בלבד (מרקורי, נוגה, ארץ, מאדים) כיוון שהפלנטות הפנימיות יצאו דחוסות ודרסו אחת את השניה בשל מגבלות גודל המסך. הדבר ממחיש היטב את הגדלים והיחסים במערכת השמש.

נראה לא רע, והכל בפחות משעה עבודה. לא סטלריום, אבל בדרך לשם… 😉 

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

אז קדימה, לכו לצ’טט עם ה- Chat וצרו לכם תוכן דיגיטלי עם מידע חינמי מנאס”א.

התמונה הראשית בפוסט: תמונה שנוצרה על ידי ChatGPT גרסה 4.

לפוסט הזה יש תגובה אחת

  1. משתמש אנונימי (לא מזוהה)

    מדהים! כל הכבוד על ההסברים המפורטים.

כתיבת תגובה