first commit
This commit is contained in:
94
lib/module.js
Normal file
94
lib/module.js
Normal file
@@ -0,0 +1,94 @@
|
||||
const cheerio = require("cheerio");
|
||||
|
||||
|
||||
const extractBookPage = ($) => {
|
||||
// "pagesFormat" test ID'sine sahip p etiketindeki sayıyı çıkar
|
||||
const pagesText = $('[data-testid="pagesFormat"]').text();
|
||||
|
||||
// Metinden yalnızca rakamı almak için regex kullan
|
||||
const match = pagesText.match(/\d+/); // Sadece sayıları bulur
|
||||
|
||||
return match ? match[0] : null; // Sayıyı döndür
|
||||
};
|
||||
|
||||
const extractBookDate = ($) => {
|
||||
|
||||
const publicationDateText = $('p[data-testid="publicationInfo"]').text().replace('First published ', '').trim();
|
||||
const publicationDate = new Date(publicationDateText);
|
||||
const formattedDate = publicationDate.toLocaleDateString('en-GB', {
|
||||
day: '2-digit',
|
||||
month: 'short',
|
||||
year: 'numeric'
|
||||
});
|
||||
|
||||
return formattedDate;
|
||||
};
|
||||
|
||||
const extractAuthorAndTranslators = ($) => {
|
||||
// Yazar ve çevirmen isimlerini Set'lere ekle
|
||||
const authorsSet = new Set();
|
||||
const translatorsSet = new Set();
|
||||
const authorLink = $('a.ContributorLink').attr('href');
|
||||
|
||||
$('.ContributorLink').each((index, element) => {
|
||||
const name = $(element).find('.ContributorLink__name').text().trim();
|
||||
const role = $(element).find('.ContributorLink__role').text().trim();
|
||||
|
||||
if (role.toLowerCase().includes('translator')) {
|
||||
translatorsSet.add(name); // Çevirmenleri ekle
|
||||
} else {
|
||||
authorsSet.add({ name, profileLink: authorLink }); // Yazarları ekle
|
||||
}
|
||||
});
|
||||
|
||||
const authors = Array.from(authorsSet);
|
||||
const translators = Array.from(translatorsSet);
|
||||
|
||||
const result = {};
|
||||
|
||||
if (authors.length > 0) {
|
||||
result.author = authors[0]; // İlk yazar
|
||||
}
|
||||
|
||||
if (translators.length > 0) {
|
||||
result.translators = translators; // Çevirmenlerin tamamı
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
function extractGenreList($) {
|
||||
|
||||
const genres = [];
|
||||
$('span.BookPageMetadataSection__genreButton').each((index, element) => {
|
||||
const genre = $(element).find('.Button__labelItem').text().trim();
|
||||
genres.push(genre);
|
||||
});
|
||||
|
||||
return genres;
|
||||
}
|
||||
|
||||
const extractBookDetails = async (html, isbn, gemini_api_key) => {
|
||||
const $ = cheerio.load(html);
|
||||
const title = $('h1[data-testid="bookTitle"]').text(); // OK
|
||||
const thumbImage = $('meta[property="og:image"]').attr('content'); // OK
|
||||
const authorName = extractAuthorAndTranslators($); // OK
|
||||
const description = $('.BookPageMetadataSection__description .Formatted').text().trim(); //OK
|
||||
const page = extractBookPage($);
|
||||
const rate = $('.RatingStatistics__rating').first().text().trim();
|
||||
const date = extractBookDate($);
|
||||
const genres = extractGenreList($);
|
||||
|
||||
return {
|
||||
title,
|
||||
thumbImage,
|
||||
authorName,
|
||||
description,
|
||||
page,
|
||||
isbn,
|
||||
date,
|
||||
rate,
|
||||
genres
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = { extractBookDetails };
|
||||
Reference in New Issue
Block a user