עזרה | קבלת מס' הקובץ הגבוה ביותר בשלוחה (js)
-
יש כאן קוד ש @ערוץ-הסקרים העלה בפורום של ימות המשיח, להעלאה אוטמטית של קבצים למערכת וקבלת מס' הקובץ הגבוה ביותר בשלוחה בצורה אוטומטית בphp.
אני רוצה להמיר את הקוד הזה לjs ואשמח מאוד לעזרה, ממי שמבין שיוכל לחלק לי את הקוד ולהסביר לי מה אני צריך לעשות בjs.<?php function FileNameToUpload($server, $token, $path){ $array = json_decode(file_get_contents("https://$server.call2all.co.il/ym/api//GetIVR2Dir?token=$token&path=$path"),true); if($array["responseStatus"] == "OK"){ foreach($array["files"] as $key => $value){ if($value["fileType"] == "AUDIO" || $value["fileType"] == "TTS"){ $split = explode(".",$value["name"]); if (is_numeric($split[0])){ break; } } } if($split[0] == null){ $NewFileName = 0; }else{ $NewFileName = $split[0]+1; } //הפוך למינימום 3 ספרות/ return str_pad($NewFileName,3,"0",STR_PAD_LEFT); }else{ //במקרה של שגיאה } } ?>
-
@מוטי-מן האמת שאין לי מושג בphp...
את החלק של העלאת הקובץ החדש לא כל כך הצלחתי להבין, מאיפה הוא לוקח את הקובץ להעלאה,
אבל ממה שהבנתי שאר החלקים הם:
לולאה על כל הקבצים שבשלוחה,
תנאי שמוודא על כל קובץ שהוא מסוג אודיו/TTS (ואם כן מכניס אותו למערך),
ואז בדיקת אורך המערך,
+1,
מתקבל מספר, שבמידה שהוא null (כלומר עדיין לא קיים קובץ בשם זה), ייקבע כשם הקובץ החדש שמעלים.
לכל הנ"ל (החלק שפירטתי) יש תחליפים בJS.
אבל מכיוון שאיני יודע php ולא את ההתממשקות עם הAPI של ימות, לא אוכל לכתוב איך, אבל זה בעצם רשימת הדברים שהקוד הזה מבצע ואתה צריך למצוא את התחליף שלהם בJS.
בהצלחה -
@מוטי-מן אני לא הולך לכתוב עבורך קוד, אני יכול להגיד לך מה אני רואה מקריאה של הקוד הזה מלמעלה (לא נגעתי מעולם ב-PHP):
שורה 3: אתחול משתנהarray
שמכיל אובייקט JSON שתוכנו הוא תשובת HTTP לקריאה שנשלחת לכתובת"https://$server.call2all.co.il/ym/api//GetIVR2Dir?token=$token&path=$path"
(כמובן עם הערכיםtoken$
ו-path$
מתקבלים מהארגומנטים של הפונקציה הראשית).
שורה 4: תנאי אם הערך של המפתחresponseStatus
מתוך ה-JSON הנ"ל, שווה ל-'OK'
.
שורה 5: לולאה על גבי מערך (שנוצר אוטומטית מתוך הערך של המפתחfiles
שבתוך ה-JSON הנ"ל), מהמשך הקוד ניתן להסיק שהמערך הנ"ל מכיל אובייקטים שבכל אחד מהם יש ערכים:fileType
ו-name
. ככל הנראהname
מכיל גם סיומת הקובץ, לכן כנראה יוצרים בשורה 7 מערך בשםsplit
שמכיל את 0: שם הקובץ, 1: סיומת הקובץ.
שורה 8: בדיקה אם שם הקובץ ([split[0
) הוא מספר, אם כן > שורה 8, מבצעbreak
ללולאה (נשגב מבינתי למה).
שורה 14: אם שם הקובץnull
(ככל הנראה כשאין במערךfiles
כלום) מאתחל משתנהNewFileName
עם ערך0
. אם לא - מאתחל משתנהNewFileName
הנ"ל עם ערך של שם הקובץ + 1.
שורה 20: הפונקציה מחזירה ערך. מה שקורה פה זה פדינג ("ריפוד") של סטרינג. נראה שפשוט חייבים סטרינג של 3 תווים (הארגומנט השני של str_pad), אחרי זה ארגומנט של איזה תווים להכניס במקרה שהפונקצית ריפוד נכנסת לפעולה, אחרי זה ארגומנט שלSTR_PAD_LEFT
) מבצעים את הריפוד הזה על המשתנה הנ"לNewFileName
.
קח לדוגמא אם המשתנה הנ"ל מכיל 1 - הפונקציה תחזיר 001, ואם הוא מכיל 31 - הפונקציה תחזיר 031, ואם 250 - יחזור 250.@צדיק-תמים אני לא מצליח לראות בקוד הזה איפה קורה:
תנאי שמוודא על כל קובץ שהוא מסוג אודיו/TTS (ואם כן מכניס אותו למערך),
ואז בדיקת אורך המערךמה שנראה בקוד זה שהמשתנה
split
נערך מחדש בכל איטרציה של הלולאה על המערךfiles
. -
let listfile = JSON.parse(UrlFetchApp.fetch(`https://${server}.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${path}`)); if (listfile.responseStatus === 'OK') { let lastfilename = listfile.files .filter(file => file.fileType === 'audio' || file.fileType === 'tts') .map(file => file.name.split('.')[0]) .find(filename => !isNaN(fileName)); let newnumber = number(lastfilename || -1) + 1; let newname = newnumber.toString().padStart(3, '0'); let fileextension = '.tts' let filePath = `${path}${newname}${fileextension}`;
המשתנים שצריך להגדיר הם token, path, server (שם משתמש, נתיב השלוחה ושרת פרייבט אם קיים.) והמשתנה המתקבל הוא הנתיב המלא כולל שם הקובץ להעלאה במשתנה newname
-
@אביי אמר בעזרה | קבלת מס' הקובץ הגבוה ביותר בשלוחה (js):
@איש-נחמד לא הבנתי?
let listfile = JSON.parse(UrlFetchApp.fetch(`https://${server}.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${path}`));
בהקבלה לשורה 3 בקוד המקורי:
$array = json_decode(file_get_contents("https://$server.call2all.co.il/ym/api//GetIVR2Dir?token=$token&path=$path"),true);