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

السؤال

نشر

السلام عليكم اني جديد بلمنتدي حاسوبي وهذا اول موضوع لي المقال هذا مو منسوخ من موضوع الحصول على 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);
    }
  
  })
 }

 

Recommended Posts

  • 0
نشر (معدل)
بتاريخ 10 دقائق مضت قال Wael Aljamal:

هل راقبت استهلاك موارد الجهاز؟ لربما تمتلأ ال Ram ويتوقف عن العمل..

طالما البيانات محلية عندك لماذا تعمل sleep.

أرجو توضيح المشكلة وتحديد العطل أين يكمن لنستطيع المساعدة بشكل أفضل

 

انا استخدم سيرفر محلي علي جهازي والرام ليست ممتلئ + استخدمت sleep عشان يقلل الطلب request لان المكتب jikan مسوين rate limited فـ اكيد يعني اذا سويت تكرار بدون ماقلل سرعته بيكتب لي بي الدبق Too Many Requests فكذا قللت السرعه عشان كل شوي يجيب ويعرض لي الانميات لكل صفحه الطريق مثل ماقلت فوق نجحت عندي بس المشكله يوقف بصفحه 331.

تم التعديل في بواسطة Liwa Hadri
  • 0
نشر
بتاريخ 4 دقائق مضت قال Liwa Hadri:

انا استخدم سيرفر محلي علي جهازي والرام ليست ممتلئ + استخدمت sleep عشان يقلل الطلب request لان المكتب jikan مسوين rate limited فـ اكيد يعني اذا سويت تكرار بدون ماقلل سرعته بيكتب لي بي الدبق Too Many Requests فكذا قللت الصرحه عشان كل شوي يجيب ويعرض لي الانميات لكل صفحه الطريق مثل ماقلت فوق نجحت عندي بس المشكله يوقف بصفحه 331.

  • هل يوجد لديهم أكثثر من 331 عنصر؟ 
  • لربما القسم القديم له هيكلية بيانات مختلفة و طريقة وصول أخرى؟

حاول تشغيل الشيفرة من 332 مثلاً

لماذا تستدعي الدالة test مرتين؟

  • 0
نشر (معدل)
بتاريخ 7 دقائق مضت قال Wael Aljamal:
  • هل يوجد لديهم أكثثر من 331 عنصر؟ 
  • لربما القسم القديم له هيكلية بيانات مختلفة و طريقة وصول أخرى؟

حاول تشغيل الشيفرة من 332 مثلاً

لم افهمك يوجد حوالي 23461 صفحه انا اخذت العدد كامل 'total' من الفاكشن الاول هاذا وكررته بكل صفحه مثل كذا يعني بيعد من 1 لـ 23461

https://api.jikan.moe/v4/anime?page="+i+"&type=tv

وكل صفحه له حوالي 25 صفوف من الانميات بس حدثت الصفحه كمثال بيبدا يعرض لي الصفحه وله 25 صفوف من المعلومات الانميات واذا وصل لصفحه مثال 331 او عدد فوق ال 200 يوقف الديبق مايطبع لي وجربت حدثت الصفحه مره ثاني عشان اتاكد ونفس شيئ فماعرف المشكله من وين بضبط ؟ ولا اذا تعرف طريق عشان اجلب كل انميات مره واحد مثل نظام انمي سلاير لاني مثل ماقلت ابغا اخزنه ب قاعده بيانات بس

تم التعديل في بواسطة Liwa Hadri
  • 0
نشر
بتاريخ 7 دقائق مضت قال Liwa Hadri:

لم افهمك يوجد حوالي 23461 صفحه انا اخذت العدد كامل 'total' من الفاكشن الاول هاذا وكررته بكل صفحه مثل كذا يعني بيعد من 1 لـ 23461


https://api.jikan.moe/v4/anime?page="+i+"&type=tv

وكل صفحه له حوالي 25 صفوف من الانميات بس حدثت الصفحه كمثال بيبدا يعرض لي الصفحه وله 25 صفوف من المعلومات الانميات واذا وصل لصفحه مثال 331 او عدد فوق ال 200 يوقف الديبق مايطبع لي وجربت حدثت الصفحه مره ثاني عشان اتاكد ونفس شيئ فماعرف المشكله من وين بضبط ؟ ولا اذا تعرف طريق عشان اجلب كل انميات مره واحد مثل نظام انمي سلاير لاني مثل ماقلت ابغا اخزنه ب قاعده بيانات بس

أين تقوم بتنفيذ الشيفرة؟

بتاريخ 15 دقائق مضت قال Wael Aljamal:

لماذا تستدعي الدالة test مرتين؟

 

  • 0
نشر (معدل)
بتاريخ 4 دقائق مضت قال Wael Aljamal:

أين تقوم بتنفيذ الشيفرة؟

 

  • مافهمتك بسؤال الاول مثل اين اشغل الكود يعني تقصده او اي فاكشن الي يجلب الليست لكل صفحات؟ ممكن توضح
  • عملت الفاكشن test هناك عشان ارسله من الكلينت جافا سكريبت ل السيرفر 'php' عشان بعدها اخزنه بقاعده بيانات *كتجربه بس. + جربتها حتي بدون ارسال من كليت لسيرفر ونفس شيئ يوقف التكرار 
تم التعديل في بواسطة Liwa Hadri
  • 0
نشر
بتاريخ 2 ساعات قال Liwa Hadri:
  • مافهمتك بسؤال الاول مثل اين اشغل الكود يعني تقصده او اي فاكشن الي يجلب الليست لكل صفحات؟ ممكن توضح
  • عملت الفاكشن test هناك عشان ارسله من الكلينت جافا سكريبت ل السيرفر 'php' عشان بعدها اخزنه بقاعده بيانات *كتجربه بس. + جربتها حتي بدون ارسال من كليت لسيرفر ونفس شيئ يوقف التكرار 

تنفيذ الدالة الأولى مجددا غير مهم، لقد عرفت للتو ما هو n, في الدالة الثانية اجعل القيمة الابتدائية ل i من مكان توقف اول مرة اي نستكمل مابعد 331.

يعني عدل i=1 إلى i=330 مثلا. واستدعي دالة getDetail() مباشرة

  • 0
نشر (معدل)
بتاريخ 19 دقائق مضت قال Wael Aljamal:

تنفيذ الدالو الأولى مجددا غير مهم، لقد عرفت للتو ما هو n, في الدالة الثانية اجعل القيمة الابتدائية ل i من مكان توقف اول مرة اي نستكمل مابعد 331.

يعني عدل i=1 إلى i=330 مثلا. واستدعي دالة getDetail() مباشرة

اعتقد الخطأ من sleep لان اذا طبعت i عشان اتاكد اذا الرقم ينزاد او لا ف لقيته يتكرر بعض احيان او يصل لـ رقم كمثال 340 وبعدين يرجع يعد ل 331 هل فيه طريقة عشان ابطئ اللوب اذا امكن؟
تعديل: بما انو مسحت الفاكشن الي فوق ودمجت بل getDetail صار مايكرر الرقم اعتقد انحلت المشكله شكرا

تم التعديل في بواسطة Liwa Hadri
  • 0
نشر
بتاريخ 7 دقائق مضت قال Liwa Hadri:

اعتقد الخطأ من sleep لان اذا طبعت i عشان اتاكد اذا الرقم ينزاد او لا ف لقيته يتكرر بعض احيان او يصل لـ رقم كمثال 340 وبعدين يرجع يعد ل 331 هل فيه طريقة عشان ابطئ اللوب اذا امكن؟
تعديل: بما انو مسحت الفاكشن الي فوق ودمجت بل getDetail صار مايكرر الرقم اعتقد انحلت المشكله شكرا

يمكن استعمال setinterval نمرر لها دالة كمعامل أول، و مدة زمنية كمعانل ثاني وهي أفضل من sleep

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...