Endpoint ini bertindak sebagai perantara (proxy) untuk mengambil data buku dari Google Books berdasarkan ISBN.
GET https://renaldo-api.vercel.app/api/book?isbn=9780143127741
isbn (wajib): Nomor ISBN buku yang ingin dicari.GET https://renaldo-api.vercel.app/api/book?isbn=9786020324783
{
"totalItems": 1,
"items": [
{
"volumeInfo": {
"title": "The Martian",
"authors": ["Andy Weir"],
"publisher": "Crown Publishing Group",
"publishedDate": "2014-02-11",
"imageLinks": {
"thumbnail": "https://books.google.com/books/content?id=...&printsec=frontcover&img=1&zoom=1"
}
}
}
]
}
Implementasi berikut menggunakan pendekatan Open Library sebagai sumber utama dan Google Books sebagai fallback kedua jika data tidak ditemukan di Open Library. Permintaan ke Google Books dilakukan melalui proxy API ini.
const PROXY_URL = "https://renaldo-api.vercel.app/api/book";
function getBookData(isbn) {
isbn = isbn.toString().trim();
if (!isbn) return ["ISBN kosong", "", "", "", ""];
var data = fetchFromOpenLibrary(isbn);
if (data[0] === "Tidak ditemukan") {
data = fetchFromGoogleBooksViaProxy(isbn);
}
return data;
}
function fetchFromOpenLibrary(isbn) {
var url = "https://openlibrary.org/api/books?bibkeys=ISBN:" + encodeURIComponent(isbn) + "&format=json&jscmd=data";
var response = UrlFetchApp.fetch(url);
var json = JSON.parse(response.getContentText());
var key = "ISBN:" + isbn;
if (!json[key]) {
return ["Tidak ditemukan", "", "", "", ""];
}
var book = json[key];
var title = book.title || "";
var authors = book.authors ? book.authors.map(a => a.name).join(", ") : "";
var publishDate = book.publish_date || "";
var publishYear = extractYear(publishDate);
var cover = (book.cover && book.cover.medium) ? book.cover.medium : "";
var publishers = book.publishers ? book.publishers.map(p => p.name).join(", ") : "";
return [title, authors, publishers, publishYear, cover];
}
function fetchFromGoogleBooksViaProxy(isbn) {
var proxyUrl = PROXY_URL + "?isbn=" + encodeURIComponent(isbn);
try {
var response = UrlFetchApp.fetch(proxyUrl);
var json = JSON.parse(response.getContentText());
if (!json.totalItems || json.totalItems === 0) {
return ["Tidak ditemukan", "", "", "", ""];
}
var volumeInfo = json.items[0].volumeInfo;
var title = volumeInfo.title || "";
var authors = volumeInfo.authors ? volumeInfo.authors.join(", ") : "";
var publishers = volumeInfo.publisher || "";
var publishDateRaw = volumeInfo.publishedDate || "";
var publishYear = extractYear(publishDateRaw);
var cover = (volumeInfo.imageLinks && volumeInfo.imageLinks.thumbnail) ? volumeInfo.imageLinks.thumbnail : "";
return [title, authors, publishers, publishYear, cover];
} catch (e) {
return ["Error Proxy Google Books", "", "", "", ""];
}
}
// ambil tahun dari string tanggal dalam berbagai format
function extractYear(dateString) {
if (!dateString) return "";
var parsedDate = new Date(dateString);
if (!isNaN(parsedDate.getTime())) {
return parsedDate.getFullYear().toString();
}
var match = dateString.match(/\b\d{4}\b/);
if (match) return match[0];
var monthNames = {
jan: 0, feb: 1, mar: 2, apr: 3, may: 4, jun: 5,
jul: 6, aug: 7, sep: 8, oct: 9, nov: 10, dec: 11
};
var parts = dateString.trim().split(" ");
if (parts.length === 3) {
var monthPart = parts[0].toLowerCase().substr(0, 3);
var dayPart = parseInt(parts[1]);
var yearPart = parseInt(parts[2]);
if (monthNames.hasOwnProperty(monthPart) && !isNaN(dayPart) && !isNaN(yearPart)) {
return yearPart.toString();
}
}
return "";
}
๐ Dibuat oleh Renaldo Aluska | GitHub