העברת - העתקת קובץ כחדש ביותר לא עובד ב tts
-
@avrham אמר בהעברת - העתקת קובץ כחדש ביותר לא עובד ב tts:
ו"לתרגם"את הקוד של @ערוץ-הסקרים לא הצלחתי...
הלוגיקה של זה מאוד פשוטה. יש API של ימות לקבלת רשימת הקבצים בתקיה. הוא מחזיר
items
שזה מערך של קבצים, שמכיל בין השאר את שם כל קובץ.
צריך לעבור עליהם, לסנן רק את הקבצים מסוג מסוים, ואז להחזיר את הקובץ הגבוה ביותר. המספר של הקובץ הזה + 1, יהיה המספר לקובץ החדש...
בNode.js (הקוד הזה בדיוק יעבוד גם בסביבת דפדפן, רק שצריך לטעון את axios) פונקציה שעושה כזה דבר תיראה ככה בערך (השתמשתי לבקשת רשת במודול axios, אבל אפשר כמובן לממש את זה גם בלי):const axios = require('axios'); axios.defaults.baseURL = 'https://www.call2all.co.il/ym/api/'; axios.defaults.params = { token: '0773137770:123456' } /** * get max file id in folder * @param {String} extension - extension of the file * @param {String} path - path of the file in yemot system * @returns {Number|Boolean} max file id. false if no files found with requested extension * */ async function getMaxFileId(extension, path) { const ymResponse = await axios.get('GetIvrTree', { params: { path } }) if (!['ok', 'OK'].includes(ymResponse.data.responseStatus)) throw new Error(ymResponse.data.message); Error(ymResponse.data.message); let filesList = ymResponse.data.items.map(item => { return item.name }) filesList = filesList.filter(item => { const regexFileName = new RegExp(`[0-9]+\.(?:${extension})$`) return regexFileName.test(item) }) if (!filesList.length) return false; filesList = filesList.map(item => { return item.replace(`.${extension}`, '') }) return Math.max(...filesList) } // get max file in 'tts' extension getMaxFileId('tts', 'ivr2:0/1').then(max => { if (!max) throw new Error('files not found in this folder') const padLength = 4; console.log('next file name:', `${String(max + 1).padStart(padLength, "0")}.tts`) })
התרגום לפייתון/כל שפת תכנות אחרת אמור להיות פשוט ביותר.
לדוגמה הפונקציה המקבילה ל()Math.max
היאmax
.
כדי לקבל את הקובץ הגבוה מכמה סיומות ביחד,
בקריאה לפונקציה (שורה 35), במקום להעביר'tts'
יש להעביר'tts|wav|mp3'
-
@avrham האמת שכבר כמה זמן רציתי לקפוץ למים של פייתון, אז... להלן סקריפט הפייתון הראשון שלי!!
ואולי יביא גם לך תועלתimport http.client import json import re # variables extension = "wav"; padLength = 4; token = "0773137770"; path = "ivr2:0/1"; conn = http.client.HTTPSConnection("www.call2all.co.il") payload = '' headers = {} conn.request("GET", f"/ym/api/GetIvrTree?token={token}&path={path}", payload, headers) res = conn.getresponse() data = res.read() data = data.decode("utf-8") data = json.loads(data) # if yemot return status error if data['responseStatus'] != 'OK' and data['responseStatus'] != 'ok': raise Exception(data['message']) items = data['items'] def getNameFile(file): return file['name'] # convert to list filesList = map(getNameFile, items) # filter only files in this extension filesList = filter(lambda filename: re.search(f'\d+\.{extension}$', filename), filesList) # if not found files in this extension if not len(items): raise Exception("No items found") # extract id only filesList = map(lambda filename: re.findall('\d+', filename)[0], filesList) maxFileId = max(filesList) nextFileId = int(maxFileId) + 1; # pad with zeros nextFileId = str(nextFileId).zfill(padLength) print(f'next file name: {nextFileId}.{extension}')
קרדיטים לידידיי הוותיקים:
- הרב גוגל שליט"א - ראש וראשון לכל דבר שבתכנות
- Github Copilot
וכן לתוכנת postman על המבנה הבסיסי של שאילתת רשת ללא כל ספריה חיצונית
כל הערה/הארה יתקבלו בשמחה!
כפונקציה:import http.client import json import re # variables extension = "wav"; padLength = 4; token = "0773137770"; path = "ivr2:0/1"; def getNextFileName(token, path, extension, padLength): conn = http.client.HTTPSConnection("www.call2all.co.il") payload = '' headers = {} conn.request( "GET", f"/ym/api/GetIvrTree?token={token}&path={path}", payload, headers) res = conn.getresponse() data = res.read() data = data.decode("utf-8") data = json.loads(data) # if yemot return status error if data['responseStatus'] != 'OK' and data['responseStatus'] != 'ok': raise Exception(data['message']) items = data['items'] def getNameFile(file): return file['name'] # convert to list filesList = map(getNameFile, items) # filter only files in this extension filesList = filter(lambda filename: re.search( f'\d+\.{extension}$', filename), filesList) # if not found files in this extension if not len(items): raise Exception("No items found") # extract id only filesList = map(lambda filename: re.findall('\d+', filename)[0], filesList) maxFileId = max(filesList) nextFileId = int(maxFileId) + 1 # pad with zeros nextFileId = str(nextFileId).zfill(padLength) return f'{nextFileId}.{extension}'; # example usage newFileName = getNextFileName(token, path, extension, padLength);
-
@צדיק-תמים
יפה לך
עלה והצלח
אגב התעניינות גרידא על איזה שרת אתה מריץ פייתון? -
@תן-חיוך-1 למה נראה לך שאני מריץ פייתון?
@צדיק-תמים אמר בהעברת - העתקת קובץ כחדש ביותר לא עובד ב tts:
להלן סקריפט הפייתון הראשון שלי
בכל מקרה אם כוונתך לשאול האם יש שרת חינמי שתומך בפייתון
אז לכאורה התשובה היא heroku -
@צדיק-תמים
תודה
רציתי לתת לייק אבל גילתי שאין לי 15 מוניטין ואיני יכול לתת לך
אז בעתיד בעז''ה -
@צדיק-תמים תודה! אלוף! אני יבדוק את זה.
הערה: מומלץ שתוסיף הערות בקוד איפה צריך לשנות, וכן הערות שמסבירים מה כל שורה עושה, זה יעזור. בפרט למתלמדים. -
@avrham אמר בהעברת - העתקת קובץ כחדש ביותר לא עובד ב tts:
הערה: מומלץ שתוסיף הערות בקוד מה כל שורה עושה, זה יעזור. בפרט למתלמדים.
זה נכון אולי בשביל ספר ללימוד תכנות. כשכותבים קוד לא נהוג לכתוב הערות שמסבירים דברים שאפשר להבין מקריאה פשוטה של הקוד...
חוץ מזה שזה ייקח מלאא זמן -
@צדיק-תמים צודק, אבל אני העברתי את הקוד לעוד כמה אנשים שחיפשו, ואחד מהם שאל אותי מה כתוב, הייתי צריך להסביר לו שעה.. בכל מקרה, ממש תודה רבה!
-
@avrham בספוילר הראיתי איך להשתמש בזה כפונקציה סגורה, שאתה יכול להשתמש בה בקלות רבה גם בלי להבין איך בדיוק היא עובדת -
newFileName = getNextFileName(token, path, extension, padLength)
שמות הארגומנטים די מסבירים את עצמם
-
@צדיק-תמים אמר בהעברת - העתקת קובץ כחדש ביותר לא עובד ב tts:
@avrham האמת שכבר כמה זמן רציתי לקפוץ למים של פייתון, אז... להלן סקריפט הפייתון הראשון שלי!!
ואולי יביא גם לך תועלתimport http.client import json import re # variables extension = "wav"; padLength = 4; token = "0773137770"; path = "ivr2:0/1"; conn = http.client.HTTPSConnection("www.call2all.co.il") payload = '' headers = {} conn.request("GET", f"/ym/api/GetIvrTree?token={token}&path={path}", payload, headers) res = conn.getresponse() data = res.read() data = data.decode("utf-8") data = json.loads(data) # if yemot return status error if data['responseStatus'] != 'OK' and data['responseStatus'] != 'ok': raise Exception(data['message']) items = data['items'] def getNameFile(file): return file['name'] # convert to list filesList = map(getNameFile, items) # filter only files in this extension filesList = filter(lambda filename: re.search(f'\d+\.{extension}$', filename), filesList) # if not found files in this extension if not len(items): raise Exception("No items found") # extract id only filesList = map(lambda filename: re.findall('\d+', filename)[0], filesList) maxFileId = max(filesList) nextFileId = int(maxFileId) + 1; # pad with zeros nextFileId = str(nextFileId).zfill(padLength) print(f'next file name: {nextFileId}.{extension}')
קרדיטים לידידיי הוותיקים:
- הרב גוגל שליט"א - ראש וראשון לכל דבר שבתכנות
- Github Copilot
וכן לתוכנת postman על המבנה הבסיסי של שאילתת רשת ללא כל ספריה חיצונית
כל הערה/הארה יתקבלו בשמחה!
כפונקציה:import http.client import json import re # variables extension = "wav"; padLength = 4; token = "0773137770"; path = "ivr2:0/1"; def getNextFileName(token, path, extension, padLength): conn = http.client.HTTPSConnection("www.call2all.co.il") payload = '' headers = {} conn.request( "GET", f"/ym/api/GetIvrTree?token={token}&path={path}", payload, headers) res = conn.getresponse() data = res.read() data = data.decode("utf-8") data = json.loads(data) # if yemot return status error if data['responseStatus'] != 'OK' and data['responseStatus'] != 'ok': raise Exception(data['message']) items = data['items'] def getNameFile(file): return file['name'] # convert to list filesList = map(getNameFile, items) # filter only files in this extension filesList = filter(lambda filename: re.search( f'\d+\.{extension}$', filename), filesList) # if not found files in this extension if not len(items): raise Exception("No items found") # extract id only filesList = map(lambda filename: re.findall('\d+', filename)[0], filesList) maxFileId = max(filesList) nextFileId = int(maxFileId) + 1 # pad with zeros nextFileId = str(nextFileId).zfill(padLength) return f'{nextFileId}.{extension}'; # example usage newFileName = getNextFileName(token, path, extension, padLength);
לא מצאתי את שלך,
אז בניתי לעצמי על בסיס מה שערוץ הסקרים כתב בפורום (אני לא מוצא את המקור, הביאו אותו פה )פעם בPHP, תירגמתי לפייתוןfrom cmath import isnan from contextlib import nullcontext import requests import json import re username = "0799" password = "1234" def get_token(username,password): url = f"https://www.call2all.co.il/ym/api/Login?username={username}&password={password}" r = requests.get(url) return json.loads(r.text)["token"] def Logout(token): url = f"https://www.call2all.co.il/ym/api/Logout?token={token}" r = requests.get(url) return True def FileNameToUpload(server, token, path): array = json.loads(requests.get(f"https://{server}.call2all.co.il/ym/api//GetIVR2Dir?token={token}&path={path}").text) #print (array["files"]) if array["responseStatus"]=="OK": for i in array["files"]: if i["fileType"] == "AUDIO" or i["fileType"] == "TTS": split = re.split ("\." ,i["name"]) isnum = split[0].isnumeric() if isnum: break try: if split[0] == None: NewFileName = "000" else : NewFileName = int(split[0]) + 1 if len(str(NewFileName)) == 1: NewFileName = "00" + str(NewFileName) elif len(str(NewFileName)) == 2: NewFileName = "0" + str(NewFileName) return NewFileName except: return "000" token = get_token(username,password) print (FileNameToUpload("www",token,"ivr2:/2")) Logout(token)