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

    חיפוש קובץ במערכת

    פורום מפתחים API
    9
    55
    1007
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • M
      MGM IVR @צדיק תמים נערך לאחרונה על ידי

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

      @Liy @פיסטוק-פרווה מימשתי משהו בשביל האתגר
      בעז"ה במוצ"ש נעלה לכאן

      מחכים...

      תגובה 1 תגובה אחרונה תגובה ציטוט 1
      • ש
        שואל ברצינות @Liy נערך לאחרונה על ידי

        @Liy ידוע לי של- @111 היה דבר כזה בעבר,
        ב-JS הלולאה קצת יותר מורכבת כי צריך לעבוד עם promise ורק אז להריץ את הלולאה הפנימית בכל פעם.

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

          קבלת רשימת קבצים בתקיה (או תקיות)

          const axios = require('axios');
          axios.defaults.baseURL = 'https://www.call2all.co.il/ym/api/';
          const YEMOT_NUMBER = '0773130000';
          const YEMOT_PASSWORD = '123456';
          
          /**
           * @return {String} - The token
           */
          async function getToken() {
              const response = await axios.post('Login', {
                  username: YEMOT_NUMBER,
                  password: YEMOT_PASSWORD,
              });
              return response.data.token;
          }
          
          /**
           * @param {String} token - Yemot token
           * @param {String} path - folder path
           * @return {Promise<object>} - folder data
           */
          async function getFolder(path, token) {
              let response;
              response = await axios.get('GetIVR2Dir', { params: { token, path } });
              const { data } = response;
              if (data.responseStatus !== 'OK') throw new Error('Yemot error: ' + data.message);
              return data;
          }
          
          /**
           *
           * @param {Array|String} begin - Folder(s) to start from
           * @param {Array} exclusionsWords - Words to exclude folders that contain them
           * @param {String} token - Yemot token
           * @returns
           */
          async function getLists(begin, exclusionsWords, token = `${YEMOT_NUMBER}:${YEMOT_PASSWORD}`) {
              const lists = { files: [], dirs: [], ini: [] };
              let nextFolders = Array.from(begin);
              while (nextFolders.length) {
                  const promises = nextFolders.map((path) => {
                      return getFolder(path, token);
                  });
                  const responses = await Promise.all(promises);
                  let localNextFolders = [];
                  responses.forEach((folder) => {
                      lists.files.push(...folder.files);
                      lists.dirs.push(...folder.dirs);
                      lists.ini.push(...folder.ini);
                      const exclusionsRegex = new RegExp(exclusionsWords.join('|'), 'g');
                      const nextFoldersFiltered = folder.dirs.filter((dir) => !exclusionsRegex.test(dir.name)).map((path) => path.what);
                      localNextFolders = [...localNextFolders, ...nextFoldersFiltered];
                  });
                  nextFolders = localNextFolders;
              }
              return lists;
          }
          

          דוגמה למימוש - קבלת רשימת הקבצים מתקיות: 1, 2, הדפסת כמות התקיות, כמות קבצים, וכמות קבצי ini, ובנוסף הדפסה של רשימת נתיבי הקבצים ממוינים לפי הנתיב:

          (async () => {
              const token = await getToken();
              const lists = await getLists(['1', '2'], ['Log', 'Trash'], token);
              for (const listName in lists) {
                  if (Object.hasOwnProperty.call(lists, listName)) {
                      console.log(`${listName} count: ${lists[listName].length}`);
                  }
              }
              console.log(lists.files.map((file) => file.what).sort());
          })();
          

          כמובן שניתן

          • לסרוק תקיה אחת, כולל למשל את הראשי
          • לא להחריג את תקיות לוג וסל מחזור

          לא רואה סיבה לא להשתמש בטוקן אלא במספר מערכת וסיסמה, אבל אם לא מעבירים ארגומנט טוקן לפונקציה getLists היא משתמש במספר:סיסמה.

          מימשתי את זה עם לולאה ולא עם רקורסיביה, אבל זה כמובן שולח בכל פעם את כל הבקשות במקביל, ואז שולח שוב לתתי-תקיות וכן הלאה, ולא בקשה אחת בכל פעם, וכך זה מהיר יותר, צ"ע אם בצורה של שליחת כמה שיותר בקשות בבת אחת וטיפול בכל אחת שמסתיימת, זה היה יותר מהיר משמעותית אם בכלל.

          L פ 2 תגובות תגובה אחרונה תגובה ציטוט 0
          • L
            Liy @צדיק תמים נערך לאחרונה על ידי

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

            קבלת רשימת קבצים בתקיה (או תקיות)

            const axios = require('axios');
            axios.defaults.baseURL = 'https://www.call2all.co.il/ym/api/';
            const YEMOT_NUMBER = '0773130000';
            const YEMOT_PASSWORD = '123456';
            
            /**
             * @return {String} - The token
             */
            async function getToken() {
                const response = await axios.post('Login', {
                    username: YEMOT_NUMBER,
                    password: YEMOT_PASSWORD,
                });
                return response.data.token;
            }
            
            /**
             * @param {String} token - Yemot token
             * @param {String} path - folder path
             * @return {Promise<object>} - folder data
             */
            async function getFolder(path, token) {
                let response;
                response = await axios.get('GetIVR2Dir', { params: { token, path } });
                const { data } = response;
                if (data.responseStatus !== 'OK') throw new Error('Yemot error: ' + data.message);
                return data;
            }
            
            /**
             *
             * @param {Array|String} begin - Folder(s) to start from
             * @param {Array} exclusionsWords - Words to exclude folders that contain them
             * @param {String} token - Yemot token
             * @returns
             */
            async function getLists(begin, exclusionsWords, token = `${YEMOT_NUMBER}:${YEMOT_PASSWORD}`) {
                const lists = { files: [], dirs: [], ini: [] };
                let nextFolders = Array.from(begin);
                while (nextFolders.length) {
                    const promises = nextFolders.map((path) => {
                        return getFolder(path, token);
                    });
                    const responses = await Promise.all(promises);
                    let localNextFolders = [];
                    responses.forEach((folder) => {
                        lists.files.push(...folder.files);
                        lists.dirs.push(...folder.dirs);
                        lists.ini.push(...folder.ini);
                        const exclusionsRegex = new RegExp(exclusionsWords.join('|'), 'g');
                        const nextFoldersFiltered = folder.dirs.filter((dir) => !exclusionsRegex.test(dir.name)).map((path) => path.what);
                        localNextFolders = [...localNextFolders, ...nextFoldersFiltered];
                    });
                    nextFolders = localNextFolders;
                }
                return lists;
            }
            

            דוגמה למימוש - קבלת רשימת הקבצים מתקיות: 1, 2, הדפסת כמות התקיות, כמות קבצים, וכמות קבצי ini, ובנוסף הדפסה של רשימת נתיבי הקבצים ממוינים לפי הנתיב:

            (async () => {
                const token = await getToken();
                const lists = await getLists(['1', '2'], ['Log', 'Trash'], token);
                for (const listName in lists) {
                    if (Object.hasOwnProperty.call(lists, listName)) {
                        console.log(`${listName} count: ${lists[listName].length}`);
                    }
                }
                console.log(lists.files.map((file) => file.what).sort());
            })();
            

            כמובן שניתן

            • לסרוק תקיה אחת, כולל למשל את הראשי
            • לא להחריג את תקיות לוג וסל מחזור

            לא רואה סיבה לא להשתמש בטוקן אלא במספר מערכת וסיסמה, אבל אם לא מעבירים ארגומנט טוקן לפונקציה getLists היא משתמש במספר:סיסמה.

            מימשתי את זה עם לולאה ולא עם רקורסיביה, אבל זה כמובן שולח בכל פעם את כל הבקשות במקביל, ואז שולח שוב לתתי-תקיות וכן הלאה, ולא בקשה אחת בכל פעם, וכך זה מהיר יותר, צ"ע אם בצורה של שליחת כמה שיותר בקשות בבת אחת וטיפול בכל אחת שמסתיימת, זה היה יותר מהיר משמעותית אם בכלל.

            הרעיון חמוד, במעבר מהיר על הקוד, הוא יכל להכתב קצת יותר קצת ומובן (סתם להערה כמובן).

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

              @Liy אמר בחיפוש קובץ במערכת:

              במעבר מהיר על הקוד, הוא יכל להכתב קצת יותר קצת ומובן (סתם להערה כמובן).

              פרט באר נמק
              אחרת אין למשפט הזה שום תועלת

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

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

                @Liy אמר בחיפוש קובץ במערכת:

                במעבר מהיר על הקוד, הוא יכל להכתב קצת יותר קצת ומובן (סתם להערה כמובן).

                פרט באר נמק
                אחרת אין למשפט הזה שום תועלת

                אם היה לי זמן הייתי כותב אותו מחדש להמחשה...
                אבל סתם בקצרה:

                let response;
                response = await axios.get('GetIVR2Dir', { params: { token, path } });
                

                מספיק לכתוב:

                const body = { token: token, path: "/"}
                let response = await axios.get('GetIVR2Dir', body);
                

                זה יותר נכון וברור...
                סתם דוגמא קטנה (ח״ו לא בא להוריד מהערך של מה שכתבת!).

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

                  @Liy אתה צודק חלקית,
                  לגבי זה שאין צורך להגדיר בנפרד את response אתה צודק, הסיבה היא שעשיתי בהתחלה trycatch כדי שאם יש שגיאה יתקבל רק ההודעה ולא כל אובייקט השגיאה, ואם כן צריך להגדיר את המשתנה מחוץ לסקופ כדי שיהיה אליו גישה מבחוץ, אח"כ מחקתי את זה ושחכתי לבטל את זה.
                  מה עוד?
                  אבל אתה לא צודק לגבי התחביר, אי אפשר לשלוח לאקסיוס בבקשת get פרמטר שני של הפרמטרים, אלא צריך לשלוח null ואז את האובייקט פרמטרים, כנראה אתה רגיל לשלוח בקשות פוסט...
                  דוגמה: https://runkit.com/embed/otvs4r6iat52
                  שים לב שהשגיאה היא לא שם משתמש/סיסמה שגוי, אלא שכלל לא סופק שם משתמש וסיסמה, כלומר שהפרמטרים לא נשלחים כלל
                  למעשה ככה הייתי כותב את זה

                  async function getFolder(path, token) {
                      const { data } = await axios.get('GetIVR2Dir', { params: { token, path } });
                      if (data.responseStatus !== 'OK') throw new Error('Yemot error: ' + data.message);
                      return data;
                  }
                  
                  L 2 תגובות תגובה אחרונה תגובה ציטוט 0
                  • L
                    Liy @צדיק תמים נערך לאחרונה על ידי

                    @צדיק-תמים לא שמתי לב לעוד משהו חריג..

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

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

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

                      צודק, לא שמתי לב שזה GET אני עובד בד״כ עם POST (זה הרבה יותא מאובטח עם הטוקן)

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

                        @Liy אמר בחיפוש קובץ במערכת:

                        (זה הרבה יותא מאובטח עם הטוקן)

                        אין הבדל
                        אם מישהו פותח את התעבורה הוא יכול לראות גם את הbody
                        ואם לא אין לו דרך לראות גם את הכתובת
                        ובאופן עקרוני לכך נועד HTTPS
                        מלבד זאת הקוד הזה לא נכתב כל כך עבור דפדפן אלא עבור node, וממש אין סיבה שמישהו יוכל לפענח את התעבורה של השרת שלך
                        נ.ב. המוסכמה היא באופן כללי להשתמש בGET לקבלת נתונים ולא בPOST, אמנם באופן כללי ימות לא כ"כ מקפידים על כאלה דברים, אבל איפה שזה אפשרי בקוד אני משתמש בזה. ואכן להפעלת צינתוק לדוגמה, אני ישתמש בPOST.

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

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

                          @Liy אמר בחיפוש קובץ במערכת:

                          (זה הרבה יותא מאובטח עם הטוקן)

                          אין הבדל

                          ממש לא!
                          אם מישהו יעבור על התעבורה שלך הוא יראה רשימת כתובות URL שבקרת בהם או ששלחת אליהם בקשות, ז״א שהוא יראה גם URL של ה API של ימות עם הטוקן של המערכת שלך.
                          לעומת זאת POST הוא יראה URL והוא לא יראה את ה payload.

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

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

                            מלבד זאת הקוד הזה לא נכתב כל כך עבור דפדפן אלא עבור node, וממש אין סיבה שמישהו יוכל לפענח את התעבורה של השרת שלך

                            אני עובד עם Front-End בלבד, סורי.

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

                              @Liy איך מישהו יעבור על התעבורה? 🤔

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

                                @Liy בגדול אם הלקוח (משתמש הקצה באתר) לא מקפיד על אבטחה ואפשר לעבור לו על התעבורה, זה בעיה שלו, והוא בצרה הרבה יותר גדולה מאשר טוקנים של ימות המשיח, אלא גם סיסמאות באתרים, ובעצם כל מידע שעובר מ/אל המחשב שלו
                                ובגדול בדיוק בשביל זה נועד HTTPS

                                @Liy אמר בחיפוש קובץ במערכת:

                                @צדיק-תמים לא שמתי לב לעוד משהו חריג..

                                בקיצור עשית מעכבר הר 😉

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

                                  @צדיק-תמים
                                  הקוד שלך מאלף!!
                                  אז תתקן לי את מה שטעיתי בו:

                                  <script>
                                  const axios = require('axios');
                                  axios.defaults.baseURL = 'https://www.call2all.co.il/ym/api/';
                                  const YEMOT_NUMBER = '077400300';
                                  const YEMOT_PASSWORD = '123456';
                                   
                                  /**
                                   * @return {String} - The token
                                   */
                                  async function getToken() {
                                      const response = await axios.post('Login', {
                                          username: YEMOT_NUMBER,
                                          password: YEMOT_PASSWORD,
                                      });
                                      return response.data.token;
                                  }
                                   
                                  /**
                                   * @param {String} token - Yemot token
                                   * @param {String} path - folder path
                                   * @return {Promise<object>} - folder data
                                   */
                                  async function getFolder(path, token) {
                                      let response;
                                      response = await axios.get('GetIVR2Dir', { params: { token, path } });
                                      const { data } = response;
                                      if (data.responseStatus !== 'OK') throw new Error('Yemot error: ' + data.message);
                                      return data;
                                  }
                                   
                                  /**
                                   *
                                   * @param {Array|String} begin - Folder(s) to start from
                                   * @param {Array} exclusionsWords - Words to exclude folders that contain them
                                   * @param {String} token - Yemot token
                                   * @returns
                                   */
                                  async function getLists(begin, exclusionsWords, token = `${YEMOT_NUMBER}:${YEMOT_PASSWORD}`) {
                                      const lists = { files: [], dirs: [], ini: [] };
                                      let nextFolders = Array.from(begin);
                                      while (nextFolders.length) {
                                          const promises = nextFolders.map((path) => {
                                              return getFolder(path, token);
                                          });
                                          const responses = await Promise.all(promises);
                                          let localNextFolders = [];
                                          responses.forEach((folder) => {
                                              lists.files.push(...folder.files);
                                              lists.dirs.push(...folder.dirs);
                                              lists.ini.push(...folder.ini);
                                              const exclusionsRegex = new RegExp(exclusionsWords.join('|'), 'g');
                                              const nextFoldersFiltered = folder.dirs.filter((dir) => !exclusionsRegex.test(dir.name)).map((path) => path.what);
                                              localNextFolders = [...localNextFolders, ...nextFoldersFiltered];
                                          });
                                          nextFolders = localNextFolders;
                                      }
                                      return lists;
                                  }
                                  
                                  </script>
                                  

                                  תודה רבה!!

                                  מתנצל על השאילה

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

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

                                    @Liy בגדול אם הלקוח (משתמש הקצה באתר) לא מקפיד על אבטחה ואפשר לעבור לו על התעבורה, זה בעיה שלו, והוא בצרה הרבה יותר גדולה מאשר טוקנים של ימות המשיח, אלא גם סיסמאות באתרים, ובעצם כל מידע שעובר מ/אל המחשב שלו
                                    ובגדול בדיוק בשביל זה נועד HTTPS

                                    @Liy אמר בחיפוש קובץ במערכת:

                                    @צדיק-תמים לא שמתי לב לעוד משהו חריג..

                                    בקיצור עשית מעכבר הר 😉

                                    גם יכול להיות שזה כמה אנשים באותו בניין משרדים, שלאחד מהם חשקה נפשו לעבור על התעבורה של הרשת במשרד וכו׳

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

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

                                      @nyh אין דרך לדעת מראש, הדרך לעשות זאת עם רקרוסיביה (פונקציה שקוראת לעצמה בתנאי מסוים), או עם while עם תנאי עצירה מתאים.
                                      המימוש בפועל שונה בכל שפה, וכיוון שכנראה השפה ש @פיסטוק-פרווה יודע היא רק PHP, אין לי אין לעזור עם דוגמה.

                                      כאן יש לך בphp איך לעשות רקורסיה

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

                                        @Liy שוב, במקרה שיש גישה לתעבורה, יש גישה להכל. אם לא, אין גישה גם לכתובות.
                                        @פיסטוק-פרווה לא ייבאת את הספריה axios (כנראה), ולא קראת בכלל לפונקציה...
                                        אגב הקוד הזה כנראה יפעל יותר טוב בNode.js בגלל מגבלת ה-6 בקשות לאותו אתר במקביל של כרום, שלא קיימת בנוד כמוב

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

                                          מישהו יכול לתת קוד של רקוסייה ב php / js למקרה הזה?

                                          ל צ 2 תגובות תגובה אחרונה תגובה ציטוט 0
                                          • ל
                                            לעזור לכולם מומחה @פיסטוק פרווה נערך לאחרונה על ידי לעזור לכולם

                                            @פיסטוק-פרווה
                                            https://f2.freeivr.co.il/topic/9300/חיפוש-קובץ-במערכת/33?_=1659733974315

                                            פ תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                            • פוסט ראשון
                                              פוסט אחרון