Skip to content

Latest commit

 

History

History
90 lines (67 loc) · 2.43 KB

File metadata and controls

90 lines (67 loc) · 2.43 KB

JavaScript — Open Library Scraper

Call the hosted Open Library Scraper from Node.js with the official apify-client.

Install

npm install apify-client

Full-text search

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('logiover/openlibrary-scraper').call({
  mode: 'search',
  query: 'science fiction',
  maxResults: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} books`);
for (const b of items.slice(0, 5)) {
  console.log(`${b.title}${b.authors} (${b.firstPublishYear}) ★ ${b.ratingsAverage ?? 'n/a'}`);
}

Browse a genre and sort by rating

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('logiover/openlibrary-scraper').call({
  mode: 'search',
  query: 'fantasy',
  sort: 'rating',
  maxResults: 1000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
const topRated = items
  .filter((b) => b.ratingsCount > 100)
  .sort((a, b) => (b.ratingsAverage ?? 0) - (a.ratingsAverage ?? 0))
  .slice(0, 10);
console.table(topRated.map((b) => ({ title: b.title, avg: b.ratingsAverage, n: b.ratingsCount })));

Fetch book details (with descriptions)

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('logiover/openlibrary-scraper').call({
  mode: 'bookDetail',
  workIds: ['OL27258W', 'OL45804W'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const b of items) {
  console.log(b.title, '—', (b.description || '').slice(0, 100));
}

Save results to a file

import { ApifyClient } from 'apify-client';
import { writeFileSync } from 'node:fs';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/openlibrary-scraper').call({
  mode: 'subject',
  subject: 'science_fiction',
  maxResults: 2000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
writeFileSync('books.json', JSON.stringify(items, null, 2));
console.log(`Saved ${items.length} books to books.json`);

📄 Documentation only. ▶️ Run the Actor: https://apify.com/logiover/openlibrary-scraper