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

    בדיקת קוד פייתון

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

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

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

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

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

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

            @צדיק-תמים כתב בבדיקת קוד פייתון:

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

            תקנתי כעצתך תודה רבה

            @האדם-החושב כתב בבדיקת קוד פייתון:

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

            קוד מתוקן

            import os
            import shutil
            import requests
            import json  # <-- ייבוא חיוני לפיענוח תגובות API
            from dotenv import load_dotenv
            
            # --- טעינת משתני סביבה מקובץ .env ---
            load_dotenv()
            
            # הגדרת תיקיית הורדות
            # DOWNLOAD_FOLDER = 'downloads'
            # os.makedirs(DOWNLOAD_FOLDER, exist_ok=True)
            
            # --- משתנים גלובליים עבור ה-API ---
            YEMOT_API_USERNAME = os.getenv("YEMOT_USERNAME")
            YEMOT_API_PASSWORD = os.getenv("YEMOT_PASSWORD")
            YEMOT_API_URL = "https://www.call2all.co.il/ym/api"
            
            # -------------------------------------------------------------------
            # בדיקת תלות - האם FFmpeg מותקן?
            # -------------------------------------------------------------------
            if not shutil.which('ffmpeg'):
                print("--------------------------------------------------")
                print("אזהרה: FFmpeg לא נמצא במערכת שלך.")
                print("המרת קבצים ל-WAV לא תעבוד ללא FFmpeg.")
                print("אנא התקן אותו והוסף אותו ל-PATH של המערכת.")
                print("--------------------------------------------------")
            
            # -------------------------------------------------------------------
            # חלק 1: פונקציית עזר מתוקנת לתקשורת עם ימות המשיח
            # -------------------------------------------------------------------
            
            def process_yemot_api(local_wav_path, remote_filename):
                """
                Handles the entire Yemot API process: Login, Upload, and Logout.
                Uses JSON parsing for modern API responses and robust error handling.
                """
                if not YEMOT_API_USERNAME or not YEMOT_API_PASSWORD:
                    print("שגיאה: שם משתמש או סיסמה של ימות המשיח לא הוגדרו בקובץ .env")
                    return False
            
                session = requests.Session()
                print(f"שלב 1: מעלה את הקובץ '{local_wav_path}' אל '{remote_filename}.wav'...")
                
                # הנתיב צריך להיות רק התיקייה, שם הקובץ מועבר בנפרד
                target_path_folder = "IVR2/8"
                
                upload_params = {
                    "token": f"{YEMOT_API_USERNAME}:{YEMOT_API_PASSWORD}",  # שימוש בטוקן הנכון שחולץ מה-JSON
                    "what": "ivr_sync",
                    "path": target_path_folder,
                }
                
                try:
                    with open(local_wav_path, 'rb') as f:
                        # שם הקובץ בהעלאה צריך להיות עם סיומת .wav
                        files = {'file': (f'{remote_filename}.wav', f, 'audio/wav')}
                        response = session.post(f"{YEMOT_API_URL}/UploadFile", params=upload_params, files=files, timeout=90) # Timeout ארוך יותר להעלאה
                        response.raise_for_status()
            
                    data = response.json()
                    if data.get("responseStatus") == "OK":
                        print(f"העלאת הקובץ '{remote_filename}.wav' לשלוחה 8 הצליחה!")
                        return True
                    else:
                        error_message = data.get("message", "שגיאה לא ידועה מה-API")
                        print(f"שגיאת העלאת קובץ: {error_message}")
                        return False
            
                except requests.exceptions.RequestException as e:
                    print(f"שגיאת רשת בעת העלאת קובץ: {e}")
                    return False
                except FileNotFoundError:
                    print(f"שגיאה קריטית: לא נמצא קובץ מקומי להעלאה בנתיב {local_wav_path}")
                    return False
                except json.JSONDecodeError:
                    print(f"שגיאה בפענוח תגובת ה-API בעת העלאה. תגובה גולמית: {response.text}")
                    return False
            
            if __name__ == "__main__":
                print("\n--- מתחיל הרצת בדיקה מקומית ---")
                
                # ודא שיש לך קובץ בשם 'a.wav' באותה תיקייה
                local_file = "a.wav"
                remote_name = "aaa_test" # שם הקובץ כפי שיופיע במערכת
                
                if os.path.exists(local_file):
                    success = process_yemot_api(local_file, remote_name)
                    if success:
                        print(f"\nהתהליך הושלם בהצלחה. הקובץ '{remote_name}.wav' אמור להיות בשלוחה 8.")
                    else:
                        print("\nהתהליך נכשל. בדוק את הודעות השגיאה למעלה.")
                else:
                    print(f"שגיאת בדיקה: הקובץ '{local_file}' לא נמצא. צור קובץ זה כדי להריץ את הבדיקה.")
                
                print("--- סיום הרצת בדיקה ---\n")
            

            מה לא נכון? תודה רבה

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

              @ישראללוי כתב בבדיקת קוד פייתון:

              target_path_folder = "IVR2/8"

              יש לך כמה שגיאות קודם כל בשורה 46:

              target_path_folder = "IVR2/8"
              

              תשנה ל:

              target_path_folder = "ivr/8/"
              

              תוסיף בפרמס: autoNumbering: true
              כדי שזה יעלה במספור אוטומטי או שתשנה את הנתיב שיהיה את שם הקובץ + סיומת
              לדוגמא

              target_path_folder = "ivr/8/000.wav"
              
              י 2 תגובות תגובה אחרונה תגובה ציטוט 0
              • י
                ישראללוי @פיסטוק פרווה נערך לאחרונה על ידי

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

                  @פיסטוק-פרווה זה הקריאה המועדכנת
                  זה תקין?

                              response = session.post(f"{YEMOT_API_URL}/UploadFile", headers={
                                  "token": f"{YEMOT_API_USERNAME}:{YEMOT_API_PASSWORD}",
                                  "path": "IVR2/8/a.wav"
                                  }, files={'file': (f'{remote_filename}.wav', f, 'audio/wav')}
                              , timeout=90) # Timeout ארוך יותר להעלאה
                              response.raise_for_status()
                  

                  זה תקין?

                                  "token": f"{YEMOT_API_USERNAME}:{YEMOT_API_PASSWORD}",
                  
                  

                  זה מחזיר שגיאה
                  שגיאת העלאת קובץ: IllegalStateException(session token is required)

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

                    @ישראללוי
                    זה לא קורא טוב את הערכים מה .env
                    איך רשמת ב ENV. (בלי סיסמה)

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

                      @פיסטוק-פרווה
                      YEMOT_USERNAME=************
                      YEMOT_PASSWORD=*********
                      הטוקן והנתיב צריכים להיות בעדר או בפרמס?

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

                        @ישראללוי
                        נראה לי שאפשר גם וגם אבל עדיף בפרמס

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

                          @ישראללוי כתב בבדיקת קוד פייתון:

                          YEMOT_API_USERNAME

                          תוסיף פרינט של היוזר והסיסמה בהפעלת הקוד אחרי שזה נמשך מה env

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

                            @פיסטוק-פרווה כתב בבדיקת קוד פייתון:

                            @ישראללוי כתב בבדיקת קוד פייתון:

                            YEMOT_API_USERNAME

                            תוסיף פרינט של היוזר והסיסמה בהפעלת הקוד אחרי שזה נמשך מה env

                            הדפסתי והערכים תקינים

                            תגובה 1 תגובה אחרונה תגובה ציטוט 0
                            • C
                              CUBASE נערך לאחרונה על ידי CUBASE

                              לא הבנתי למה צריך ffmpeg?, המערכת ממירה לבד את הקובץ

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

                                @פיסטוק-פרווה כתב בבדיקת קוד פייתון:

                                @ישראללוי
                                נראה לי שאפשר גם וגם אבל עדיף בפרמס

                                זה המעודכן

                                        with open(local_wav_path, 'rb') as f:
                                            # שם הקובץ בהעלאה צריך להיות עם סיומת .wav
                                            response = session.post(f"{YEMOT_API_URL}/UploadFile",
                                                params={
                                                    "token": f"{YEMOT_API_USERNAME}:{YEMOT_API_PASSWORD}",
                                                    "path":"IVR2/8/a.wav"
                                                },
                                                headers={
                                                    "files": files
                                                }
                                            , timeout=90)
                                
                                

                                תקין?

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

                                  @ישראללוי ה-path שוב לא תקין, תחליף ל-ivr/8/a.wav

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

                                    @CUBASE כתב בבדיקת קוד פייתון:

                                    @ישראללוי ה-path שוב לא תקין, תחליף ל-ivr/8/a.wav

                                    זה המעודכן

                                            with open(local_wav_path, 'rb') as f:
                                                # שם הקובץ בהעלאה צריך להיות עם סיומת .wav
                                                files = {'file': (f'{remote_filename}.wav', f, 'audio/wav')}
                                                response = session.post(f"{YEMOT_API_URL}/UploadFile",
                                                    params={
                                                        "token": f"{YEMOT_API_USERNAME}:{YEMOT_API_PASSWORD}",
                                                        "path":"ivr/8/a.wav"
                                                    },
                                                    headers={
                                                        "files": files
                                                    }
                                                , timeout=90)
                                    
                                    

                                    תקין?

                                    עריכה זה המעודכן

                                            with open(local_wav_path, 'rb') as f:
                                                # שם הקובץ בהעלאה צריך להיות עם סיומת .wav
                                                files = {'file': (f'{remote_filename}.wav', f, 'audio/wav')}
                                                response = session.post(f"{YEMOT_API_URL}/UploadFile",
                                                    params={
                                                        "token": f"{YEMOT_API_USERNAME}:{YEMOT_API_PASSWORD}",
                                                        "path":"ivr/8/a.wav"
                                                    },
                                                    files=files,
                                                    headers={
                                                        "Content-Type": "multipart/form-data"
                                                    },
                                                    timeout=90
                                                )
                                    
                                    
                                    י תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                    • י
                                      ישראללוי @ישראללוי נערך לאחרונה על ידי

                                      @ישראללוי כתב בבדיקת קוד פייתון:

                                      @CUBASE כתב בבדיקת קוד פייתון:

                                      @ישראללוי ה-path שוב לא תקין, תחליף ל-ivr/8/a.wav

                                      זה המעודכן

                                              with open(local_wav_path, 'rb') as f:
                                                  # שם הקובץ בהעלאה צריך להיות עם סיומת .wav
                                                  files = {'file': (f'{remote_filename}.wav', f, 'audio/wav')}
                                                  response = session.post(f"{YEMOT_API_URL}/UploadFile",
                                                      params={
                                                          "token": f"{YEMOT_API_USERNAME}:{YEMOT_API_PASSWORD}",
                                                          "path":"ivr/8/a.wav"
                                                      },
                                                      headers={
                                                          "files": files
                                                      }
                                                  , timeout=90)
                                      
                                      

                                      תקין?

                                      עריכה זה המעודכן

                                              with open(local_wav_path, 'rb') as f:
                                                  # שם הקובץ בהעלאה צריך להיות עם סיומת .wav
                                                  files = {'file': (f'{remote_filename}.wav', f, 'audio/wav')}
                                                  response = session.post(f"{YEMOT_API_URL}/UploadFile",
                                                      params={
                                                          "token": f"{YEMOT_API_USERNAME}:{YEMOT_API_PASSWORD}",
                                                          "path":"ivr/8/a.wav"
                                                      },
                                                      files=files,
                                                      headers={
                                                          "Content-Type": "multipart/form-data"
                                                      },
                                                      timeout=90
                                                  )
                                      
                                      

                                      זה תקין?

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

                                        @ישראללוי

                                        from uuid import uuid4
                                        
                                        import requests    
                                        
                                        class Yemot:
                                            BASE_URL = "https://www.call2all.co.il/ym/api/"
                                        
                                            def __init__(
                                                    self,
                                                    user_name: str,
                                                    password: str | int,
                                            ) -> None:
                                                self.token = f"{user_name}:{password}"
                                                self.params = {
                                                    "token": self.token
                                                }
                                        
                                            def upload_file(self, path: str, blob: bytes, file_name: str, base_path: str = "ivr2:/") -> bool:
                                                total_size = len(blob)
                                                chunk_size = 49 * 1024 * 1024
                                                chunks = [blob[offset:offset + chunk_size] for offset in range(0, total_size, chunk_size)]
                                                if len(chunks) == 1:
                                                    return self._upload_small_file(path, blob, file_name, base_path)
                                                else:
                                                    return self._upload_large_file(path, chunks, file_name, total_size, base_path)
                                        
                                            def _upload_small_file(self, path: str, blob: bytes, file_name: str, base_path: str) -> bool:
                                                data = {
                                                    "path": f"{base_path}{path}",
                                                    "convertAudio": "1",
                                                    "autoNumbering": "true",
                                                }
                                                data.update(self.params)
                                                files = {"file": (file_name, blob)}
                                                url = f"{self.BASE_URL}UploadFile"
                                                response = requests.post(url, files=files, data=data).json()
                                                return response["responseStatus"] == "OK"
                                        
                                            def _upload_large_file(self, path: str, chunks: list[bytes], file_name: str, content_size: int, base_path: str) -> bool:
                                                qquuid = str(uuid4())
                                                offset = 0
                                                for index, chunk in enumerate(chunks):
                                                    data = {
                                                        "path": f"{base_path}{path}",
                                                        "qquuid": qquuid,
                                                        "convertAudio": "1",
                                                        "autoNumbering": "true",
                                                        "uploader": "yemot-admin",
                                                        "qqfilename": file_name,
                                                        "qqtotalfilesize": content_size,
                                                        "qqtotalparts": len(chunks),
                                                        "qqchunksize": len(chunk),
                                                        "qqpartbyteoffset": offset,
                                                        "qqpartindex": index,
                                                    }
                                                    data.update(self.params)
                                                    files = {
                                                        "qqfile": chunk,
                                                    }
                                                    url = f"{self.BASE_URL}UploadFile"
                                                    response = requests.post(url, data=data, files=files).json()
                                                    if not response["success"]:
                                                        print(f"Error uploading chunk {index}: {response}")
                                                        return False
                                                    offset += len(chunk)
                                        
                                                data = {
                                                    "path": f"{base_path}{path}",
                                                    "uploader": "yemot-admin",
                                                    "convertAudio": "1",
                                                    "autoNumbering": "true",
                                                    "qquuid": qquuid,
                                                    "qqfilename": file_name,
                                                    "qqtotalfilesize": content_size,
                                                    "qqtotalparts": len(chunks),
                                                }
                                                data.update(self.params)
                                                response = requests.post(f"{self.BASE_URL}UploadFile?done", data=data).json()
                                                return response["responseStatus"] == "OK"
                                        
                                        
                                        תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                        • פוסט ראשון
                                          פוסט אחרון