איך אוכל לקבל ב-API קובץ שמע בלי להוריד אותו?
-
יש לי צורך לבצע פעולות על קבצי שמע במערכת שלי (תמלול וכדו'),
אני רוצה לגשת לקובץ כשהוא עדיין בענן,
האם יש הגדרה "GetAudioFile" (או יותר נכון "GetAudioBlob") בדומה להגדרה "GetTextFile" של קבצי טקסט?
אין לי מה להאריך בהסבר, מי שלא הבין מה שאלתי, כנראה שאין לו תשובה...
תודה מראש!! -
@הלוי-הלוי שאתה עושה DownloadFile אתה למעשה מקבל Blob של הקובץ, כי התגובה עצמה זה הקובץ.
-
@שמואל תודה!
-
@שמואל זה לא עובד לי,
עשיתי פנייה לקובץ מסויים ואחריו .getBlob()
חזרה לי תגובה שסוג הקובץ לא נתמך (כששלחתי קישור לקובץ עם סיומת MP3 ממקום אחר באותה צורה, פעל באופן תקין),
ניסיתי גם לשלוח בלי .getBlob(), גם לא עבד.
זה הקוד שלי בגוגל סקריפט:
(UFA מבצע אצלי UrlFetchApp)function test() { var speakingInHebrewToText = WHISPWR(`https://www.call2all.co.il/ym/api/DownloadFile?token=${token}&path=ivr2:/1/2/007.wav`) SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Config').getRange('A1').setValue(speakingInHebrewToText) } function WHISPWR(audioURL) { const apiKey = SpreadsheetApp .getActiveSpreadsheet() .getSheetByName("Config") .getRange("A2") .getValue() function getFile(fileURL) { const response = UFA.fetch(fileURL); const res = response.getBlob(); return res; }; const audioBold = getFile(audioURL); const fromDate = { 'model': 'whisper-1', 'file': audioBold, language: `he`, }; const url = 'https://api.openai.com/v1/audio/transcriptions'; const options = { 'method': 'post', 'payload': fromDate, 'headers': { 'Authorization': "Bearer " + apiKey } }; const res = UFA.fetch(url, options); const date = JSON.parse(res.getContentText()); return date.text; }
-
@הלוי-הלוי
קודם תנסה לבדוק את זה עם שרת נורמלי
גוגל סקריפט הוא לא שרת... -
@שמחה-זו-הסיסמא
למעשה הצלחתי עד כה להשתמש עם גוגל סקריפט כמעט כשרת רגיל,
על רוב התקלות הצלחתי להתגבר..
למשל את הבעיה של החסימה של ימות על גוגל סקריפט
פתרתי כך:var token = PropertiesService.getScriptProperties().getProperty('token'); function getSession() { if (!token || JSON.parse(UrlFetchApp.fetch(`https://www.call2all.co.il/ym/api/GetSession?token=${token}`).getContentText()).responseStatus !== `OK`) { PropertiesService.getScriptProperties().setProperty(`token`,''); while (!PropertiesService.getScriptProperties().getProperty('token')) { var login = JSON.parse(UrlFetchApp.fetch(`https://www.call2all.co.il/ym/api/Login?username=XXXX&password=XXXXX`).getContentText()).token; if (login) { PropertiesService.getScriptProperties().setProperty(`token`, login); } } } }
מה שקורה כאן בעצם זה משתנה קבוע שמכיל את הטוקן,
פעם בחצי שעה מופעל טריגר לפונקציה getSession,
מכיוון שטוקן תקף למשך שעה מאז שנוצר או מאז שהשתמשו בו,
אני פשוט משתמש בו פעם בחצי שעה (סתם - קבלת פרטי המערכת, לא עושה עם זה כלום...)
אם התשובה היא לא OK או שלא קיים טוקן מאיזו סיבה, הוא מנסה שוב ושוב להתחבר מחדש וליצור טוקן...
וממילא בכל הסקריפט הנוכחי יש לי כל הזמן משתנה בשם token שאני משתמש בו לכל מטרה...עוד בעיה של "אין מענה משרת API" שנכתב כאן
אני פשוט מחליף את ההודעה הנ"ל בקובץ שקט,
עושה הפנייה לשלוחה אחרת בכל מקום שאני משתמש ב-API מהמערכת,
ה-API משנה בשלוחה ההיא כל פעם את ה-M0000 כך:UrlFetchApp.fetch(`https://www.call2all.co.il/ym/api/UploadTextFile?token=${token}&what=ivr2:/222/M0000.tts&contents=${contents}`);
בקיצור.... יש פתרונות להכל..
-
@הלוי-הלוי כתב באיך אוכל לקבל ב-API קובץ שמע בלי להוריד אותו?:
@שמחה-זו-הסיסמא
למעשה הצלחתי עד כה להשתמש עם גוגל סקריפט כמעט כשרת רגיל,
על רוב התקלות הצלחתי להתגבר..
למשל את הבעיה של החסימה של ימות על גוגל סקריפט
פתרתי כך:var token = PropertiesService.getScriptProperties().getProperty('token'); function getSession() { if (!token || JSON.parse(UrlFetchApp.fetch(`https://www.call2all.co.il/ym/api/GetSession?token=${token}`).getContentText()).responseStatus !== `OK`) { PropertiesService.getScriptProperties().setProperty(`token`,''); while (!PropertiesService.getScriptProperties().getProperty('token')) { var login = JSON.parse(UrlFetchApp.fetch(`https://www.call2all.co.il/ym/api/Login?username=XXXX&password=XXXXX`).getContentText()).token; if (login) { PropertiesService.getScriptProperties().setProperty(`token`, login); } } } }
מה שקורה כאן בעצם זה משתנה קבוע שמכיל את הטוקן,
פעם בחצי שעה מופעל טריגר לפונקציה getSession,
מכיוון שטוקן תקף למשך שעה מאז שנוצר או מאז שהשתמשו בו,
אני פשוט משתמש בו פעם בחצי שעה (סתם - קבלת פרטי המערכת, לא עושה עם זה כלום...)
אם התשובה היא לא OK או שלא קיים טוקן מאיזו סיבה, הוא מנסה שוב ושוב להתחבר מחדש וליצור טוקן...
וממילא בכל הסקריפט הנוכחי יש לי כל הזמן משתנה בשם token שאני משתמש בו לכל מטרה...עוד בעיה של "אין מענה משרת API" שנכתב כאן
אני פשוט מחליף את ההודעה הנ"ל בקובץ שקט,
עושה הפנייה לשלוחה אחרת בכל מקום שאני משתמש ב-API מהמערכת,
ה-API משנה בשלוחה ההיא כל פעם את ה-M0000 כך:UrlFetchApp.fetch(`https://www.call2all.co.il/ym/api/UploadTextFile?token=${token}&what=ivr2:/222/M0000.tts&contents=${contents}`);
בקיצור.... יש פתרונות להכל..
אתה רק מחזק את הטענה שלו שזה לא שרת נורמלי, תנסה במחשב שלך או בשרת נורמלי, ואז תבדוק אם זה לא תקין, או שעובד לך וזה עוד באג בגלל השימוש בגוגל שיטס
-
@שמואל כתב באיך אוכל לקבל ב-API קובץ שמע בלי להוריד אותו?:
שאתה עושה DownloadFile אתה למעשה מקבל Blob של הקובץ, כי התגובה עצמה זה הקובץ.
יש מושג של הזרמת אודיו (תגובה 206 אם אני זוכר) כמו שזה קיים בהשמעת קבצים באתר הישן.
באתר החדש זה לא עובד כך, לא ניתן לדפדף באמת באורך הרצועה רק לאחר הורדת כולה. -
@חוקר לא הבנתי,
מה זה תגובה 206?
למה תגובה?
תוכל להביא קישור?
תודה! -
@הלוי-הלוי כתב באיך אוכל לקבל ב-API קובץ שמע בלי להוריד אותו?:
@חוקר לא הבנתי,
מה זה תגובה 206?
למה תגובה?
תוכל להביא קישור?
תודה!הוא מתכוון קוד תגובה 206, כמו שהסטנדרט זה קוד 200, ו not found זה 404
-
@MGM-IVR אז איך משתמשים עם זה לקבלת הקובץ ב-Blob?
תודה