שליחת וקבלת API מאקסס

אפקטיביות

משתמש צעיר
אכן לנושא זה כדאי לפתוח אשכול.

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

וכאן הבן שואל, איך אפשר לשלוח פונקציות אלו מאקסס? וכמובן לקבל את התגובות וכו'.
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
הנה דוגמא קטנה לשימוש בAPI של גוגל לצורך החזרת המרחק בק"מ בין שני ישובים:
קוד:
Function GetDistanceGoogleApi(strStart As String, strDestination As String) As String
    Dim objHttpRequest As Object
    Dim strResponse As String
    Dim strUrl As String
    Dim oRegEx As Object, oMatches As Object

    Set objHttpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    strUrl = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=" & _
             Replace(strStart, " ", "+") & _
             "&destinations=" & _
             Replace(strDestination, " ", "+") & _
             "&mode=car&language=pl&sensor=false"

    objHttpRequest.Open "GET", strUrl
    objHttpRequest.Send

    With CreateObject("VBScript.RegExp")
        .Pattern = """value"".*?([0-9]+)"
        .Global = False
        Set oMatches = .Execute(objHttpRequest.responseText)
    End With

    Set objHttpRequest = Nothing

    GetDistanceGoogleApi = CDbl(Replace(oMatches(0).SubMatches(0), ".", ",")) / 1000
End Function
חידה: מה המרחק בין תל אביב לירושלים (בקו אווירי)?
תשובה: GetDistanceGoogleApi("Jerusalem", "Tel Aviv")
 

אפקטיביות

משתמש צעיר
נכתב ע"י moishy;2064577:
הנה דוגמא קטנה לשימוש בAPI של גוגל לצורך החזרת המרחק בק"מ בין שני ישובים:
strUrl = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=" & _
Replace(strStart, " ", "+") & _
"&destinations=" & _
Replace(strDestination, " ", "+") & _
"&mode=car&language=pl&sensor=false"
תודה moishy, זה בהחלט הדגמה טובה למושג API, רק ההבדל בין התשובה שלך לשאלה שלי היא שאתה השתמשת עם דף נחיתה, וגזרת מהדף HTTP את התוים הרלונטיים.
לעומת API של שליחת JSON בטכנולוגיית POST שאינו משתמש עם דף נחיתה כלל אלא רק שולח פונקציה לכתובת IP.
להלן תוצאה מתוכנה לניטור פקודות רשת, שניטרה לי פקודת API שאני רוצה לשלוח מאקסס:
החלק הורוד הוא (לכאורה) התשובה שקיבלתי משרת הAPI.
 

קבצים מצורפים

  • monitor network.JPG
    KB 44.1 · צפיות: 13

moishy

משתמש סופר מקצוען
מנוי פרימיום
אם לזה כוונתך התשובה עוד יותר פשוטה:
קוד:
Function Demo(strUrl As String, strJSON As String) As String
    Dim objHttpRequest As Object
    
    Set objHttpRequest = CreateObject("MSXML2.ServerXMLHTTP")
    
    objHttpRequest.Open "POST", strUrl, False

   objHttpRequest.setRequestHeader "Content-type", "application/json"
   objHttpRequest.send (strJSON)
   
   Set objHttpRequest = Nothing
   
   Demo = objHttpRequest.responseText
End Function
 

אפקטיביות

משתמש צעיר
תודה רבה, נראה שאנחנו בכיוון הנכון.
ישנה בעיה, כנראה בתחביר.
 

קבצים מצורפים

  • error 1.JPG
    KB 38.8 · צפיות: 8
  • error 2.JPG
    KB 39.1 · צפיות: 5

אפקטיביות

משתמש צעיר
תיקון הודעה:
תיקנתי את התחביר, הפונקציה נשלחת! השרת מחזיר תשובה! (יש לי LOG מהשרת API).
אבל הפונקציה בעסקים לא מקבלת את התשובה, להלן הודעת השגיאה, הארגומנט objHttpRequest.responseText מוגדר כNothing אף לאחר קבלת התגובה כביכול.

ו.. שאלה נוספת (באותו עניין!): יש פונקציה להמרת תאריך-שעה לפורמט unixDateTime במבנה 10 ספרות? [לדוג': 1414154521]
 

קבצים מצורפים

  • error 3.JPG
    KB 35.8 · צפיות: 7

moishy

משתמש סופר מקצוען
מנוי פרימיום
תנסה להשתמש עם <code>MSXML2.ServerXMLHTTP60 במקום </code><code>MSXML2.ServerXMLHTTP
</code>
 

moishy

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

moishy

משתמש סופר מקצוען
מנוי פרימיום
ובענין unixDateTime (למרות שלא הבנתי למה זה אותו ענין):
קוד:
(Now - DateSerial(1970, 1, 1)) * 86400
או לחילופין:
קוד:
DateDiff("s", 25569, Now)
 

שמח לעזור

משתמש מקצוען
D I G I T A L
ההגדרה של API היא דרך כל שהיא בה אפשר לתקשר עם מערכת אחרת באופן ממוחשב.
וסבתא111 התכוון למושג הספצפי Restful Web Service שזה סוג ספציפי של API דרך תקשורת האינטרנט (http), ובסיטואציה שלו הוא מקבל ומחזיר פורמט JSON.
הדוגמה של מושי מgooglemaps היא בדיוק API. התשובה מיעודת לפירוק בדיוק כפי שהוא עשה (המילים "גזרת מהדף HTTP את התוים הרלונטיים" הם תמיד נכונות אם כי זה קצת תיאור גס, אבל כל שליפה מתשובה בתקשורת אינטרנט בסופו של דבר "גוזרת תוים מתאימים"), וכל דרך אחרת תעשה זאת מאחורי הקלעים. החילוקים שיש (פרמטרים בurl ולא בפוסט), הם עניין של סיטואציה.
 

אפקטיביות

משתמש צעיר
נכתב ע"י שמח לעזור;2064697:
ההגדרה של API היא דרך כל שהיא בה אפשר לתקשר עם מערכת אחרת באופן ממוחשב.
וסבתא111 התכוון למושג הספצפי Restful Web Service שזה סוג ספציפי של API דרך תקשורת האינטרנט (http), ובסיטואציה שלו הוא מקבל ומחזיר פורמט JSON.
הדוגמה של מושי מgooglemaps היא בדיוק API. התשובה מיעודת לפירוק בדיוק כפי שהוא עשה (המילים "גזרת מהדף HTTP את התוים הרלונטיים" הם תמיד נכונות אם כי זה קצת תיאור גס, אבל כל שליפה מתשובה בתקשורת אינטרנט בסופו של דבר "גוזרת תוים מתאימים"), וכל דרך אחרת תעשה זאת מאחורי הקלעים. החילוקים שיש (פרמטרים בurl ולא בפוסט), הם עניין של סיטואציה.
מקבל את ההערה, אכן, בכל תגובה של API יש צורך לפרק את התשובה, וmoishy עושה את זה כמו תמיד הכי טוב..
רק רציתי למקד את השאלה לכיוון הJSON שלא להפוך את האשכול לדיון על דפי נחיתה למיניהם, כפי שזה היה נראה לי ברגע הראשון.
 

אפקטיביות

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

אפקטיביות

משתמש צעיר
נכתב ע"י moishy;2064577:
חידה: מה המרחק בין תל אביב לירושלים (בקו אווירי)?
תשובה: GetDistanceGoogleApi("Jerusalem", "Tel Aviv")
ואגב, התשובה לחידה היא לא ה68 ק"מ שהפונקציה מחזירה אלא 54 ק"מ (בקו אווירי!!!!)...
מרחק נסיעה הינו אכן 68 ק"מ. בדוק!!
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
Action: <action type><CRLF>
<Key 1>: <Value 1><CRLF>
<Key 2>: <Value 2><CRLF>
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
לא JSON טקסט פשוט.
קוד:
strAction = "Action: login" & vbCrLf & _
"Username: admin " & vbCrLf & _
"Secret: god" & vbCrLf & vbCrLf
 

אפקטיביות

משתמש צעיר
נכתב ע"י moishy;2065431:
לא JSON טקסט פשוט.
קוד:
strAction = "Action: login" & vbCrLf & _
"Username: admin " & vbCrLf & _
"Secret: god" & vbCrLf & vbCrLf
האם הקוד המלא ייראה בדיוק כך?:
קוד:
Function Demo(strUrl As String, strAction As String) As String
    Dim objHttpRequest As Object

    strUrl = "http://212.213.214.215:1234"
    strAction = "Action: login" & vbCrLf & _
                "Username: admin " & vbCrLf & _
                "Secret: god" & vbCrLf & vbCrLf

    Set objHttpRequest = CreateObject("MSXML2.ServerXMLHTTP")

    objHttpRequest.Open "POST", strUrl, False
    'האם למחוק את השורה הבאה?
    objHttpRequest.setRequestHeader "Content-type", "application/json"
    objHttpRequest.send (strAction)

    Demo = objHttpRequest.responseText

    Set objHttpRequest = Nothing
End Function

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

moishy

משתמש סופר מקצוען
מנוי פרימיום
עקרונית דומה (מעולם לא התעסקתי עם אסטריסק, כך שאני לא בטוח אבל ננסה).
1. כיון שהגדרת את המשתנים בתוך הפונקציה אפשר למחוק אותם מהשורה הראשונה.
2. למחוק את השורה של setRequestHeader, אולי לשנות לtext/html
 

אפקטיביות

משתמש צעיר
נכתב ע"י moishy;2065433:
עקרונית דומה (מעולם לא התעסקתי עם אסטריסק, כך שאני לא בטוח אבל ננסה).
1. כיון שהגדרת את המשתנים בתוך הפונקציה אפשר למחוק אותם מהשורה הראשונה.
2. למחוק את השורה של setRequestHeader, אולי לשנות לtext/html
אני חושב שהפקודה אמורה להיות פשוטה יותר. עיין בתמונה המצו"ב,
זהו צילום מסך של מוניטור רשת, שניטר לי פקודה שביצעה תוכנה מסויימת, הפקודה היא קונקט לאסטריסק, הכחול זה השליחה, והסגול זה התגובה.
אין כאן אזכור לPOST, HTML, ושאר ירקות..
 

קבצים מצורפים

  • monitor network PBX.JPG
    KB 26.5 · צפיות: 6

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קלג

א שִׁיר הַמַּעֲלוֹת לְדָוִד הִנֵּה מַה טּוֹב וּמַה נָּעִים שֶׁבֶת אַחִים גַּם יָחַד:ב כַּשֶּׁמֶן הַטּוֹב עַל הָרֹאשׁ יֹרֵד עַל הַזָּקָן זְקַן אַהֲרֹן שֶׁיֹּרֵד עַל פִּי מִדּוֹתָיו:ג כְּטַל חֶרְמוֹן שֶׁיֹּרֵד עַל הַרְרֵי צִיּוֹן כִּי שָׁם צִוָּה יְהוָה אֶת הַבְּרָכָה חַיִּים עַד הָעוֹלָם:
נקרא  16  פעמים

אתגר AI

תקווה לעתיד טוב יותר • אתגר 17

לוח מודעות

למעלה