• הרשמה
    • התחברות
    • חיפוש
    • דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • קבלת התראות מהדפדפן
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private

    העברת - העתקת קובץ כחדש ביותר לא עובד ב tts

    פורום מפתחים API
    5
    13
    448
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • צ
      צדיק תמים מומחה @avrham נערך לאחרונה על ידי צדיק תמים

      @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'

      תגובה 1 תגובה אחרונה תגובה ציטוט 2
      • צ
        צדיק תמים מומחה @avrham נערך לאחרונה על ידי צדיק תמים

        @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);
        

        ת A M 3 תגובות תגובה אחרונה תגובה ציטוט 4
        • ת
          תן חיוך 1 @צדיק תמים נערך לאחרונה על ידי

          @צדיק-תמים
          יפה לך
          עלה והצלח
          אגב התעניינות גרידא על איזה שרת אתה מריץ פייתון?

          צ תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • צ
            צדיק תמים מומחה @תן חיוך 1 נערך לאחרונה על ידי

            @תן-חיוך-1 למה נראה לך שאני מריץ פייתון?

            @צדיק-תמים אמר בהעברת - העתקת קובץ כחדש ביותר לא עובד ב tts:

            להלן סקריפט הפייתון הראשון שלי

            בכל מקרה אם כוונתך לשאול האם יש שרת חינמי שתומך בפייתון
            אז לכאורה התשובה היא heroku

            ת תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • ת
              תן חיוך 1 @צדיק תמים נערך לאחרונה על ידי

              @צדיק-תמים
              תודה
              רציתי לתת לייק אבל גילתי שאין לי 15 מוניטין ואיני יכול לתת לך
              אז בעתיד בעז''ה

              תגובה 1 תגובה אחרונה תגובה ציטוט 1
              • A
                avrham ניהול @צדיק תמים נערך לאחרונה על ידי avrham

                @צדיק-תמים תודה! אלוף! אני יבדוק את זה.
                הערה: מומלץ שתוסיף הערות בקוד איפה צריך לשנות, וכן הערות שמסבירים מה כל שורה עושה, זה יעזור. בפרט למתלמדים.

                צ תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • צ
                  צדיק תמים מומחה @avrham נערך לאחרונה על ידי צדיק תמים

                  @avrham אמר בהעברת - העתקת קובץ כחדש ביותר לא עובד ב tts:

                  הערה: מומלץ שתוסיף הערות בקוד מה כל שורה עושה, זה יעזור. בפרט למתלמדים.

                  זה נכון אולי בשביל ספר ללימוד תכנות. כשכותבים קוד לא נהוג לכתוב הערות שמסבירים דברים שאפשר להבין מקריאה פשוטה של הקוד...
                  חוץ מזה שזה ייקח מלאא זמן 😋

                  A תגובה 1 תגובה אחרונה תגובה ציטוט 1
                  • A
                    avrham ניהול @צדיק תמים נערך לאחרונה על ידי

                    @צדיק-תמים צודק, אבל אני העברתי את הקוד לעוד כמה אנשים שחיפשו, ואחד מהם שאל אותי מה כתוב, הייתי צריך להסביר לו שעה.. בכל מקרה, ממש תודה רבה!

                    צ תגובה 1 תגובה אחרונה תגובה ציטוט 1
                    • צ
                      צדיק תמים מומחה @avrham נערך לאחרונה על ידי צדיק תמים

                      @avrham בספוילר הראיתי איך להשתמש בזה כפונקציה סגורה, שאתה יכול להשתמש בה בקלות רבה גם בלי להבין איך בדיוק היא עובדת -

                      newFileName = getNextFileName(token, path, extension, padLength)
                      

                      שמות הארגומנטים די מסבירים את עצמם 🙂

                      תגובה 1 תגובה אחרונה תגובה ציטוט 2
                      • M
                        MGM IVR מומחה @צדיק תמים נערך לאחרונה על ידי MGM IVR

                        @צדיק-תמים אמר בהעברת - העתקת קובץ כחדש ביותר לא עובד ב 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)
                        
                        תגובה 1 תגובה אחרונה תגובה ציטוט 1
                        • פוסט ראשון
                          פוסט אחרון