اذهب إلى المحتوى

Liwa Hadri

الأعضاء
  • المساهمات

    14
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو Liwa Hadri

  1. script.rar سويته بطريقتي كذا مادري اذا هي صح ولا يعني اذا اتقفل مثال سكريبت واشتغل مره ثاني بيرجع بيكتب القيم مره ثاني بلملف جيسون -> يقفل المتغير -> بعدين يضل يضيف عناصر الجديد let autoSave = true; برا الفاكشن if (autoSave === true) { // يحط القيم اذا كان المتغير شغال decodeJson.table.forEach(e => { obj.table.push(e);// يحط الاوبجيكتات الي كانت علي الملف الجيسون autoSave = false; // يقفل المتغير }); } obj.table.push({name: details.title}); // يضل يحط اوبجيكتات الجديد علي الملف الجيسون
  2. اوك فهمتك بس اشلون احل المشكله حقت الجيسون لاني تعبت صراحه يومين وانا جالس احله بس ماقدرت اذا يمديك تساعدني بالله
  3. تمام بس ليش ماستخدم while بدل setInterval؟ + ممكن تساعدني في الاوبجيكت الجيسون ابغاه يحفظ ال بيانات قديم تضل اذا طفي سيرفر ومثال اذا شغلتو مره ثانيه يرجع المعلومات قديمه + يضل يضيف المعلومات الجديد
  4. اعتقد اخر الصفحه الي موجود بل API الي هي رقم 990 شيئ كذا اعتقد let response = await fetch('https://api.jikan.moe/v4/anime'); let data = await response.json() page_number = data.pagination.last_visible_page
  5. نعم بس هي خارج الفاكشن let obj = { table: [] }; اذا طبعت الـ obj بيعطني ليستات من الAPI الي خزنت عليه اسامي انميات: { "table": [ { "name": "Kimi ga Nozomu Eien" }, { "name": "Kita e.: Diamond Dust Drops" }, { "name": "Loveless" }, { "name": "Blood+" }, { "name": "Re: Cutey Honey" }, { "name": "Solty Rei" }, { "name": "Juuni Kokuki" }, { "name": "Shaman King" }, { "name": "X/1999" }, { "name": "X" }, { "name": "Mahou Sensei Negima!" }, { "name": "Maria-sama ga Miteru" }, { "name": "Boukyaku no Senritsu" }, { "name": "Ima, Soko ni Iru Boku" }, { "name": "Peace Maker Kurogane" }, { "name": "Pita Ten" }, { "name": "Power Stone" }, { "name": "Mononoke Hime" }, { "name": "RahXephon" }, { "name": "Samurai 7" }, { "name": "Scrapped Princess" }, { "name": "s.CRY.ed" }, { "name": "Shingetsutan Tsukihime" }, { "name": "Slam Dunk" }, { "name": "Strange Dawn" } ] } الفكره انا كنت ابغاه مايشيل المعلومات من الجيسون اذا السيرفر مثال انطفئ فابغي المعلومات قديمه تضل بلجيسون ويضل يضيف معلومات الثانيه الي هي ( جديد) عشان بعدين أنا بسوي فحص اذا فيه Duplicate" بل اسامي اوبجيكت مايضيفهم ذا الكود جديد عدلت عليه + اني اجرب بملف الجيسون اذا اقدر اطبع الكلمه test 25 مره do { await timer(1500); i++; console.log(i); if (i === page_number) { // check if index reached last page i=1 } fs.writeFile('saveindex.txt', i, (err2) => { if (err2) throw console.log(err2); }); let pageID = await fetch('https://api.jikan.moe/v4/anime?page='+i); // كل صفحه واحد تحتوي علي 25 مصفوف let getAnimes = await pageID.json() if (getAnimes.data) { getAnimes.data.forEach(async details => { let currentPage = details.title; const dataFile = fs.readFileSync('data.json', 'utf8') if (dataFile === '') { // check if file json empty try { obj.table.push({name: details.title}) let encodeJson = await JSON.stringify(obj); fs.writeFileSync("data.json", encodeJson) console.log('file is empty') } catch(err) { console.log(err); } } else { //read data with JSON from file try { let decodeJson = await JSON.parse(dataFile); decodeJson.table.push({name : 'test'}) console.log(decodeJson); // جربت هنا طبعت اذا بيطبع لي test 25 مره ولا بس مادري ليش طبع لي مره واحد //fs.writeFileSync('data.json', JSON.stringify(obj)) } catch (err) { console.log(err); } } }) } } while(i<=page_number);
  6. مافهمتك ممكن توضح لساتي مبتدئ بل الجيسون بس حسب ماعرفت انه اذا ماحبيت اتخلص من المعلومات قديمه لازم اتحصل علي القيم من الملف بعدين كمثال جربت كذا عشان ادخل معلومه بس تطبع لي مره واحد ؟ مو علي حسب التكرار باللوب 25 مره قصدي بس ليش decodeJson.table.push({name : 'test'})
  7. الصراحه سويته بكم مره بس مانجحت طريقه والمشكله يكرر لي اوبجيكت القديم مع الجديد ممكن كمثال افهم اكثر لو سمحت
  8. مساعده عندي مشكله بالملف جيسون انا مخزن الداتا عليه بس المشكله كمثال السيرفر احيانن ينطفئ فابغي اخذ المعلومات الاخير الي كانت مخزنه بلملف "json" وبعدين يكمل يضيف معلومات جديد عليه مابغاه يشيل كل اشيئ كان موجود علي ملف الجيسون ويعيد يكتب الي علي Array كيف اسويه لاني حاولت اكثر من طريق وماعرفت.. let currentPage = details.title; const dataFile = fs.readFileSync('data.json', 'utf8') if (dataFile === '') { // check if file json empty try { obj.table.push({name: details.title}) let encodeJson = await JSON.stringify(obj); fs.writeFileSync("data.json", encodeJson) console.log('the file is empty so i pushed one data') } catch(err) { console.log(err); } } else { //read data with JSON from file try { let decodeJson = await JSON.parse(dataFile); let values = decodeJson['table'].map(x => {return x['name']}) //create map JSON file if (values.includes(currentPage)) { // check if values is same Data on currentPage console.log('duplicate') } else { /* أبغي استقبل المعلومات القديمه + اضافته بل Array وبعدين يضيف بعده معلومات جديد */ obj.table.push({name: details.title}) //push data in array let encodeJson = await JSON.stringify(obj); // convert array to json fs.writeFileSync('data.json', encodeJson) // write in file lines JSON } } catch (err) { console.log(err); } }
  9. اعتقد الخطأ من sleep لان اذا طبعت i عشان اتاكد اذا الرقم ينزاد او لا ف لقيته يتكرر بعض احيان او يصل لـ رقم كمثال 340 وبعدين يرجع يعد ل 331 هل فيه طريقة عشان ابطئ اللوب اذا امكن؟ تعديل: بما انو مسحت الفاكشن الي فوق ودمجت بل getDetail صار مايكرر الرقم اعتقد انحلت المشكله شكرا
  10. مافهمتك بسؤال الاول مثل اين اشغل الكود يعني تقصده او اي فاكشن الي يجلب الليست لكل صفحات؟ ممكن توضح عملت الفاكشن test هناك عشان ارسله من الكلينت جافا سكريبت ل السيرفر 'php' عشان بعدها اخزنه بقاعده بيانات *كتجربه بس. + جربتها حتي بدون ارسال من كليت لسيرفر ونفس شيئ يوقف التكرار
  11. لم افهمك يوجد حوالي 23461 صفحه انا اخذت العدد كامل 'total' من الفاكشن الاول هاذا وكررته بكل صفحه مثل كذا يعني بيعد من 1 لـ 23461 https://api.jikan.moe/v4/anime?page="+i+"&type=tv وكل صفحه له حوالي 25 صفوف من الانميات بس حدثت الصفحه كمثال بيبدا يعرض لي الصفحه وله 25 صفوف من المعلومات الانميات واذا وصل لصفحه مثال 331 او عدد فوق ال 200 يوقف الديبق مايطبع لي وجربت حدثت الصفحه مره ثاني عشان اتاكد ونفس شيئ فماعرف المشكله من وين بضبط ؟ ولا اذا تعرف طريق عشان اجلب كل انميات مره واحد مثل نظام انمي سلاير لاني مثل ماقلت ابغا اخزنه ب قاعده بيانات بس
  12. انا استخدم سيرفر محلي علي جهازي والرام ليست ممتلئ + استخدمت sleep عشان يقلل الطلب request لان المكتب jikan مسوين rate limited فـ اكيد يعني اذا سويت تكرار بدون ماقلل سرعته بيكتب لي بي الدبق Too Many Requests فكذا قللت السرعه عشان كل شوي يجيب ويعرض لي الانميات لكل صفحه الطريق مثل ماقلت فوق نجحت عندي بس المشكله يوقف بصفحه 331.
  13. السلام عليكم اني جديد بلمنتدي حاسوبي وهذا اول موضوع لي المقال هذا مو منسوخ من موضوع الحصول على API لعرض و تحميل حلقات الانمي مثل أنمي سلاير كنت ابحث علي API لعرض انميات عشان تساعدني بعدين اخزنه بل قاعدة بيانات ف لقيت بعضه مثل Jikan و Kitsu مكاتب. كنت ابحث عن طريقة عشان اعرض كل انميات مره وحده لاني بعدين اخزنه ب قاعده بيانات واحتاجه بجدول صفحه HTML مره ثانيه ف هذا كنت ابغاه عشان اوصل الفكره وبما انو الـ API عندو limited rate اكيد يعني عشان ضغوطات بسيرفر ف سويت حلقه تكرار اجلب كل انميات بكل صفحات وقللت سرعة جلب انميات عشان مايصير ضغط بسيرفر او طلبات بل API الطريقه فعلن نجحت بس مشكله انو اذا وصل كمثال رقم 331 صفحه يوقف هناك التكرار فماعندي اي فكره او طريقه كيف اعرض كل الليست الانميات مره وحده ؟ مع اني دورت بعض الفاكشنات بلمكتب Jikan و Kitsu وغيرها مالقيت اي طريقه هذا الكود سويته let n; async function updatePage() { const sleep = (milliseconds) => { return new Promise(resolve => setTimeout(resolve, milliseconds)) } //let resp2 = await fetch('https://api.jikan.moe/v4/anime?page='); while (true) { try { await sleep(1000) let resp = await fetch('https://api.jikan.moe/v4/anime?sort=asc&sfw=false'); data = await resp.json(); n = data.pagination.items.total; await getDetail(n); test(); } catch(err) { console.log(err); } } } updatePage(); let dataAnime; array = [] async function getDetail(n) { try { const sleep = (milliseconds) => { return new Promise(resolve => setTimeout(resolve, milliseconds)) } for (i=1; i<n; i++) { await sleep(2000); let respAnime = await fetch("https://api.jikan.moe/v4/anime?page="+i+"&type=tv"); dataAnime = await respAnime.json(); dataAnime.data.forEach(element => { title_english = element.title; episodes = element.episodes; trailer = element.trailer; image = element.images.jpg.image_url; rating = element.rating; page = i array = {name: title_english, episodes: episodes, trailer: trailer, path: image, page: i} test(); }); } } catch(err) { console.log(err); } } function test() { $.ajax({ url: 'test.php', method: 'POST', dataType: 'text', data: { arr: array }, success: function(e) { console.log(e); } }) }
×
×
  • أضف...