diff --git a/server/package.json b/server/package.json index f08aa5f..05a8e02 100644 --- a/server/package.json +++ b/server/package.json @@ -8,7 +8,8 @@ "build": "tsc", "start": "node dist/index.js", "format": "prettier --write .", - "format:check": "prettier --check ." + "format:check": "prettier --check .", + "seed:sample": "node --env-file=.env dist/scripts/seedSampleBooks.js" }, "devDependencies": { "@types/node": "^26.6.3", diff --git a/server/src/scripts/importSampleBooks.ts b/server/src/scripts/importSampleBooks.ts deleted file mode 100644 index 63cd238..0000000 --- a/server/src/scripts/importSampleBooks.ts +++ /dev/null @@ -1,84 +0,0 @@ -//Sample import for frontend development -import mongoose from "mongoose"; -import { connectDatabase } from "../database/database.js"; -import { Book } from "../models/Book.js"; -import { isValidBook } from "../utils/validateBook.js"; -import { transformBook } from "../utils/transformBook.js"; -import { fetchGoogleBooks } from "../utils/fetchGoogleBooks.js"; -import { IMPORT_CONFIG } from "../config/importConfig.js"; - -// Simple local development settings -const SAMPLE_SUBJECT = "fantasy"; -const SAMPLE_SIZE = 20; - -async function importSampleBooks() { - let inserted = 0; - let updated = 0; - let skipped = 0; - - try { - const apiKey = process.env.GOOGLE_BOOKS_API_KEY; - - if (!apiKey) { - throw new Error("Missing GOOGLE_BOOKS_API_KEY"); - } - - await connectDatabase(); - - const url = new URL( - "https://www.googleapis.com/books/v1/volumes" - ); - - const query = - IMPORT_CONFIG.queryType === "subject" - ? `subject:${SAMPLE_SUBJECT}` - : SAMPLE_SUBJECT; - - url.searchParams.set("q", query); - url.searchParams.set("langRestrict", IMPORT_CONFIG.language); - url.searchParams.set("printType", IMPORT_CONFIG.printType); - url.searchParams.set("maxResults", String(SAMPLE_SIZE)); - url.searchParams.set("startIndex", "0"); - url.searchParams.set("key", apiKey); - - const data = await fetchGoogleBooks(url); - const books = data.items ?? []; - - for (const book of books) { - if ( - book.volumeInfo?.language !== IMPORT_CONFIG.language || - !isValidBook(book) - ) { - skipped++; - continue; - } - - const transformedBook = transformBook(book); - - const result = await Book.updateOne( - { googleBooksId: transformedBook.googleBooksId }, - { $set: transformedBook }, - { upsert: true } - ); - - if (result.upsertedCount > 0) { - inserted++; - } else if (result.matchedCount > 0) { - updated++; - } - } - - console.log("\n--- Sample Import Summary ---"); - console.log(`Books returned: ${books.length}`); - console.log(`New books: ${inserted}`); - console.log(`Existing books matched: ${updated}`); - console.log(`Skipped: ${skipped}`); - } catch (error) { - console.error("Sample import failed:", error); - process.exitCode = 1; - } finally { - await mongoose.disconnect(); - } -} - -importSampleBooks(); diff --git a/server/src/scripts/seedSampleBooks.ts b/server/src/scripts/seedSampleBooks.ts new file mode 100644 index 0000000..ffd6cab --- /dev/null +++ b/server/src/scripts/seedSampleBooks.ts @@ -0,0 +1,69 @@ + +import mongoose from "mongoose"; +import { readFile } from "node:fs/promises"; +import { fileURLToPath } from "node:url"; +import { connectDatabase } from "../database/database.js"; +import { Book } from "../models/Book.js"; + +// Locate the JSON file relative to the compiled script. +const dataPath = fileURLToPath( + new URL("../../test-data/sampleBooks.json", import.meta.url) +); + +async function seedSampleBooks() { + let inserted = 0; + let updated = 0; + let unchanged = 0; + + try { + // Connect to the developer's MongoDB database. + await connectDatabase(); + + // Load the sample books from JSON. + const file = await readFile(dataPath, "utf-8"); + const books: unknown = JSON.parse(file); + + if (!Array.isArray(books)) { + throw new Error("Sample data must be a JSON array."); + } + + for (const book of books) { + if ( + !book || + typeof book.googleBooksId !== "string" || + !book.googleBooksId.trim() || + typeof book.title !== "string" || + !book.title.trim() + ) { + throw new Error("Invalid book in sample dataset."); + } + + const result = await Book.updateOne( + { googleBooksId: book.googleBooksId }, + { $set: book }, + { upsert: true } + ); + + if (result.upsertedCount > 0) { + inserted++; + } else if (result.modifiedCount > 0) { + updated++; + } else if (result.matchedCount > 0) { + unchanged++; + } + } + + console.log("\n--- Sample Seed Summary ---"); + console.log(`Books in JSON: ${books.length}`); + console.log(`New books inserted: ${inserted}`); + console.log(`Existing books modified: ${updated}`); + console.log(`Existing books unchanged: ${unchanged}`); + } catch (error) { + console.error("Sample seed failed:", error); + process.exitCode = 1; + } finally { + await mongoose.disconnect(); + } +} + +seedSampleBooks(); diff --git a/server/test-data/sampleBooks.json b/server/test-data/sampleBooks.json new file mode 100644 index 0000000..dd5fe08 --- /dev/null +++ b/server/test-data/sampleBooks.json @@ -0,0 +1,570 @@ +[ + { + "googleBooksId": "nmXTy4FPfcwC", + "authors": [ + "J. K. Rowling" + ], + "coverURL": "http://books.google.com/books/content?id=nmXTy4FPfcwC&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "Witchcraft, wizardry - fiction.", + "genres": [ + "Juvenile Fiction" + ], + "googleCategories": [ + "Juvenile Fiction" + ], + "language": "en", + "pageCount": 260, + "publishedYear": 1999, + "subtitle": "", + "title": "Harry Potter and the Chamber of Secrets" + }, + { + "googleBooksId": "abYKXvCwEToC", + "authors": [ + "S. Gunelius" + ], + "coverURL": "http://books.google.com/books/content?id=abYKXvCwEToC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "The Harry Potter books are the bestselling books of all time. In this fascinating study, Susan Gunelius analyzes every aspect of the brand phenomenon that is Harry Potter. Delving into price wars, box office revenue, and brand values, amongst other things, this is the story of the most incredible brand success there has ever been.", + "genres": [ + "Business & Economics" + ], + "googleCategories": [ + "Business & Economics" + ], + "language": "en", + "pageCount": 214, + "publishedYear": 2008, + "subtitle": "The Story of a Global Business Phenomenon", + "title": "Harry Potter" + }, + { + "googleBooksId": "A0e_DAAAQBAJ", + "authors": [ + "Colin Manlove" + ], + "coverURL": "http://books.google.com/books/content?id=A0e_DAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "In this, the first book on English fantasy, Colin Manlove shows that for all its immense diversity, English Fantasy can best be understood in terms of its strong national character, rather than as an international genre. Showing its development from Beowulf to Blake, the author describes English Fantasy's modern growth through secondary world, metaphysical, emotive, comic, subversive and children's fantasy. In them all England has led the world, with authors as different as Chaucer, Lewis Carroll, J.R.R. Tolkien and Salman Rushdie.", + "genres": [ + "Fiction" + ], + "googleCategories": [ + "Fiction" + ], + "language": "en", + "pageCount": 229, + "publishedYear": 2016, + "subtitle": "", + "title": "The Fantasy Literature of England" + }, + { + "googleBooksId": "ORAPAAAAYAAJ", + "authors": [ + "Brander Matthews" + ], + "coverURL": "http://books.google.com/books/content?id=ORAPAAAAYAAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "Collection of imaginative short stories, blending elements of fantasy and reality, exploring themes of adventure and the peculiarities of human experience.", + "genres": [ + "Fantasy fiction, American" + ], + "googleCategories": [ + "Fantasy fiction, American" + ], + "language": "en", + "pageCount": 234, + "publishedYear": 1896, + "subtitle": "", + "title": "Tales of Fantasy and Fact" + }, + { + "googleBooksId": "hyfM4R8zbtkC", + "authors": [ + "Andre Nusselder" + ], + "coverURL": "http://books.google.com/books/content?id=hyfM4R8zbtkC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "Behind our computer screens we are all cyborgs: through fantasy we can understand our involvement in virtual worlds. Cyberspace is first and foremost a mental space. Therefore we need to take a psychological approach to understand our experiences in it. In Interface Fantasy, André Nusselder uses the core psychoanalytic notion of fantasy to examine our relationship to computers and digital technology. Lacanian psychoanalysis considers fantasy to be an indispensable “screen” for our interaction with the outside world; Nusselder argues that, at the mental level, computer screens and other human-computer interfaces incorporate this function of fantasy: they mediate the real and the virtual. Interface Fantasy illuminates our attachment to new media: why we love our devices; why we are fascinated by the images on their screens; and how it is possible that virtual images can provide physical pleasure. Nusselder puts such phenomena as avatars, role playing, cybersex, computer psychotherapy, and Internet addiction in the context of established psychoanalytic theory. The virtual identities we assume in virtual worlds, exemplified best by avatars consisting of both realistic and symbolic self-representations, illustrate the three orders that Lacan uses to analyze human reality: the imaginary, the symbolic, and the real. Nusselder analyzes our most intimate involvement with information technology—the almost invisible, affective aspects of technology that have the greatest impact on our lives. Interface Fantasy lays the foundation for a new way of thinking that acknowledges the pivotal role of the screen in the current world of information. And it gives an intelligible overview of basic Lacanian principles (including fantasy, language, the virtual, the real, embodiment, and enjoyment) that shows their enormous relevance for understanding the current state of media technology.", + "genres": [ + "Philosophy" + ], + "googleCategories": [ + "Philosophy" + ], + "language": "en", + "pageCount": 185, + "publishedYear": 2009, + "subtitle": "A Lacanian Cyborg Ontology", + "title": "Interface Fantasy" + }, + { + "googleBooksId": "FXuXz0SNjbEC", + "authors": [ + "Dan Flockhart" + ], + "coverURL": "http://books.google.com/books/content?id=FXuXz0SNjbEC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "Student create fantasy sports teams by picking real-life professional football players, and then follow their players' statistics and calculate their teams' total points using algebraic or nonalgebraic methods specifically designed to complement the math skills they are learning.", + "genres": [ + "Education" + ], + "googleCategories": [ + "Education" + ], + "language": "en", + "pageCount": 225, + "publishedYear": 2007, + "subtitle": "A Resource Guide for Teachers and Parents, Grades 5 and Up", + "title": "Fantasy Football and Mathematics" + }, + { + "googleBooksId": "XtY-AAAAYAAJ", + "authors": [ + "Thomas Bailey Aldrich" + ], + "coverURL": "http://books.google.com/books/content?id=XtY-AAAAYAAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "", + "genres": [ + "Hamlet (Legendary character)" + ], + "googleCategories": [ + "Hamlet (Legendary character)" + ], + "language": "en", + "pageCount": 104, + "publishedYear": 1877, + "subtitle": "And The Little Violinist", + "title": "A Midnight Fantasy" + }, + { + "googleBooksId": "iJFKAQAAMAAJ", + "authors": [ + "Walter Hull" + ], + "coverURL": "http://books.google.com/books/content?id=iJFKAQAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "", + "genres": [], + "googleCategories": [], + "language": "en", + "pageCount": 74, + "publishedYear": 1916, + "subtitle": "", + "title": "Poems of Fantasy" + }, + { + "googleBooksId": "TW3gAAAAMAAJ", + "authors": [ + "Diana Tixier Herald" + ], + "coverURL": "http://books.google.com/books/content?id=TW3gAAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "Presents annotated lists of fantasy titles, grouped by subgenre, with interest levels, and award indicators; and includes a discussion of fantasy, providing a historical overview and working definition of the genre.", + "genres": [ + "Language Arts & Disciplines" + ], + "googleCategories": [ + "Language Arts & Disciplines" + ], + "language": "en", + "pageCount": 284, + "publishedYear": 1999, + "subtitle": "A Guide to Reading Interests", + "title": "Fluent in Fantasy" + }, + { + "googleBooksId": "nZhZAAAAMAAJ", + "authors": [ + "Bruce Cassiday" + ], + "coverURL": "http://books.google.com/books/content?id=nZhZAAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "Perfect for reference or browsing, this volume includes some 80 authors and explores in excerpts of criticism (from books, essays, and reviews) their work and influence. Throughout, the coverage is international and the emphasis is on the many rare and insightful comments that are made on these authors who are increasingly accorded literary status and regarded in the critical mainstream.", + "genres": [ + "Literary Criticism" + ], + "googleCategories": [ + "Literary Criticism" + ], + "language": "en", + "pageCount": 710, + "publishedYear": 1993, + "subtitle": "", + "title": "Modern Mystery, Fantasy, and Science Fiction Writers" + }, + { + "googleBooksId": "ySeyAAAAIAAJ", + "authors": [ + "Frederick Erastus Pierce", + "Carl Frederick Schreiber" + ], + "coverURL": "http://books.google.com/books/content?id=ySeyAAAAIAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "", + "genres": [ + "English literature" + ], + "googleCategories": [ + "English literature" + ], + "language": "en", + "pageCount": 408, + "publishedYear": 1927, + "subtitle": "Selections from the German Romantic Authors, 1790-1830", + "title": "Fiction and Fantasy of German Romance" + }, + { + "googleBooksId": "1HgqAAAAYAAJ", + "authors": [ + "Robert Park Mills" + ], + "coverURL": "http://books.google.com/books/content?id=1HgqAAAAYAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "", + "genres": [ + "Fantasy fiction" + ], + "googleCategories": [ + "Fantasy fiction" + ], + "language": "en", + "pageCount": 264, + "publishedYear": 1955, + "subtitle": "", + "title": "The Best from Fantasy and Science Fiction" + }, + { + "googleBooksId": "kvZgAAAAMAAJ", + "authors": [ + "Graeme Harper" + ], + "coverURL": "http://books.google.com/books/content?id=kvZgAAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "This work assesses the role and character of comedy and fantasy in colonial societies from India to Ireland, Australia to Cuba, Africa to North America. It deals with both oral and written traditions, the history of comic and fantastic discourse, visual, theatrical and literary representations. This title answers such questions as \"What are the differing traditions of comic discourse in Western and non-Western societies?\", \"How is humour and fantasy culture specific?\", \"In what ways do local traditions of humour and fantasy adapt to imperial invasion?\", \"How have colonisers used humour to deal with unfamiliar and sometimes hostile conditions?\" and \"What is the relationship between the fantastic, the parodic and the satirical in the create of a sense of national character?\"", + "genres": [ + "History" + ], + "googleCategories": [ + "History" + ], + "language": "en", + "pageCount": 264, + "publishedYear": 2002, + "subtitle": "", + "title": "Comedy, Fantasy and Colonialism" + }, + { + "googleBooksId": "5VXD1Uz6JDwC", + "authors": [ + "Matilde Serao" + ], + "coverURL": "http://books.google.com/books/content?id=5VXD1Uz6JDwC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "", + "genres": [], + "googleCategories": [], + "language": "en", + "pageCount": 324, + "publishedYear": 1891, + "subtitle": "", + "title": "Fantasy, tr. by H. Harland & P. Sylvester" + }, + { + "googleBooksId": "S69kAAAAMAAJ", + "authors": [ + "Frank Northen Magill" + ], + "coverURL": "http://books.google.com/books/content?id=S69kAAAAMAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "", + "genres": [ + "Fantasy literature" + ], + "googleCategories": [ + "Fantasy literature" + ], + "language": "en", + "pageCount": 536, + "publishedYear": 1983, + "subtitle": "", + "title": "Survey of Modern Fantasy Literature" + }, + { + "googleBooksId": "DcURAAAAYAAJ", + "authors": [ + "Edgar Allan Poe" + ], + "coverURL": "http://books.google.com/books/content?id=DcURAAAAYAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "", + "genres": [ + "American prose literature" + ], + "googleCategories": [ + "American prose literature" + ], + "language": "en", + "pageCount": 230, + "publishedYear": 1904, + "subtitle": "", + "title": "The Works of Edgar Allan Poe: Tales-Fantasy and Extravaganza" + }, + { + "googleBooksId": "eoLzEAAAQBAJ", + "authors": [ + "Hazuki Minase" + ], + "coverURL": "http://books.google.com/books/content?id=eoLzEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "Azuri has gone berserk, and to make matters worse, she can’t tell friend from foe in her confusion! Fortunately, her eyesight seems to be failing her, so as long as Shogo can keep quiet, he should be able to escape her wrath... Read the next chapter of Final Fantasy Lost Stranger the same day as Japan!", + "genres": [ + "Comics & Graphic Novels" + ], + "googleCategories": [ + "Comics & Graphic Novels" + ], + "language": "en", + "pageCount": 30, + "publishedYear": 2024, + "subtitle": "", + "title": "Final Fantasy Lost Stranger, Chapter 56" + }, + { + "googleBooksId": "INMnAQAAIAAJ", + "authors": [ + "Donalda Margaret MacKinnon Sage" + ], + "coverURL": "http://books.google.com/books/content?id=INMnAQAAIAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "", + "genres": [ + "Canadian poetry" + ], + "googleCategories": [ + "Canadian poetry" + ], + "language": "en", + "pageCount": 16, + "publishedYear": 1928, + "subtitle": "", + "title": "Fragments of Fantasy" + }, + { + "googleBooksId": "26q4gjzbZRsC", + "authors": [ + "David Cassady" + ], + "coverURL": "http://books.google.com/books/content?id=26q4gjzbZRsC&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "BradyGAMES-Final Fantasy VIII Official Strategy Guide Features: Detailed Walkthroughs Boss Strategies Item & Magic Lists Complete Bestiary and over 450 Full-Color Maps! The ONLY Official Guide! Platform: PlayStation Genre: RPG", + "genres": [ + "Games & Activities" + ], + "googleCategories": [ + "Games & Activities" + ], + "language": "en", + "pageCount": 274, + "publishedYear": 1999, + "subtitle": "", + "title": "Final Fantasy VIII Official Strategy Guide" + }, + { + "googleBooksId": "r7tlEQAAQBAJ", + "authors": [ + "Gary Westfahl" + ], + "coverURL": "http://books.google.com/books/content?id=r7tlEQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "Science fiction represents a diverse community of writers and readers that spans the entire world. This collection provides a global tour of the genre, with essays about Latin American, European, African, Arabic, Indian, Japanese, and Chinese science fiction providing insights about how writers around the world have explored and reinvigorated the genre. Essays by prominent critics from five continents inform about particular cultures and analyze representative texts by authors such as Tobias S. Buckell, Lourenco Mutarelli, Stanislaw Lem, Masande Ntshanga, Tawfiq Al-Hakim, Anil Menon, and Cixin Liu. The contributing scholars examine how national experiences have shaped these narratives, which often differ strikingly from Anglo-American science fiction. An introductory survey of foreign-language science fiction in the United States endeavors to explain why so many of these texts have remained unknown to Anglophone readers. An extensive bibliography lists numerous resources for further study of science fiction from various parts of the world.", + "genres": [ + "Literary Criticism" + ], + "googleCategories": [ + "Literary Criticism" + ], + "language": "en", + "pageCount": 271, + "publishedYear": 2025, + "subtitle": "Essays on the International Imagination", + "title": "Global Science Fiction" + }, + { + "googleBooksId": "PbMdeizaCNcC", + "authors": [ + "Everett Franklin Bleiler", + "Richard Bleiler" + ], + "coverURL": "http://books.google.com/books/content?id=PbMdeizaCNcC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "Complementing Science-Fiction: The Early Years, which surveys science-fiction published in book form from its beginnings through 1930, the present volume covers all the science-fiction printed in the genre magazines--Amazing, Astounding, and Wonder, along with offshoots and minor magazines--from 1926 through 1936. This is the first time this historically important literary phenomenon, which stands behind the enormous modern development of science-fiction, has been studied thoroughly and accurately. The heart of the book is a series of descriptions of all 1,835 stories published during this period, plus bibliographic information. Supplementing this are many useful features: detailed histories of each of the magazines, an issue by issue roster of contents, a technical analysis of the art work, brief authors' biographies, poetry and letter indexes, a theme and motif index of approximately 30,0000 entries, and general indexes. Science-Fiction: The Gernsback Years is not only indispensable for reference librarians, collectors, readers, and scholars interested in science-fiction, it is also of importance to the study of popular culture during the Great Depression in the United States. Most of its data, which are largely based on rare and almost unobtainable sources, are not available elsewhere.", + "genres": [ + "Language Arts & Disciplines" + ], + "googleCategories": [ + "Language Arts & Disciplines" + ], + "language": "en", + "pageCount": 780, + "publishedYear": 1998, + "subtitle": "The Gernsback Years : a Complete Coverage of the Genre Magazines ... from 1926 Through 1936", + "title": "Science-fiction" + }, + { + "googleBooksId": "P8zW2AH6150C", + "authors": [ + "R. Reginald", + "Douglas Menville", + "Mary A. Burgess" + ], + "coverURL": "http://books.google.com/books/content?id=P8zW2AH6150C&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "Science Fiction and Fantasy Literature, A Checklist, 1700-1974, Volume one of Two, contains an Author Index, Title Index, Series Index, Awards Index, and the Ace and Belmont Doubles Index.", + "genres": [ + "Reference" + ], + "googleCategories": [ + "Reference" + ], + "language": "en", + "pageCount": 802, + "publishedYear": 2010, + "subtitle": "", + "title": "Science Fiction and Fantasy Literature" + }, + { + "googleBooksId": "rPS0EQAAQBAJ", + "authors": [ + "Dystopian Science Fiction " + ], + "coverURL": "http://books.google.com/books/content?id=rPS0EQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "The Shattered World The air in Saltwater Bay hung thick with the acrid stench of decay. Once a gleaming metropolis nestled in the heart of the Great Salt Lake, it had long since crumbled into ruin—a graveyard of steel and myth. The city's skeletal remains jutted out from the salt-crusted ground like the bones of a long-dead leviathan, each tower a silent sentinel of a forgotten age. Now, the settlement of Deadroot clung to the edge of the bay, a half-tumbled town of scavenged metal and patchwork shelters. Its people eked out a fractured existence, surviving on the remnants of a civilization that had collapsed long before their time. Here, in the shadow of the dead city, the legend of the Giants lived on. The old texts, brittle with age and dust, spoke of them as the children of fallen angels—creatures of immense power bound to the land through an unbreakable covenant. According to the myths, they demanded tribute in the form of human offerings, and if none were given, they would descend to destroy all in their path. The people of Deadroot, hardened by years of survival, had learned to fear the Giants not as metaphors or ghosts of ancient stories, but as real, looming threats. They told their children never to speak of them aloud, never to look toward the hills when the sky turned red with the evening sun, for it was said the Giants could see through any veil of fear.", + "genres": [ + "Juvenile Fiction" + ], + "googleCategories": [ + "Juvenile Fiction" + ], + "language": "en", + "pageCount": 89, + "publishedYear": null, + "subtitle": "A Dystopian Science Fiction Thriller", + "title": "The Book Of GIANTS" + }, + { + "googleBooksId": "1JsfAQAAIAAJ", + "authors": [ + "Harold Bloom" + ], + "coverURL": "http://books.google.com/books/content?id=1JsfAQAAIAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "Provides biographical, critical, and bibliographical information on the 13 most significant science fiction writers of the golden age.", + "genres": [ + "Juvenile Nonfiction" + ], + "googleCategories": [ + "Juvenile Nonfiction" + ], + "language": "en", + "pageCount": 224, + "publishedYear": 1995, + "subtitle": "", + "title": "Science Fiction Writers of the Golden Age" + }, + { + "googleBooksId": "1M0Y2RYqffIC", + "authors": [ + "Isaac Asimov", + "Groff Conklin" + ], + "coverURL": "http://books.google.com/books/content?id=1M0Y2RYqffIC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "Stories of 300 to 3,000 words from Asimov, Clarke, Heinlein, Kornbluth, Leiber, Sturgeon, et al. which have been selected to surprise, shock, and delight.", + "genres": [ + "Fiction" + ], + "googleCategories": [ + "Fiction" + ], + "language": "en", + "pageCount": 292, + "publishedYear": 1997, + "subtitle": "", + "title": "50 Short Science Fiction Tales" + }, + { + "googleBooksId": "FYtvHQAACAAJ", + "authors": [ + "David Pringle" + ], + "coverURL": "http://books.google.com/books/content?id=FYtvHQAACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", + "description": "Recommends one hundred science fiction novels and offers a brief summary of each work", + "genres": [ + "Fiction" + ], + "googleCategories": [ + "Fiction" + ], + "language": "en", + "pageCount": 224, + "publishedYear": 1997, + "subtitle": "The 100 Best Novels : an English-language Selection, 1949-1984", + "title": "Science Fiction" + }, + { + "googleBooksId": "yo4DAAAAQAAJ", + "authors": [ + "William Thomas Brande", + "George William Cox" + ], + "coverURL": "http://books.google.com/books/content?id=yo4DAAAAQAAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "", + "genres": [ + "Art" + ], + "googleCategories": [ + "Art" + ], + "language": "en", + "pageCount": 964, + "publishedYear": 1875, + "subtitle": "Comprising the Definitions and Derivations of the Scientific Terms in General Use, Together with the History and Descriptions of the Scientific Principles of Nearly Every Branch of Human Knowledge", + "title": "A Dictionary of Science, Literature, & Art" + }, + { + "googleBooksId": "z184AAAAIAAJ", + "authors": [ + "Lord Pimlico" + ], + "coverURL": "http://books.google.com/books/content?id=z184AAAAIAAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "", + "genres": [ + "Marriage" + ], + "googleCategories": [ + "Marriage" + ], + "language": "en", + "pageCount": 84, + "publishedYear": 1888, + "subtitle": "A Matrimonial Satire", + "title": "The Excellent Mystery" + }, + { + "googleBooksId": "lqsEAQAAIAAJ", + "authors": [ + "Edward Eggleston" + ], + "coverURL": "http://books.google.com/books/content?id=lqsEAQAAIAAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "The Mystery of Metropolisville centers on a tragic boating accident on \"Diamond Lake\" in \"Metropolisville,\" which lies near the \"Big Gun River\" in \"Wheat County.\" The plot is populated with various Western types, such as a seedy land speculator named Mr. Plausaby, his beautiful step-daughter Katy, a college student from back east who falls in love with Katy, Whiskey Jim the stage-coach driver, and a displaced Hoosier poet in a sod cabin", + "genres": [ + "Fiction" + ], + "googleCategories": [ + "Fiction" + ], + "language": "en", + "pageCount": 332, + "publishedYear": 1873, + "subtitle": "", + "title": "The Mystery of Metropolisville" + }, + { + "googleBooksId": "hN8_AQAAMAAJ", + "authors": [ + "Thomas Lake Harris" + ], + "coverURL": "http://books.google.com/books/content?id=hN8_AQAAMAAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api", + "description": "", + "genres": [ + "Women" + ], + "googleCategories": [ + "Women" + ], + "language": "en", + "pageCount": 132, + "publishedYear": 1886, + "subtitle": "Canto the First [-the Ninth]", + "title": "Star-flowers, a Poem of the Woman's Mystery" + } +]