diff --git a/cps/static/js/get_meta.js b/cps/static/js/get_meta.js new file mode 100644 index 00000000..2cec1252 --- /dev/null +++ b/cps/static/js/get_meta.js @@ -0,0 +1,180 @@ +/* + * 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); + } + }); + +}); \ No newline at end of file diff --git a/cps/templates/book_edit.html b/cps/templates/book_edit.html index 19abf315..86b7281e 100644 --- a/cps/templates/book_edit.html +++ b/cps/templates/book_edit.html @@ -104,17 +104,56 @@ {{_('view book after edit')}} + {{_('Get Metadata')}} {{_('Back')}} {% endif %} + {% endblock %} {% block js %} + +<<<<<<< HEAD +======= + {% endblock %} {% block header %} diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index c4c7af27..43ea4912 100644 Binary files a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo and b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo differ diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 1dca04ac..1bc17782 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -325,7 +325,7 @@ msgstr "发送测试邮件时发生错误: %(res)s" #: cps/web.py:1816 msgid "E-Mail settings updated" -msgstr "" +msgstr "E-Mail 设置已更新" #: cps/web.py:1817 msgid "Edit mail settings" @@ -357,11 +357,11 @@ msgstr "编辑元数据" #: cps/web.py:2162 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" -msgstr "" +msgstr "不能上传后缀为 \"%s\" 的文件到此服务器" #: cps/web.py:2168 msgid "File to be uploaded must have an extension" -msgstr "" +msgstr "要上传的文件必须有一个后缀" #: cps/web.py:2185 #, python-format