واجهة برمجة تطبيقات غير رسمية لـ Royalroad.com.
npm i -s @fsoc/royalroadl-api
هذه محاولة لكتابة غلاف يمكن التنبؤ به ومتسق حول الفوضى التي هي RR. نظرًا لعدم تعرض أي واجهة برمجة تطبيقات عامة رسمية ، فإن هذه الوحدة تخفض جميع البيانات مباشرة من HTML ، مما يجعلها عرضة للموت العفوي والرهيبة.
يمكن العثور على وثائق Barebones التي تم إنشاؤها من TypedOC على FS-C.Github.io/royalroad-api/. يمكنك أيضًا إنشاء هذه المستندات بنفسك عن طريق تشغيل npm run docs في جذر المشروع.
لمزيد من الأمثلة ، تحقق من دليل /examples ، انظر أيضًا الاختبارات في /test .
import { RoyalRoadAPI } from '@fsoc/royalroadl-api' ;
const api = new RoyalRoadAPI ( ) ;
const { data } = await api . fictions . getPopular ( ) ;
const titles = data . slice ( 10 ) . map ( ( fic ) => fic . title ) ;
console . log ( `The top 10 popular fictions are: ${ titles . join ( ', ' ) } ` ) ; الوحدة نفسها تصدر فقط فئة RoyalRoadAPI التي ، في حد ذاتها ، ليس لديها طرق. يتم تفويض جميع الوظائف إلى فئات الخدمة التي هي خصائص مثيل RoyalRoadAPI .
جميع الردود والأخطاء هي إما مثيل RoyalResponse أو RoyalError ، والتي تمتد على RoyalResponse . يتم ذلك للسماح بسهولة بمعالجة معلومات التعريف على الردود ، وأن يكون لديك واجهة متسقة بين المستخدم والوحدة النمطية. لاحظ أن RoyalError يتصرف بشكل مشابه لكائن Error NodeJS ، حيث يلتقط ويعيد تتبعًا قصيرًا.
على سبيل المثال ، قد تؤدي دعوة إلى RoyalRoadAPI#fiction.getFiction() إلى الاستجابة التالية حول النجاح:
RoyalResponse {
data :
{ type : 'Original' ,
tags : [ 'Action' , 'Adventure' , 'Sci-fi' , ... 3 more items ] ,
stats :
{ pages : 766 ,
ratings : 719 ,
followers : 2991 ,
favorites : 690 ,
views : [ Object ] ,
score : [ Object ] } ,
title : 'Paladin' ,
image :
'https://www.royalroadcdn.com/(...)' ,
status : 'HIATUS' ,
author :
{ name : 'Komikhan' ,
title : '' ,
avatar :
'https://www.royalroadcdn.com/(...)' ,
id : 66486 } ,
warnings : [ 'Gore' , 'Profanity' ] ,
chapters : [ [ Object ] , [ Object ] , [ Object ] , ... 71 more items ] ,
description :
'When the first derelict alien spacecraft fell to Earth, (...)' } ,
success : true ,
timestamp : 1528119296799 }... أو عند الخطأ:
RoyalError {
data :
{ message : 'Page Not Found' ,
stack :
[ 'Error' ,
' at new RoyalError' , ... 8 more items ] } ,
success : false ,
timestamp : 1528119381034 } تستخدم جميع فئات الخدمة نفس مثيل Requester ، والفئة المسؤولة عن تقديم طلبات HTTP وإعادة ردودها. بشكل افتراضي ، سوف يرمي RoyalError إذا واجه رمز الحالة بخلاف 200 (يمكن تعطيل ذلك مع خيار ignoreStatus ).
نظرًا لأن RR يحب إرجاع 200 حتى عندما يجب أن يكون الاستجابة الفعلية 404 أو 304 ، فإن Requester سوف يحلل HTML الذي حصلت عليه (إذا كان قد حصل عليه) ، ويحاول قراءة خطأ منه. إذا وجدت علامات على أن الطلب قد فشل ، فسيتم رميه - يمكن تعطيل ذلك مع خيار ignoreParser .
الهدف الرئيسي من Requester هو تتبع ملفات تعريف الارتباط وجلب تلقائيًا غالبًا ما يكون هناك حاجة لطلبات __ResponseVerificationToken لطلبات البريد كجزء من تدابير CSRF. يتم تعطيل هذا الجلب من الرموز بشكل افتراضي ويمكن تمكينه مع خيار fetchToken .
يتم تنظيم جميع الخدمات بطريقة مشابهة للغاية: مع وجود <Type>Service تعرض جميع الأساليب ذات الصلة ، و <Type>Parser ، الذي يعرض عادةً عددًا من الطرق الثابتة المستخدمة لتحليل استجابات HTML.
مجموعة سريعة من جميع الخدمات الحالية هي:
ChapterService ، يحتوي على طرق لجلب ونشر الفصول وتعليقات الفصل.FictionService ، جلب بيانات الخيال والمراجعات.FictionsService ، طرق لجلب جميع أنواع قوائم الخيال التي تقدمها RRL ، مع مستويات كل منها من تفاصيل الخيال.ProfileService ، معالجة ملفات التعريف ، إرجاع ملفات تعريف المستخدم المحسورة.UserService ، الإجراءات المتعلقة بالمستخدم المسجل مثل تسجيل الدخول ، الحصول على خيال المستخدمين أو الإشارات المرجعية أو الإخطارات.هذا يستخدم Cheerio لتحليل HTML ، وهو محلل مسامح للغاية. هذا يعني أنه حتى لو كان RRL لإجراء تغييرات طفيفة على تخطيطات الصفحات الخاصة بهم ، فإن أجزاء كبيرة من واجهة برمجة التطبيقات (حتى تلك الأجزاء المسؤولة عن المناطق المتغيرة) ستظل وظيفية.
لذلك ، توقع أن تكون الخصائص فارغة أو null ، واعلم أنه لن يتم إلقاء خطأ لمجرد أن بعض القيم لا يمكن تحليلها.