@אביי-ורבא כתב בשכפול קבצים אוטמטי ממערכת למערכת:
@מרדכי-השמח יש לי מודול API כזה,
זה עובד בצורה של בדיקה כל 10 דקות אם יש קבצים חדשים,
וכן אפשרות לעדכון מיידי עם וובהוק שקט משלוחת API וכדו'אפשר ליצור קשר בcs@abaye.co
כמה זה עולה?
@אביי-ורבא כתב בשכפול קבצים אוטמטי ממערכת למערכת:
@מרדכי-השמח יש לי מודול API כזה,
זה עובד בצורה של בדיקה כל 10 דקות אם יש קבצים חדשים,
וכן אפשרות לעדכון מיידי עם וובהוק שקט משלוחת API וכדו'אפשר ליצור קשר בcs@abaye.co
כמה זה עולה?
@CUBASE כתב בשגיאה בread:
אם ב-"t-" אחד אתה כותב הרבה טקסט אז זה ייתקע לגמרי, אבל ייתכן ויש מגבלה על כמות ה-"t-" שאפשר להדפיס בתשובה
זה לא קשור המגבלה היא כללית לאחר מספר מסוים של מילים או תווים שאר הטקסט מהסוף נחתך כאן כלום לא נחתך
@פלמנמוני כתב בAPI_SKIP_FOR_MFA - מה המשמעות?:
@121244 בפקודת לוגין אין שימוש בטוקן או api key, זה פקודה ליצירת טוקן
השימוש בapi key הינו בכל שאר הפקודות בפרמטר token, במקום מה שהיית שולח שם עד היום (שככל הנראה זה היהשם משתמש:סיסמא)
אגב אז זה הסוף למערכות הגדרות מתקדמות כי הרי אפשר להכניס את הapi key דרך הטלפון...
@פלמנמוני תמיד הייתי משתמש
אני צריך את זה בשביל לאמת חיבור
@פלמנמוני לא הצלחתי להבין מה הולך פה כשאני רוצה לשלוח פקודה עם api key מה ואיך שולחים לדוגמה פקודת לוגין איך שולחים
לדוג' עשיתי https://www.call2all.co.il/ym/api/login?token=מזהה
זה החזיר {"yemotAPIVersion":7,"responseStatus":"EXCEPTION","message":"Invalid WS request"}
וכמו כן מה אני צריך לשנות בכל הפקודותבשונה מהפניות שהיו פעם (לדוג: https://www.call2all.co.il/ym/api/DownloadFile?token=מערכת:סיסמה&path=ivr2:/)
@פלמנמוני יש דרך לאמת איזה מערכת שייכת לאותו טוקן?
@שמואל כשאני תחבר בapi עם api key באיזה ערך אני שולח את הkey?
@אברהם-מנס עזר פון אפשר לשלוח מייל ezerphone0@gmail.com
בנית מערכות (לא דברים מאוד מסובכים ופיתוחי api)
איזו שגיאה אמורה להיות בטקסט הזה כשזה מגיע ל"שמואל" זה נעצר אחרי "ל" ואומר לא הוקשה בחירה
id_list_message=t-להלן רשימת זמרים מסודרת לפי א ב לאנא בחרו בזמר המבוקש,&read=t- ל.t-אברהם פריד, הקישוא .n-1.t- ל.t-אסף הרוּש, הקישוא .n-2.t- ל.t-בן צור, הקישוא .n-3.t- ל.t-מוטי שטינמץ, הקישוא .n-4.t- ל.t-דוד חפצדי, הקישוא .n-5.t- ל.t-חיים ישראל, הקישוא .n-6.t- ל.t-חן ביטון, הקישוא .n-7.t- ל.t-חנן בן ארי, הקישוא .n-8.t- ל.t-היוצרים, הקישוא .n-9.t- ל.t-איתי דוד, הקישוא .n-10.t- ל.t-יאיר אלייצור, הקישוא .n-11.t- ל.t-יניב בן משיח, הקישוא .n-12.t- ל.t-יעקב שוואקי, הקישוא .n-13.t- ל.t-ישי ריבו, הקישוא .n-14.t- ל.t-מוטי וייס, הקישוא .n-15.t- ל.t-מרדכי בן דוד, הקישוא .n-16.t- ל.t-נפתלי קמפה, הקישוא .n-17.t- ל.t-עקיבא, הקישוא .n-18.t- ל.t-שִילֹה אֶליה, הקישוא .n-19.t- ל.t-שמואל, הקישוא .n-20.t- ל.t-שמוליק סוכות, הקישוא .n-21.t- ל.t-זאנויל, הקישוא .n-22.t- אנא בחרו את הזמר המבוקש=number,,2,1,15,No,,,,,,,,,no
יש לי כאן קוד שאמור לעלות קובץ php גדול ומשום מה זה מעלה רק חלק קטן ממנו (באמצע) ובלי שום תגובה מישהו יכול לעזור?
<?php
// הגדרות קבועות (חובה לעדכן)
$API_BASE_URL = "https://www.call2all.co.il/ym/api/";
$TOKEN = ""; // טוקן הגישה
$REMOTE_FILE_URL = "-כאן צריך להשים את הכתובת (בכוונה שיניתי( "; // כתובת הקובץ המקורית
$TARGET_PATH = "ivr2:/200/uploaded_file.mp3"; // נתיב היעד (חובה ivr2:) [3, 4]
$MAX_FILE_SIZE_MB = 150; // הגבלה לגודל הקובץ
$CHUNK_SIZE = 5 * 1024 * 1024; // 5MB למקטע (קטן מ-50MB המגבלה המקסימלית) [3, 4]
// הגדרות קובץ מקומיות
$QQUUID = uniqid('', true); // מזהה ID רנדומלי שיש ליצור לפני הבקשה הראשונה [5, 7]
$TEMP_DIR = 'temp_uploads/';
$TEMP_FILE_PATH = $TEMP_DIR . basename($TARGET_PATH);
$MAX_FILE_SIZE_BYTES = $MAX_FILE_SIZE_MB * 1024 * 1024;
// פונקציית שליחת בקשת cURL (מותאם לשיטת POST multipart/form-data)
function send_curl_request($url, $fields, $is_done_request = false) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (!$is_done_request) {
// שלב א': העלאת מקטע
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
}
// שלב ב': בקשת חיבור (UploadFile?done) היא לרוב GET או POST עם פרמטרים ב-URL,
// כאן נשתמש ב-GET אם הפרמטרים כבר ב-URL
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code != 200) {
throw new Exception("HTTP Error {$http_code} | Response: " . $response);
}
return json_decode($response, true);
}
// 1. הורדת קובץ חיצונית ושמירה מקומית + בדיקת גודל
if (!is_dir($TEMP_DIR)) {
mkdir($TEMP_DIR, 0777, true);
}
if (!@file_put_contents($TEMP_FILE_PATH, @file_get_contents($REMOTE_FILE_URL))) {
die("שגיאה בהורדה או שמירה מקומית של הקובץ.");
}
$file_size = filesize($TEMP_FILE_PATH);
$file_name = basename($TEMP_FILE_PATH);
if ($file_size > $MAX_FILE_SIZE_BYTES) {
unlink($TEMP_FILE_PATH);
die("הקובץ גדול מהמגבלה המוגדרת.");
}
// חישוב מקטעים
$total_parts = ceil($file_size / $CHUNK_SIZE);
$qq_total_parts_api = $total_parts + 1; // כולל בקשת החיבור (done) [5-8]
// --------------------------------------------------
// שלב א': העלאת מקטעי הקובץ (Chunks)
// --------------------------------------------------
$handle = fopen($TEMP_FILE_PATH, "r");
$chunk_index = 0;
$byte_offset = 0;
$upload_success = true;
if ($handle) {
while (!feof($handle)) {
$chunk_data = fread($handle, $CHUNK_SIZE);
$current_chunk_size = strlen($chunk_data);
if ($current_chunk_size == 0) {
break;
}
// יצירת קובץ זמני עבור המקטע הנוכחי (דרוש עבור cURL)
$temp_chunk_file = $TEMP_DIR . "chunk_{$chunk_index}";
file_put_contents($temp_chunk_file, $chunk_data);
// פרמטרים הנדרשים לבקשת העלאת מקטע [5, 7]
$post_fields = [
'token' => $TOKEN,
'path' => $TARGET_PATH,
'qquuid' => $QQUUID,
'qqpartindex' => $chunk_index,
'qqpartbyteoffset' => $byte_offset,
'qqchunksize' => $current_chunk_size,
'qqtotalparts' => $qq_total_parts_api,
'qqtotalfilesize' => $file_size,
'qqfilename' => $file_name,
'qqfile' => new CURLFile($temp_chunk_file, mime_content_type($temp_chunk_file), $file_name) // העלאת המקטע הנוכחי
// ניתן להוסיף convertAudio, autoNumbering ו-tts כאן אם צריך [3-5, 7]
];
try {
$response = send_curl_request($API_BASE_URL . 'UploadFile', $post_fields);
if ($response['responseStatus'] !== 'OK') {
$upload_success = false;
break;
}
} catch (Exception $e) {
$upload_success = false;
break;
}
// מחיקת קובץ המקטע הזמני
unlink($temp_chunk_file);
$chunk_index++;
$byte_offset += $current_chunk_size;
}
fclose($handle);
} else {
die("שגיאה: לא ניתן לקרוא את הקובץ המקומי.");
}
// --------------------------------------------------
// שלב ב': סיום העלאה ובקשת חיבור לקבצים
// --------------------------------------------------
if ($upload_success) {
// פרמטרים הנדרשים לבקשת החיבור [6, 8]
$done_params = [
'token' => $TOKEN,
'path' => $TARGET_PATH,
'qquuid' => $QQUUID,
'qqfilename' => $file_name,
'qqtotalfilesize' => $file_size,
'qqtotalparts' => $qq_total_parts_api,
// אם הועברו convertAudio, autoNumbering, tts יש לצרף גם לכאן [6, 8]
];
$query_string = http_build_query($done_params);
$done_url = $API_BASE_URL . "UploadFile?done&" . $query_string;
try {
// שליחת בקשה לחיבור הקטעים (UploadFile?done)
$response_data = send_curl_request($done_url, null, true);
if (isset($response_data['responseStatus']) && $response_data['responseStatus'] === 'OK') {
// פעולת ה-API הושלמה בהצלחה
// תוצאה: $response_data מכילה path ו-size [9, 10]
} else {
// שגיאה בחיבור הקבצים
}
} catch (Exception $e) {
// שגיאה בבקשת החיבור
}
} else {
// העלאת המקטעים נכשלה
}
// ניקוי הקובץ הזמני בשרת המקומי שלך
if (file_exists($TEMP_FILE_PATH)) {
unlink($TEMP_FILE_PATH);
}
?>
@שמואל אשמח לדעת אם לגבי הפקודה של הורדת קובץ זה משפיע וא"כ מה אפשר לעשות?