goodreads-bookshelf-api
Version:
Unofficial Goodreads API for getting any user's bookshelf details
4 lines (3 loc) • 2.1 kB
JavaScript
;var v=Object.create;var p=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var S=(r,e)=>{for(var s in e)p(r,s,{get:e[s],enumerable:!0})},m=(r,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of L(e))!x.call(r,o)&&o!==s&&p(r,o,{get:()=>e[o],enumerable:!(n=b(e,o))||n.enumerable});return r};var y=(r,e,s)=>(s=r!=null?v(R(r)):{},m(e||!r||!r.__esModule?p(s,"default",{value:r,enumerable:!0}):s,r)),A=r=>m(p({},"__esModule",{value:!0}),r);var I={};S(I,{default:()=>C});module.exports=A(I);var g=y(require("rss-parser"),1);var d=r=>r.replace(/(?:^\w|[A-Z]|\b\w)/g,(e,s)=>s===0?e.toLowerCase():e.toUpperCase()).replace(/\s+/g,""),k=r=>{let e=/href="([^"]*)"/,s=r.match(e),o=(s?s[1]:"").split("?")[0],l=/src="([^"]*)"/,c=r.match(l),t=(c?c[1]:"").replace(/\._.*?_/,"");return{bookLink:o,imageLink:t}};var i=class{constructor(e){this.options=e;this.options=e}fetch=async()=>{try{let{username:e,shelf:s}=this.options;if(e){if(!s)throw new Error("Shelf is required")}else throw new Error("Username is required");let n=new g.default;try{let o=await n.parseURL(`https://www.goodreads.com/review/list_rss/${e}?shelf=${s}`);return this.booksParse(o.items)}catch(o){throw new Error("Unable to fetch the shelf "+o.message)}}catch(e){throw e}};booksParse=e=>e.map(n=>{let o=n.content.split(`<br/>
`).map(a=>a.trim()),{bookLink:l,imageLink:c}=k(o[0]),t={};o.splice(1).forEach(a=>{if(a=="")return;let[u,f]=a.split(":").map(w=>w.trim());t[d(u)]=f}),t.review=t.review.slice(5).replace(/<br\s*\/?>/gi,`
`),t.rating=t.rating==="0"?null:parseFloat(t.rating),t.averageRating=parseFloat(t.averageRating),t.dateAdded=t.dateAdded===""?null:t.dateAdded,t.readAt=t.readAt===""?null:t.readAt,t.review=t.review===""?null:t.review,n.contentSnippet=n.contentSnippet===""?null:n.contentSnippet,t.shelves=t.shelves.split(",").map(a=>a.trim()),t.shelves.length===1&&t.shelves[0]===""&&(t.shelves=[this.options.shelf]);let h={...n};return delete h.content,{...h,...t,imageLink:c,bookLink:l}})};var C=i;