Неофициальный API для Royalroad.com.
npm i -s @fsoc/royalroadl-api
Это попытка написать предсказуемую и последовательную обертку вокруг беспорядка, который является RR. Поскольку никаких официальных публичных API не выявлено, этот модуль очищает все данные прямо из 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 - отслеживать файлы cookie и автоматически приносить __ResponseVerificationToken , часто необходимый для запросов почты в рамках мер против CSRF. Это извлечение токенов отключено по умолчанию и может быть включено с помощью опции fetchToken .
Все службы структурированы очень похожими: с помощью <Type>Service разоблачающей все соответствующие методы, и <Type>Parser , который обычно выявляет ряд статических методов, используемых для разбора ответов HTML.
Быстрая завершение всех существующих сервисов:
ChapterService , содержит методы получения и публикации глав и комментариев глаз.FictionService , получение художественных данных и обзоров.FictionsService , методы получения всех типов выдуманных списков RRL, с их соответствующими уровнями деталей для художественной литературы.ProfileService , обработка профилей, возвращает профили пользователей.UserService , действия, связанные с зарегистрированным пользователем, как вход в систему, получение фикций пользователей, закладки или уведомлений.Это использует Cheerio для анализа HTML, который является очень прощающим анализатором. Это означает, что даже если RRL внесет незначительные изменения в их макетах страниц, большая часть API (даже те части, ответственные за измененные области), все равно останутся функциональными.
Следовательно, ожидайте, что свойства будут пустыми или null , и знайте, что ошибка не будет брошена только потому, что некоторые значения не могут быть проанализированы.