/* * 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) */ $(document).ready(function () { var msg = i18nMsg; var douban = "https://api.douban.com"; var dbSearch = "/v2/book/search"; var db_get_info = "/v2/book/"; var db_get_info_by_isbn = "/v2/book/isbn/ "; var dbDone = false; var google = "https://www.googleapis.com/"; var gg_search = "/books/v1/volumes"; var gg_get_info = "/books/v1/volumes/"; var gg_done = false; var db_results = []; var gg_results = []; var show_flag = 0; String.prototype.replaceAll = function (s1, s2) {   return this.replace(new RegExp(s1, "gm"), s2); }; function gg_search_book (title) { title = title.replaceAll(/\s+/, "+"); var url = google + gg_search + "?q=" + title; $.ajax({ url, type: "GET", dataType: "jsonp", jsonp: "callback", success: function (data) { gg_results = data.items; }, complete: function () { gg_done = true; show_result(); } }); } function get_meta (source, id) { var meta; var tags; if (source === "google") { meta = gg_results[id]; $("#description").val(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 = db_results[id]; $("#description").val(meta.summary); $("#bookAuthor").val(meta.author.join(" & ")); $("#book_title").val(meta.title); var 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)); return; } } do_search = function (keyword) { show_flag = 0; $("#meta-info").text(msg.loading); var keyword = $("#keyword").val(); if (keyword) { db_search_book(keyword); gg_search_book(keyword); } } db_search_book = function (title) { var url = douban + dbSearch + '?q=' + title + '&fields=all&count=10'; $.ajax({ url: url, type: "GET", dataType: "jsonp", jsonp: 'callback', success: function (data) { db_results = data.books; }, error: function () { $('#meta-info').html('

'+ msg.search_error+'!

'); }, complete: function () { dbDone = true; show_result(); } }); } function show_result () { show_flag++; if (show_flag == 1) { $('#meta-info').html(''); } if (gg_done && dbDone) { if (!gg_results && !db_results) { $('#meta-info').html('

'+ msg.no_result +'

'); return; } } if (gg_done && gg_results.length > 0) { for (var i = 0; i < gg_results.length; i++) { var book = gg_results[i]; var book_cover; if (book.volumeInfo.imageLinks) { book_cover = book.volumeInfo.imageLinks.thumbnail; } else { book_cover = '/static/generic_cover.jpg'; } var book_html = '
  • ' + '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(book_html); } gg_done = false; } if (dbDone && db_results.length > 0) { for (var i = 0; i < db_results.length; i++) { var book = db_results[i]; var book_html = '
  • ' + 'Cover' + '
    ' + '

    ' + book.title + '

    ' + '

    ' + msg.author + ':' + book.author + '

    ' + '

    ' + msg.publisher + ':' + book.publisher + '

    ' + '

    ' + msg.description + ':' + book.summary + '

    ' + '

    ' + msg.source + ':Douban Books

    ' + '
    ' + "
  • "; $("#book-list").append(book_html); } dbDone = false; } } $("#do-search").click(function () { var keyword = $("#keyword").val(); if (keyword) { do_search(keyword); } }); $("#get_meta").click(function () { var book_title = $("#book_title").val(); if (book_title) { $("#keyword").val(book_title); do_search(book_title); } }); });