/* * 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 = i18n_msg; var douban = "https://api.douban.com"; var db_search = '/v2/book/search'; var db_get_info = '/v2/book/'; var db_get_info_by_isbn = '/v2/book/isbn/ '; var db_done = 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);   }; gg_search_book = function (title) { title = title.replaceAll(/\s+/, '+'); var url = google + gg_search + '?q=' + title; $.ajax({ url: url, type: "GET", dataType: "jsonp", jsonp: 'callback', success: function (data) { gg_results = data.items; }, complete: function () { gg_done = true; show_result(); } }); } get_meta = function (source, id) { var meta; 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) { var 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 + db_search + '?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 () { db_done = true; show_result(); } }); } show_result = function () { show_flag++; if (show_flag == 1) { $('#meta-info').html(''); } if (gg_done && db_done) { 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 (db_done && 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); } db_done = 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); } }); });