/* * Get Metadata from Douban Books api and Google Books api * Created by idalin * Google Books api document: https://developers.google.com/books/docs/v1/using * Douban Books api document: https://developers.douban.com/wiki/?title=book_v2 (Chinese Only) */ /* global i18nMsg, tinymce */ var dbResults = []; var ggResults = []; $(function () { var msg = i18nMsg; var douban = "https://api.douban.com"; var dbSearch = "/v2/book/search"; // var dbGetInfo = "/v2/book/"; // var db_get_info_by_isbn = "/v2/book/isbn/ "; var dbDone = false; var google = "https://www.googleapis.com/"; var ggSearch = "/books/v1/volumes"; // var gg_get_info = "/books/v1/volumes/"; var ggDone = false; var showFlag = 0; function showResult () { var book; var i; var bookHtml; showFlag++; if (showFlag === 1) { $("#meta-info").html(""); } if (ggDone && dbDone) { if (!ggResults && !dbResults) { $("#meta-info").html("

"+ msg.no_result +"

"); return; } } if (ggDone && ggResults.length > 0) { for (i = 0; i < ggResults.length; i++) { book = ggResults[i]; var bookCover; if (book.volumeInfo.imageLinks) { bookCover = book.volumeInfo.imageLinks.thumbnail; } else { bookCover = "/static/generic_cover.jpg"; } bookHtml = "
  • " + "\"Cover\"" + "
    " + "

    " + book.volumeInfo.title + "

    " + "

    "+ msg.author +":" + book.volumeInfo.authors + "

    " + "

    "+ msg.publisher + ":" + book.volumeInfo.publisher + "

    " + "

    "+ msg.description + ":" + book.volumeInfo.description + "

    " + "

    "+ msg.source + ":Google Books

    " + "
    " + "
  • "; $("#book-list").append(bookHtml); } ggDone = false; } if (dbDone && dbResults.length > 0) { for (i = 0; i < dbResults.length; i++) { book = dbResults[i]; bookHtml = "
  • " + "\"Cover\"" + "
    " + "

    " + book.title + "

    " + "

    " + msg.author + ":" + book.author + "

    " + "

    " + msg.publisher + ":" + book.publisher + "

    " + "

    " + msg.description + ":" + book.summary + "

    " + "

    " + msg.source + ":Douban Books

    " + "
    " + "
  • "; $("#book-list").append(bookHtml); } dbDone = false; } } function ggSearchBook (title) { $.ajax({ url: google + ggSearch + "?q=" + title.replace(/\s+/gm, "+"), type: "GET", dataType: "jsonp", jsonp: "callback", success: function success(data) { ggResults = data.items; }, complete: function complete() { ggDone = true; showResult(); } }); } function dbSearchBook (title) { $.ajax({ url: douban + dbSearch + "?q=" + title + "&fields=all&count=10", type: "GET", dataType: "jsonp", jsonp: "callback", success: function success(data) { dbResults = data.books; }, error: function error() { $("#meta-info").html("

    "+ msg.search_error+"!

    "); }, complete: function complete() { dbDone = true; showResult(); } }); } function doSearch (keyword) { showFlag = 0; $("#meta-info").text(msg.loading); // var keyword = $("#keyword").val(); if (keyword) { dbSearchBook(keyword); ggSearchBook(keyword); } } $("#do-search").click(function () { var keyword = $("#keyword").val(); if (keyword) { doSearch(keyword); } }); $("#get_meta").click(function () { var bookTitle = $("#book_title").val(); if (bookTitle) { $("#keyword").val(bookTitle); doSearch(bookTitle); } }); }); // eslint-disable-next-line no-unused-vars function getMeta (source, id) { var meta; var tags; if (source === "google") { meta = ggResults[id]; tinymce.get("description").setContent(meta.volumeInfo.description); $("#bookAuthor").val(meta.volumeInfo.authors.join(" & ")); $("#book_title").val(meta.volumeInfo.title); if (meta.volumeInfo.categories) { tags = meta.volumeInfo.categories.join(","); $("#tags").val(tags); } if (meta.volumeInfo.averageRating) { $("#rating").val(Math.round(meta.volumeInfo.averageRating)); } return; } if (source === "douban") { meta = dbResults[id]; tinymce.get("description").setContent(meta.summary); $("#bookAuthor").val(meta.author.join(" & ")); $("#book_title").val(meta.title); tags = ""; for (var i = 0; i < meta.tags.length; i++) { tags = tags + meta.tags[i].title + ","; } $("#tags").val(tags); $("#rating").val(Math.round(meta.rating.average / 2)); } }