first commit

This commit is contained in:
2025-01-18 21:26:13 +03:00
commit 1a01c5fabc
11 changed files with 499 additions and 0 deletions

94
lib/module.js Normal file
View 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 };