Royalroad.comの非公式API。
npm i -s @fsoc/royalroadl-api
これは、RRである混乱の周りに予測可能で一貫したラッパーを書く試みです。公式の公開APIが公開されていないため、このモジュールはすべてのデータをHTMLから直接廃棄するため、自発的で恐ろしい死になりやすくなります。
Typedocから生成されたBarebonesドキュメントは、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のインスタンスまたはRoyalResponseを拡張するRoyalErrorのいずれかです。これは、メタ情報を応答に簡単に取り付け、ユーザーとモジュールの間に一貫したインターフェイスを持つことができるように行われます。 RoyalError 、短いスタックトレースをキャプチャして返すという点で、NodeJS Errorオブジェクトと同様に動作することに注意してください。
たとえば、 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 }すべてのサービスクラスは、httpリクエストを行い、応答を返す責任を負うクラスであるRequesterの同じインスタンスを使用します。デフォルトでは、200以外のステータスコードに遭遇した場合、 RoyalErrorがスローされます(これは、 ignoreStatusオプションで無効にすることができます)。
RRは、実際の応答が404または304である必要がある場合でも200を返すことを好むため、 Requester (もしあれば)htmlを解析し、そこからエラーを読み取ろうとします。リクエストが失敗したという兆候が見つかった場合、それは投げます - これはignoreParserオプションで無効にすることができます。
Requesterの主な目標は、Cookieを追跡し、反CSRF対策の一部としてPost Requestsに必要な__ResponseVerificationToken自動的に取得することです。このトークンの取得はデフォルトで無効になっており、 fetchTokenオプションで有効にすることができます。
すべてのサービスは非常に類似した方法で構成されています。A <Type>Serviceがすべての関連する方法を公開し、通常、HTML応答を解析するために使用される多くの静的メソッドを公開する<Type>Parser 。
既存のすべてのサービスの迅速なまとめは次のとおりです。
ChapterServiceには、章を取得して公開するための方法と章のコメントが含まれています。FictionService 、フィクションデータとレビューの取得。FictionsService 、あらゆる種類のフィクションリストRRLオファーを取得する方法、それぞれのレベルのフィクションの詳細が記載されています。ProfileServiceの処理プロファイルは、解析されたユーザープロファイルを返します。UserService 、ログオンなどのログインユーザーに関連するアクション、ユーザーのフィクション、ブックマーク、または通知の取得。これは、HTMLを解析するためにCheerioを使用します。これは非常に寛容なパーサーです。これは、RRLがページレイアウトをわずかに変更したとしても、APIの大部分(変更された領域を担当する部分でさえ)が依然として機能的なままであることを意味します。
したがって、プロパティが空またはnullであることを期待し、一部の値を解析できないという理由だけでエラーがスローされないことを知っています。