API באקסס
-
@מצפה לגדול
בא תסביר לי רק תאורטית:
מה זה "באיזו שהיא דרך"?
זה לא נשלח כחלק מהURL?
אם אני יושב שם במקום השרת מה אני מקבל?זה מגיע בגוף הבקשה, בקשת GET מכילה את המידע ב URL, ובקשת POST מוסיפה body לבקשה עם המידע, בתוסף שאתה משתמש צריך להוסיף את הנתונים בשדה Raw payload בפורמט של key=value&key2=value2 או בשדה data form כמו טופס שהשמאלי זה ה key והימני זה value
פורסם במקור בפורום CODE613 ב01/04/2017 22:33 (+03:00)
-
טוב יש לי זמן, בא נמשיך.
כעת תעשה בלי להבין סתם בשביל לסגור את הפער של צורך העניין שלשמו באת
(לא הבנתי עד הסוף מה הפרוצדורה אבל אתה כנראה כבר תדע לכוון אותי)
את המשך הלימוד נדחה לאחרי זה אם יהיה לי (ולך) כח.כעת תעשה כמו תוכי:
תקליק בימני על סמל הפרוייקט, ותבחר בתפריט הנפתח Add, ובתת בתפרטי בclass...
בחלון הנפתח תן שם למטה: PostMultipart
בדף שנפתח תדביק את התוכן הבא:using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Net; using System.Text; class PostMultipart { public PostMultipart() { Files = new List<UploadFile>(); Values = new NameValueCollection(); } public List<UploadFile> Files { get; set; } public NameValueCollection Values { get; set; } public class UploadFile { public UploadFile(string name, string filename, Func<Stream> getStream, string contentType = "application/octet-stream") { Name = name; Filename = filename; ContentType = contentType; GetStream = getStream; } public string Name { get; } public string Filename { get; } public string ContentType { get; } public Func<Stream> GetStream { get; } } public byte[] GetResponseBytes(string address) { var request = WebRequest.Create(address); var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); request.Method = "POST"; request.ContentType = "multipart/form-data; boundary=" + boundary; boundary = "--" + boundary; using (var requestStream = request.GetRequestStream()) { foreach (string name in Values.Keys) { var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.UTF8.GetBytes(Values[name] + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); } foreach (var file in Files) { var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name, file.Filename, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", file.ContentType, Environment.NewLine)); requestStream.Write(buffer, 0, buffer.Length); using (var stream = file.GetStream()) stream.CopyTo(requestStream); buffer = Encoding.ASCII.GetBytes(Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); } var boundaryBuffer = Encoding.ASCII.GetBytes(boundary + "--"); requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length); } using (var response = request.GetResponse()) using (var responseStream = response.GetResponseStream()) using (var stream = new MemoryStream()) { responseStream.CopyTo(stream); return stream.ToArray(); } } }
כעת פתח את הפאנל למטה בשם Nuget Manager Console והדבק שם את הטקסט הבא:
Install-Package Newtonsoft.Jsonבע"ה אמשיך בקרוב.
פורסם במקור בפורום CODE613 ב01/04/2017 23:37 (+03:00)
-
Each package is licensed to you by its owner. NuGet is not responsible for, nor does it grant any licenses to, third-party packages. Some packages may include dependencies which are governed by additional licenses. Follow the package source (feed) URL to determine any dependencies. Package Manager Console Host Version 4.0.0.2323 Type 'get-help NuGet' to see all available NuGet commands. PM> Install-Package Newtonsoft.Json Install-Package : Solution is not saved. Please save your solution before managing NuGet packages. At line:1 char:1 + Install-Package Newtonsoft.Json + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Install-Package], InvalidOperationException + FullyQualifiedErrorId : NuGetUnsavedSolution,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand PM>
פורסם במקור בפורום CODE613 ב01/04/2017 23:41 (+03:00)
-
OK
אגב, הנה הפרוייקט הראשון שלי בWPF:
הפרוייקט הראשון שלי.rar
מה דעתך?פורסם במקור בפורום CODE613 ב02/04/2017 08:40 (+03:00)
-
@מצפה לגדול
OK
אגב, הנה הפרוייקט הראשון שלי בWPF:מה דעתך?
יפה מאוד!
בא נמשיך. תוסיף את המתודה הזאת לקוד שלך (בMainWindow.xaml.cs):
void SendFileToYemotHamashiach() { PostMultipart post = new PostMultipart(); string fileLocation = @"c:\1.tts"; PostMultipart.UploadFile file = new PostMultipart.UploadFile("upload", "1.tts", () => System.IO.File.OpenRead(fileLocation)); post.Files.Add(file); post.Values.Add("token", "bla bla"); post.Values.Add("path", "bla bla"); post.Values.Add("convertAudio", "true"); byte[] bytes = post.GetResponseBytes("https://www.call2all.co.il/ym/api/UploadFile"); MessageBox.Show(System.Text.Encoding.UTF8.GetString(bytes)); }
תשנה את הערכים למה שצריך: בשורות 5, 10, 11.
תוסיף לפקודת כפתור (שלמדת לעשות לפי הדוגמה שהעלית) או למתודת האתחול שבה כתבנו מקודם, קריאה לפונקציה זו:SendFileToYemotHamashiach();
תריץ ותעדכן, ותסביר יותר מתי זה צריך לקרוא ומה גורם לשינוי שגורם לצורך בהעלאה.
פורסם במקור בפורום CODE613 ב02/04/2017 12:02 (+03:00)
-
כן תודה, זה באמת מחזיר הצלחה.
יש קובץ שם במערכת (אפשר לגשת אליו מFTP, ואפשר גם מAPI, היתרון בAPI, שזה יעזור אולי לעוד כמה אנשים)
sale_products_ok.rar
שצריך לגשת אליו, להוריד אותו, לייבא אותו לטבלה, לקחת נתונים מסויימים בשאילתא, ליצור קובץ X.TTS ולהעלות אותו בחזרה.
אני רוצה שלא יצור קובץ, אלא לשלוח איזה משתנה כקובץ.
יש לי קובץ אקסס שעושה את כל זה (מוריד, מפענח, ויוצר קובץ על המחשב להעלאה), אם תבקש, אשלח לך אותו במייל.
תודה רבה!פורסם במקור בפורום CODE613 ב02/04/2017 13:00 (+03:00)
-
-
OK.
נמשיך.
א. גם לצרכי שמירה
ב. מעניין אותי לראות איך נראית טבלה בC# (את זה אתה כבר יודע... אבל זה התחום שבעיקר מעניין אותי כרגע)אגב, הפרוייקט נתקע שנייה כשמפעילים את הפונקציה.
יש איזו פונקציה שנותנת למעבד להחליט מתי להמשיך, או שזה עובד אחרתפורסם במקור בפורום CODE613 ב02/04/2017 15:24 (+03:00)
-
@מצפה לגדול
OK.
נמשיך.מעולה רק שאינני יודע מה - לא יודע מה שלבי ההורדה והעיבוד השמירה - ביקשתי שתנחני צעד אחר צעד.
@מצפה לגדולב. מעניין אותי לראות איך נראית טבלה בC# (את זה אתה כבר יודע... אבל זה התחום שבעיקר מעניין אותי כרגע)
C# זה סביבה שלמה לומר למחשב מה לעשות. אין שמה לא טבלה ולא כלום. אקסס משלבת פורמט שמירה חכם עם מנוע שליפה ועדכון (מסד נתונים) + אפשרות להורות למחשב תסריטים (VBA). הC# ממלא לך רק את החלק השני. מסד נתונים, יש הרבה ואקסס לא רע.
@מצפה לגדול
אגב, הפרוייקט נתקע שנייה כשמפעילים את הפונקציה.
יש איזו פונקציה שנותנת למעבד להחליט מתי להמשיך, או שזה עובד אחרתאכן: בברירת מחדל זה ככה, ואם רוצים מפעילים באסינכרוני או אפי' בתהליך נפרד.
זה נושא בינתיים פחות חשוב בעיני.פורסם במקור בפורום CODE613 ב02/04/2017 16:20 (+03:00)
-
צריך להוריד קובץ (אפשר מהFTP)
פורסם במקור בפורום CODE613 ב02/04/2017 16:24 (+03:00)
-
טוב נעשה API.
להוריד את הקובץ,
(DownloadFile, הפרמטרים: token, path)
לפענח אותו.
הדוגמה של הקובץ ,
צריך ליצור טבלה (או לייבא לאקסס?)
עם כל השדות.פורסם במקור בפורום CODE613 ב02/04/2017 16:34 (+03:00)
-
אם אפשר לייבא לאקסס אוטומטי ואח"כ לשלוף משאילתא, אז כן.
לא, לא תמיד.
להוריד את הקובץ למחשב הצלחתי (עם FileStream)
איך קוראים JSON לקבל טוקן?
תודה רבה על כאב הראש!!
פורסם במקור בפורום CODE613 ב02/04/2017 17:20 (+03:00)
-
לא, איך מפענחים את מה שמתקבל?
{"responseStatus":"OK","token":"XXXXXXXXXXXXXXXX","yemotAPIVersion":6}
פורסם במקור בפורום CODE613 ב02/04/2017 17:26 (+03:00)
-
@מצפה לגדול
לא, איך מפענחים את מה שמתקבל?
{"responseStatus":"OK","token":"XXXXXXXXXXXXXXXX","yemotAPIVersion":6}
תהיה בריא אתה כל הזמן בונה על שאני יודע דברים בנבואה, זה די נמאס לי.
מאיפה שאראה את הפלט שנתת כעת? לא יכולת לומר בתשובה יש טוקן איך אני מחלץ אותו?טוב, נראה לי נמשיך אחרי פסח.
פורסם במקור בפורום CODE613 ב02/04/2017 17:32 (+03:00)
-
טוב, סליחה.
תודה רבה!פורסם במקור בפורום CODE613 ב02/04/2017 17:34 (+03:00)
-
יש לי פנאי..
תוסיף מחלקה חדשה (קליק ימני על הפרוייקט > Add... ואז class > שים שם ResponseYemot
ושים שמה בתוך הסוגריים המסולסלות של המחלקה את השורות הבאות:public int yemotAPIVersion { get; set; } public string responseStatus { get; set; } public string message { get; set; } public string token { get; set; }
תחזור לפונקציה שכתבנו להוריד את הקובץ ותשנה אותה:
א. בכותרתה במקום void תכתוב ResponseYemot (זה הופך אותה לפונקציה מסוג שמחזירה ערך שסוג הערך הוא מחלקה שזה עתה יצרת עם המאפיינים שהדבקנו).
ב. בשורה האחרונה במקום השורה של הMessageBox תדביק את השורות הבאות:string resText = System.Text.Encoding.UTF8.GetString(bytes); return Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseYemot>(resText);
כעת בקוד שקורא לפונקציה הזו (באירוע הלחיצה לכפתור או הטעינה האמורים לעיל), תשנה באופן שתקבל את הערך שחוזר לתוך משתנה:
ResponseYemot response = SendFileToYemotHamashiach(); if(response.responseStatus != "OK") { MessageBox.Show(response.responseStatus); return; } Title = response.token;
זהו עד עתה.
פורסם במקור בפורום CODE613 ב02/04/2017 20:52 (+03:00)