בקשה לעזרה בקוד פייתון לפעולה במערכת
-
מישהו מוכן לעשות לי טובה ולעבור על קוד בפייתון לא ארוך מידי שבניתי עם AI, הוא נתקע באיזשהו חלק.
אשמח שמי שמוכן יכתוב פה איך לפנות אליו או שאני יכתוב את המייל שליתודה רבה רבה!!
נ.ב. זה לצורך מצוה
עריכה:
הבאתי את הקוד המלא בהמשך השרשור -
למה למישהו להתחייב אליך לענות לך?
תעלה את הקוד כאן / גיטהאב / לינק לGPT שכתב לך את זה, ותשאל -
@MGM-IVR צודק, רק אם אני יעלה את זה לפה, אני יצטרך קודם למחוק את כל המספרים וכו',
אם יש מישהו שמוכן שאני ישלח לו באופן פרטי, וכמובן הוא לא צריך להתחייב, עדיף. אם לא, כנראה שכך אעשה...עכ"פ אני יכתוב מה אמור לעשות הקוד ואולי כך זה יתן קצת כיוון,
הקוד לוקח את המספרים מרשימת תפוצה מסויימת, מוריד לכל מספר את הדוח שלו מתוך מודל שעון נוכחות, בודק מה השורות שמהיום הנוכחי ומסכם את הזמן מהיום הנוכחי, ומעלה קובץ TTS לשלוחה ייעודית "סך השעות ליום... תאריך (עברי) וכו'"
נראה שהוא בעיקר מסתבך עם הכנת הקובץ (הוא מעלה קובץ TTS ריק לשלוחה)
בעיה נוספת, שהוא גם צריך לפתוח שלוחה במקרה של שגיאה שאין שלוחה כזו ולנסות שוב להעלות את הקובץ, לגבי זזה הבינה טוען שיש בעיה שהוא מקבל שגיאה מהשרת ואף על פי כן מתייחס כאילו זה הצליח.תודה רבה!!
-
@צבי-ד-צ כתב במישהו מוכן לעבור על קוד בפייתון?:
@MGM-IVR צודק, רק אם אני יעלה את זה לפה, אני יצטרך קודם למחוק את כל המספרים וכו',
אם יש מישהו שמוכן שאני ישלח לו באופן פרטי, וכמובן הוא לא צריך להתחייב, עדיף. אם לא, כנראה שכך אעשה...עכ"פ אני יכתוב מה אמור לעשות הקוד ואולי כך זה יתן קצת כיוון,
הקוד לוקח את המספרים מרששימת תפוצה מסויימת, מוריד לכל מספר את הדוח שלו מתוך מודל שעון נוכחות, בודק מה השורות שמהיום הנוכחי ומסכם את הזמן מהיום הנוכחי, ומעלה קובץ TTS לשלוחה ייעודית "סך השעות ליום... תאריך (עברי) וכו'"
נראה שהוא בעיקר מסתבך עם הכנת הקובץ (הוא מעלה קובץ TTS ריק לשלוחה)תודה רבה!!
אם הוא כותב לך בטרמינל את הכל, רק לא מעלה את הTTS, זה בעיה אחרת.. אם הוא לא יודע לפלטר בכלל זה בעיה אחרת..
בכל מקרה, אין דרך רשמית מימות המשיח להציג את השעון נוכחות היומי? -
@MGM-IVR הוא כנראה רק לא מכין את הקובץ, כי הוא מעלה קובץ ריק מצויין, את הפילטר אני לא צריך שהוא יעשה.
אגב נזכרתי עוד בעיה, שהוא גם צריך לפתוח שלוחה במקרה של שגיאה שאין שלוחה כזו ולנסות שוב להעלות את הקובץ, לגבי זזה הבינה טוען שיש בעיה שהוא מקבל שגיאה מהשרת ואף על פי כן מתייחס כאילו זה הצליח. מחילה על התוספת, אערוך למעלה.@MGM-IVR כתב במישהו מוכן לעבור על קוד בפייתון?:
אין דרך רשמית מימות המשיח להציג את השעון נוכחות היומי?
עד כמה שידוע לי, וניסיתי לבדוק, לא.
תודה רבה!!
-
@MGM-IVR הנה הקוד המלא (אם תראה שם פרטים שצריך להסתיר ולא הסתרתי תגיד לי), כמו שכתבתי הקוד לוקח את המספרים מרשימת תפוצה מסויימת, מוריד לכל מספר את הדוח שלו מתוך מודל שעון נוכחות, בודק מה השורות שמהיום הנוכחי ומסכם את הזמן מהיום הנוכחי, ומעלה קובץ TTS לשלוחה ייעודית "סך השעות ליום... תאריך (עברי) וכו'" לכל מספר את הדוח שלו
נראה שהוא בעיקר מסתבך עם הכנת הקובץ (הוא מעלה קובץ TTS ריק לשלוחה)
בעיה נוספת, שהוא גם צריך לפתוח שלוחה במקרה של שגיאה שאין שלוחה כזו ולנסות שוב להעלות את הקובץ, לגבי זה הבינה טוען שיש בעיה שהוא מקבל שגיאה מהשרת ואף על פי כן מתייחס כאילו זה הצליחimport requests import csv import io import logging import sys import os import traceback from datetime import datetime, timedelta from typing import List, Dict, Tuple # הגדרת לוגינג log_dir = os.path.join(os.path.dirname(__file__), 'logs') os.makedirs(log_dir, exist_ok=True) log_file = os.path.join(log_dir, 'time_utilization.log') logging.basicConfig( level=logging.DEBUG, # שינוי לרמת דיבאג מלאה format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler(log_file, encoding='utf-8', mode='w'), # מחיקת קובץ לוג קודם logging.StreamHandler(sys.stdout) ] ) # קבועים TOKEN = "079607777:123456" BASE_URL = "https://www.call2all.co.il/ym/api" def convert_hours_to_hebrew_format(total_hours: float) -> str: """המרת שעות לפורמט של שעות ודקות בעברית""" hours = int(total_hours) minutes = int((total_hours - hours) * 60) return f"{hours} שעות ו{minutes} דקות" def get_hebrew_day_name(date: datetime) -> str: """החזרת שם יום בעברית""" hebrew_days = { 0: "ראשון", 1: "שני", 2: "שלישי", 3: "רביעי", 4: "חמישי", 5: "שישי", 6: "שבת" } return hebrew_days[date.weekday()] def get_template_entries() -> List[str]: """קבלת רשימת מספרי פלאפון של לומדים""" url = f"{BASE_URL}/GetTemplateEntries" params = {"token": TOKEN, "templateId": 153193} try: logging.debug(f"שולח בקשה לקבלת רשימת לומדים: {url}") logging.debug(f"פרמטרים: {params}") response = requests.get(url, params=params, timeout=10) response.raise_for_status() logging.debug(f"תגובת השרת: {response.text}") data = response.json() if data["responseStatus"] != "OK": logging.error(f"שגיאה בקבלת רשימת לומדים: {data}") return [] phones = [entry["phone"] for entry in data.get("entries", []) if not entry.get("blocked", False)] logging.info(f"נמצאו {len(phones)} מספרי פלאפון") return phones except requests.exceptions.RequestException as e: logging.error(f"שגיאת רשת בקבלת רשימת לומדים: {e}") logging.error(traceback.format_exc()) return [] def download_ymgr_file(phone: str) -> bytes: """הורדת קובץ YMGR עבור מספר פלאפון""" url = f"{BASE_URL}/RenderYMGRFile" params = { "token": TOKEN, "wath": f"ivr2:/4/PrivateReports/TimeKeeperTotal.{phone}.ymgr", "convertType": "csv", "notLoadLang": 0 } try: logging.debug(f"שולח בקשה להורדת קובץ YMGR עבור {phone}: {url}") logging.debug(f"פרמטרים: {params}") response = requests.get(url, params=params, timeout=10) response.raise_for_status() logging.debug(f"גודל קובץ שהתקבל: {len(response.content)} בתים") with open(os.path.join(log_dir, f'{phone}_ymgr.csv'), 'wb') as f: f.write(response.content) logging.info(f"הורדת קובץ YMGR עבור {phone} בוצעה בהצלחה") return response.content except requests.exceptions.RequestException as e: logging.error(f"שגיאה בהורדת קובץ YMGR עבור {phone}: {e}") logging.error(traceback.format_exc()) raise def process_csv_data(csv_content: bytes, today: datetime) -> float: """עיבוד נתוני CSV והחזרת סך השעות עבור היום הנוכחי""" try: logging.debug("מתחיל לעבד קובץ CSV") csv_text = csv_content.decode('utf-8-sig') with open(os.path.join(log_dir, 'debug_csv.csv'), 'w', encoding='utf-8') as f: f.write(csv_text) reader = csv.DictReader(io.StringIO(csv_text)) total_hours = 0.0 for row in reader: logging.debug(f"עיבוד שורה: {row}") # בדיקת תאריך בעמודה I entry_date_str = row['תאריך כניסה'] entry_date = datetime.strptime(entry_date_str, '%d/%m/%Y') # בדיקה אם התאריך תואם את היום הנוכחי if entry_date.date() == today.date(): # המרת סך השעות מעמודה M hours_str = row['סך הזמן במשמרת'] # פיצול השעות לשעות ודקות time_parts = hours_str.split(':') if len(time_parts) == 3: hours, minutes, _ = map(int, time_parts) elif len(time_parts) == 2: hours, minutes = map(int, time_parts) else: logging.warning(f"פורמט זמן לא תקין: {hours_str}") continue total_hours += hours + (minutes / 60) logging.info(f"סך השעות שחושבו: {total_hours} שעות") return total_hours except Exception as e: logging.error(f"שגיאה בעיבוד נתוני CSV: {e}") logging.error(traceback.format_exc()) return 0.0 def create_tts_file(total_hours: float, today: datetime) -> str: """יצירת קובץ TTS עם סיכום השעות""" try: hebrew_day = get_hebrew_day_name(today) hebrew_date = today.strftime("כ %d %B תשפ״ה") hours_text = convert_hours_to_hebrew_format(total_hours) tts_content = f"סך השעות ליום {hebrew_day} {hebrew_date}: {hours_text}" logging.info(f"נוצר קובץ TTS: {tts_content}") return tts_content except Exception as e: logging.error(f"שגיאה ביצירת קובץ TTS: {e}") logging.error(traceback.format_exc()) return "" def upload_tts_file(phone: str, tts_content: str): """העלאת קובץ TTS לשרת""" url = f"{BASE_URL}/UploadFile" params = { "token": TOKEN, "path": f"ivr2:5/{phone}", "convertAudio": 0, "autoNumbering": "true", "tts": 1 } try: logging.debug(f"שולח בקשה להעלאת קובץ TTS עבור {phone}: {url}") logging.debug(f"פרמטרים: {params}") logging.debug(f"תוכן TTS: {tts_content}") response = requests.post(url, params=params, data={"file": tts_content}, timeout=10) response.raise_for_status() logging.debug(f"תגובת השרת בהעלאת TTS: {response.text}") logging.info(f"העלאת קובץ TTS עבור {phone} בוצעה בהצלחה") return response except requests.exceptions.RequestException as e: logging.error(f"שגיאה בהעלאת קובץ TTS עבור {phone}: {e}") logging.error(traceback.format_exc()) raise def update_extension(phone: str): """עדכון הרחבה במקרה של שגיאה""" url = f"{BASE_URL}/UpdateExtension" params = { "token": TOKEN, "path": f"ivr2:5/{phone[:6]}", "type": "playfile", "playfile_end_goto": "/0000/999" } try: logging.debug(f"שולח בקשה לעדכון הרחבה עבור {phone}: {url}") logging.debug(f"פרמטרים: {params}") response = requests.get(url, params=params, timeout=10) response.raise_for_status() logging.debug(f"תגובת השרת בעדכון הרחבה: {response.text}") logging.info(f"עדכון הרחבה עבור {phone} בוצע בהצלחה") return response except requests.exceptions.RequestException as e: logging.error(f"שגיאה בעדכון הרחבה עבור {phone}: {e}") logging.error(traceback.format_exc()) raise def main(): logging.info("התחלת הרצת סקריפט ניצול זמן") today = datetime.now() logging.debug(f"תאריך נוכחי: {today}") try: phones = get_template_entries() if not phones: logging.warning("לא נמצאו מספרי פלאפון") return for phone in phones: try: # הורדת קובץ YMGR ymgr_content = download_ymgr_file(phone) # חישוב סך השעות total_hours = process_csv_data(ymgr_content, today) # אם אין שעות ביום הנוכחי, דלג על הלומד הזה if total_hours == 0: logging.info(f"אין שעות ביום הנוכחי עבור {phone}") continue # יצירת קובץ TTS tts_content = create_tts_file(total_hours, today) if not tts_content: logging.warning(f"לא ניתן ליצור קובץ TTS עבור {phone}") continue # העלאת קובץ TTS upload_tts_file(phone, tts_content) except Exception as phone_error: logging.error(f"שגיאה בטיפול בטלפון {phone}: {phone_error}") logging.error(traceback.format_exc()) # במקרה של שגיאה בהעלאה, נסה לעדכן את ההרחבה ואז העלה שוב try: update_extension(phone) upload_tts_file(phone, tts_content) except Exception as retry_error: logging.error(f"שגיאה בניסיון חוזר עבור {phone}: {retry_error}") logging.error(traceback.format_exc()) except Exception as e: logging.error(f"שגיאה כללית: {e}") logging.error(traceback.format_exc()) logging.info("סיום הרצת סקריפט ניצול זמן") if __name__ == "__main__": main()
-
def upload_tts_file(phone: str, tts_content: str): """העלאת קובץ TTS לשרת""" url = f"{BASE_URL}/UploadTextFile" params = { "token": TOKEN, "what": f"ivr2:5/{phone}.tts", "contents": tts_content } try: logging.debug(f"שולח בקשה להעלאת קובץ TTS עבור {phone}: {url}") logging.debug(f"פרמטרים: {params}") logging.debug(f"תוכן TTS: {tts_content}") response = requests.get(url, params=params) response.raise_for_status() logging.debug(f"תגובת השרת בהעלאת TTS: {response.text}") logging.info(f"העלאת קובץ TTS עבור {phone} בוצעה בהצלחה") return response except requests.exceptions.RequestException as e: logging.error(f"שגיאה בהעלאת קובץ TTS עבור {phone}: {e}") logging.error(traceback.format_exc()) raise
-
@האדם-החושב מתנצל, אני לא כל כך מבין בזה, תוכל להסביר לי את כוונתך? שם יש טעות? להדביק את זה במקום אותם שורות בקוד ששהבאתי?
אם תוכל לומר לי בדיוק מה לשנות.
כרגע, לאחר שניסיתי לשנות את השורות שהבאת, כך נראה הקוד המלאimport requests import csv import io import logging import sys import os import traceback from datetime import datetime, timedelta from typing import List, Dict, Tuple # הגדרת לוגינג log_dir = os.path.join(os.path.dirname(__file__), 'logs') os.makedirs(log_dir, exist_ok=True) log_file = os.path.join(log_dir, 'time_utilization.log') logging.basicConfig( level=logging.DEBUG, # שינוי לרמת דיבאג מלאה format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler(log_file, encoding='utf-8', mode='w'), # מחיקת קובץ לוג קודם logging.StreamHandler(sys.stdout) ] ) # קבועים TOKEN = "079607777:123456" BASE_URL = "https://www.call2all.co.il/ym/api" def convert_hours_to_hebrew_format(total_hours: float) -> str: """המרת שעות לפורמט של שעות ודקות בעברית""" hours = int(total_hours) minutes = int((total_hours - hours) * 60) return f"{hours} שעות ו{minutes} דקות" def get_hebrew_day_name(date: datetime) -> str: """החזרת שם יום בעברית""" hebrew_days = { 0: "ראשון", 1: "שני", 2: "שלישי", 3: "רביעי", 4: "חמישי", 5: "שישי", 6: "שבת" } return hebrew_days[date.weekday()] def get_template_entries() -> List[str]: """קבלת רשימת מספרי פלאפון של לומדים""" url = f"{BASE_URL}/GetTemplateEntries" params = {"token": TOKEN, "templateId": 153193} try: logging.debug(f"שולח בקשה לקבלת רשימת לומדים: {url}") logging.debug(f"פרמטרים: {params}") response = requests.get(url, params=params, timeout=10) response.raise_for_status() logging.debug(f"תגובת השרת: {response.text}") data = response.json() if data["responseStatus"] != "OK": logging.error(f"שגיאה בקבלת רשימת לומדים: {data}") return [] phones = [entry["phone"] for entry in data.get("entries", []) if not entry.get("blocked", False)] logging.info(f"נמצאו {len(phones)} מספרי פלאפון") return phones except requests.exceptions.RequestException as e: logging.error(f"שגיאת רשת בקבלת רשימת לומדים: {e}") logging.error(traceback.format_exc()) return [] def download_ymgr_file(phone: str) -> bytes: """הורדת קובץ YMGR עבור מספר פלאפון""" url = f"{BASE_URL}/RenderYMGRFile" params = { "token": TOKEN, "wath": f"ivr2:/4/PrivateReports/TimeKeeperTotal.{phone}.ymgr", "convertType": "csv", "notLoadLang": 0 } try: logging.debug(f"שולח בקשה להורדת קובץ YMGR עבור {phone}: {url}") logging.debug(f"פרמטרים: {params}") response = requests.get(url, params=params, timeout=10) response.raise_for_status() logging.debug(f"גודל קובץ שהתקבל: {len(response.content)} בתים") with open(os.path.join(log_dir, f'{phone}_ymgr.csv'), 'wb') as f: f.write(response.content) logging.info(f"הורדת קובץ YMGR עבור {phone} בוצעה בהצלחה") return response.content except requests.exceptions.RequestException as e: logging.error(f"שגיאה בהורדת קובץ YMGR עבור {phone}: {e}") logging.error(traceback.format_exc()) raise def process_csv_data(csv_content: bytes, today: datetime) -> float: """עיבוד נתוני CSV והחזרת סך השעות עבור היום הנוכחי""" try: logging.debug("מתחיל לעבד קובץ CSV") csv_text = csv_content.decode('utf-8-sig') with open(os.path.join(log_dir, 'debug_csv.csv'), 'w', encoding='utf-8') as f: f.write(csv_text) reader = csv.DictReader(io.StringIO(csv_text)) total_hours = 0.0 for row in reader: logging.debug(f"עיבוד שורה: {row}") # בדיקת תאריך בעמודה I entry_date_str = row['תאריך כניסה'] entry_date = datetime.strptime(entry_date_str, '%d/%m/%Y') # בדיקה אם התאריך תואם את היום הנוכחי if entry_date.date() == today.date(): # המרת סך השעות מעמודה M hours_str = row['סך הזמן במשמרת'] # פיצול השעות לשעות ודקות time_parts = hours_str.split(':') if len(time_parts) == 3: hours, minutes, _ = map(int, time_parts) elif len(time_parts) == 2: hours, minutes = map(int, time_parts) else: logging.warning(f"פורמט זמן לא תקין: {hours_str}") continue total_hours += hours + (minutes / 60) logging.info(f"סך השעות שחושבו: {total_hours} שעות") return total_hours except Exception as e: logging.error(f"שגיאה בעיבוד נתוני CSV: {e}") logging.error(traceback.format_exc()) return 0.0 def create_tts_file(total_hours: float, today: datetime) -> str: """יצירת קובץ TTS עם סיכום השעות""" try: hebrew_day = get_hebrew_day_name(today) hebrew_date = today.strftime("כ %d %B תשפ״ה") hours_text = convert_hours_to_hebrew_format(total_hours) tts_content = f"סך השעות ליום {hebrew_day} {hebrew_date}: {hours_text}" logging.info(f"נוצר קובץ TTS: {tts_content}") return tts_content except Exception as e: logging.error(f"שגיאה ביצירת קובץ TTS: {e}") logging.error(traceback.format_exc()) return "" def upload_tts_file(phone: str, tts_content: str): """העלאת קובץ TTS לשרת""" url = f"{BASE_URL}/UploadTextFile" params = { "token": TOKEN, "what": f"ivr2:5/{phone}.tts", "contents": tts_content } try: logging.debug(f"שולח בקשה להעלאת קובץ TTS עבור {phone}: {url}") logging.debug(f"פרמטרים: {params}") logging.debug(f"תוכן TTS: {tts_content}") response = requests.get(url, params=params) response.raise_for_status() logging.debug(f"תגובת השרת בהעלאת TTS: {response.text}") logging.info(f"העלאת קובץ TTS עבור {phone} בוצעה בהצלחה") return response except requests.exceptions.RequestException as e: logging.error(f"שגיאה בהעלאת קובץ TTS עבור {phone}: {e}") logging.error(traceback.format_exc()) raise def update_extension(phone: str): """עדכון הרחבה במקרה של שגיאה""" url = f"{BASE_URL}/UpdateExtension" params = { "token": TOKEN, "path": f"ivr2:5/{phone[:6]}", "type": "playfile", "playfile_end_goto": "/0000/999" } try: logging.debug(f"שולח בקשה לעדכון הרחבה עבור {phone}: {url}") logging.debug(f"פרמטרים: {params}") response = requests.get(url, params=params, timeout=10) response.raise_for_status() logging.debug(f"תגובת השרת בעדכון הרחבה: {response.text}") logging.info(f"עדכון הרחבה עבור {phone} בוצע בהצלחה") return response except requests.exceptions.RequestException as e: logging.error(f"שגיאה בעדכון הרחבה עבור {phone}: {e}") logging.error(traceback.format_exc()) raise def main(): logging.info("התחלת הרצת סקריפט ניצול זמן") today = datetime.now() logging.debug(f"תאריך נוכחי: {today}") try: phones = get_template_entries() if not phones: logging.warning("לא נמצאו מספרי פלאפון") return for phone in phones: try: # הורדת קובץ YMGR ymgr_content = download_ymgr_file(phone) # חישוב סך השעות total_hours = process_csv_data(ymgr_content, today) # אם אין שעות ביום הנוכחי, דלג על הלומד הזה if total_hours == 0: logging.info(f"אין שעות ביום הנוכחי עבור {phone}") continue # יצירת קובץ TTS tts_content = create_tts_file(total_hours, today) if not tts_content: logging.warning(f"לא ניתן ליצור קובץ TTS עבור {phone}") continue # העלאת קובץ TTS upload_tts_file(phone, tts_content) except Exception as phone_error: logging.error(f"שגיאה בטיפול בטלפון {phone}: {phone_error}") logging.error(traceback.format_exc()) # במקרה של שגיאה בהעלאה, נסה לעדכן את ההרחבה ואז העלה שוב try: update_extension(phone) upload_tts_file(phone, tts_content) except Exception as retry_error: logging.error(f"שגיאה בניסיון חוזר עבור {phone}: {retry_error}") logging.error(traceback.format_exc()) except Exception as e: logging.error(f"שגיאה כללית: {e}") logging.error(traceback.format_exc()) logging.info("סיום הרצת סקריפט ניצול זמן") if __name__ == "__main__": main()
וזה עובד פחות מהקוד הקודם, נראה לי שכלל לא עושה כלום.
ממש ממש תודה רבה לך!!! תזכה למצוות!