{"id":998,"date":"2012-03-13T12:38:54","date_gmt":"2012-03-13T04:38:54","guid":{"rendered":"http:\/\/www.freemindworld.com\/blog\/?p=998"},"modified":"2012-03-21T14:17:40","modified_gmt":"2012-03-21T06:17:40","slug":"120312_bambook_epub_support_with_calibre","status":"publish","type":"post","link":"https:\/\/www.freemindworld.com\/blog\/2012\/120312_bambook_epub_support_with_calibre.shtml","title":{"rendered":"\u5077\u6881\u6362\u67f1\u5347\u7ea7\u7248\uff1a\u7528calibre\u4e3aBambook\u63d0\u4f9bEPUB\u4e66\u5e93"},"content":{"rendered":"<p><em>\u672c\u6587\u5185\u5bb9\u5df2\u8fc7\u65f6\uff0c\u4e91\u68af0.98b\u7248\u672c\u5f00\u59cb\uff0c\u76f4\u63a5\u652f\u6301\u5411Bambook\u4e2d\u4f20\u9001\u539f\u751fEPUB\u683c\u5f0f\u6587\u4ef6\uff0c\u4e0d\u518d\u9700\u8981\u7528\u672c\u6587\u7684\u65b9\u6cd5\u53bb\u6298\u817e\u4e86\u3002<\/em><\/p>\n<p><a title=\"\u5077\u6881\u6362\u67f1\uff1a\u5728Bambook\u4e2d\u9605\u8bfb\u81ea\u6709epub\u7535\u5b50\u4e66\" href=\"http:\/\/www.freemindworld.com\/blog\/2012\/120225_bambook_epub_support.shtml\">\u4e0a\u4e00\u7bc7Blog<\/a>\u4e2d\u63d0\u4f9b\u4e86\u5728Bambook\u4e0a\u9605\u8bfbEPUB\u4e66\u7c4d\u4e00\u4e2a\u6298\u817e\u65b9\u6cd5\uff0c\u4f46\u90a3\u4e2a\u65b9\u6cd5\u663e\u7136\u5f88tricky\uff0c\u4f9d\u8d56\u73af\u5883\u591a\uff0c\u6210\u529f\u7387\u4f4e\uff0c\u8981\u4f20\u591a\u672c\u56fe\u4e66\u66f4\u590d\u6742\u3002\u8fd9\u6b21\u53c8\u6298\u817e\u51fa\u4e2a\u6539\u8fdb\u7248\u7684\u65b9\u6cd5\uff0c\u867d\u7136\u4e5f\u6bd4\u8f83\u590d\u6742\uff0c\u4f46\u6210\u529f\u7387\u6bd4\u4ee5\u524d\u9ad8\u591a\u4e86\uff0c\u800c\u4e14\u4e5f\u66f4\u76f4\u89c2\u597d\u7528\uff0c\u5206\u4eab\u7ed9\u5927\u5bb6\u3002\u539f\u7406\uff1a\u7528<a title=\"calibre\u7535\u5b50\u4e66\u7c4d\u7ba1\u7406\u8f6f\u4ef6\" href=\"http:\/\/www.calibre-ebook.com\" target=\"_blank\">calibre<\/a>\u63d0\u4f9b\u7684<a title=\"openpub\" href=\"http:\/\/code.google.com\/p\/openpub\/\">OPDS<\/a>\u670d\u52a1\uff0c\u628a\u8fd9\u4e2a\u670d\u52a1\u5668\u6dfb\u52a0\u5230Bambook\u7684\u7b2c\u4e09\u65b9\u4e66\u57ce\u5217\u8868\u4e2d\u3002\u7528\u5230\u7684\u8f6f\u4ef6\u548c\u6280\u672f\u8ddf\u4ee5\u524d\u5dee\u4e0d\u591a\uff1acalibre\uff0cDNS\u52ab\u6301\uff0cnginx\u53cd\u5411\u4ee3\u7406\u4e0erewrite\u3002<\/p>\n<p><strong>\u524d\u63d0\u6761\u4ef6\uff1a<\/strong>\u6709\u4e00\u53f0\u6b63\u5e38\u4e0a\u7f51\u7684\u7535\u8111A\uff0cBambook\u7528\u65e0\u7ebf\u4e0a\u7f51\u5e76\u5728\u4e0a\u7f51\u8fc7\u7a0b\u4e2d\u53ef\u4ee5\u8bbf\u95ee\u5230\u7535\u8111A\u3002\u6216\u8005\uff0c\u6709\u4e24\u53f0\u7535\u8111(\u53ef\u4ee5\u662f\u865a\u62df\u673a)A\u548cB\uff0cA\u7528\u6765\u505a\u670d\u52a1\u5668\uff0cB\u4e0a\u5b89\u88c5\u4e91\u68af\u7ed9Bambook\u5171\u4eab\u7f51\u7edc\uff0cAB\u4e4b\u95f4\u4e5f\u53ef\u4ee5\u76f8\u4e92\u8bbf\u95ee\u3002<\/p>\n<p>1. \u5728\u7535\u8111A\u4e0a\u4e0b\u8f7d\u5b89\u88c5nginx for Windows<\/p>\n<p><a title=\"nginx\u4e0b\u8f7d\" href=\"http:\/\/nginx.org\/download\/nginx-1.1.15.zip\">http:\/\/nginx.org\/download\/nginx-1.1.15.zip<\/a><\/p>\n<p>\u4e0b\u8f7d\u540e\uff0c\u89e3\u538b\u7f29\u5230C:\\\uff0c\u5f97\u5230C:\\nginx-1.1.15<\/p>\n<p>2. \u914d\u7f6enginx\uff0c\u5b9e\u73b0Web\u670d\u52a1\u548c\u53cd\u5411\u4ee3\u7406<\/p>\n<p>\u7528\u8bb0\u4e8b\u672c\u6253\u5f00C:\\nginx-1.1.15\\conf\\nginx.conf\uff0c\u628a\u5b83\u4fee\u6539\u6210\u4ee5\u4e0b\u5185\u5bb9\uff0c<strong>\u5176\u4e2d\u7684192.168.8.102\u4e3aA\u7535\u8111\u7684IP\u5730\u5740\uff0c\u8bf7\u81ea\u884c\u66ff\u6362\uff08\u4e0b\u540c\uff09<\/strong>\uff1a<\/p>\n<pre>worker_processes\u00a0 1;\r\nevents {\r\n\u00a0\u00a0\u00a0 worker_connections\u00a0 1024;\r\n}\r\n\r\nhttp {\r\n\u00a0\u00a0\u00a0 include\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mime.types;\r\n\u00a0\u00a0\u00a0 default_type\u00a0 application\/octet-stream;\r\n\u00a0\u00a0\u00a0 server {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 listen\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 80;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 server_name\u00a0\u00a0\u00a0\u00a0 opds.gk.sdo.com;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 location \/ {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 proxy_pass\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 http:\/\/$http_host$request_uri;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 proxy_redirect\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 off;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 proxy_set_header Host\u00a0\u00a0 $host;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 proxy_set_header\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 X-Real-IP\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $remote_addr;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 proxy_set_header\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 X-Forwarded-For $proxy_add_x_forwarded_for;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rewrite ^.*Default.aspx.*$ http:\/\/192.168.8.102:81\/1.xml redirect;\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 server {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 listen\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 81;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 location \/ {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 root\u00a0\u00a0 html;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 index\u00a0 index.html index.htm;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 sendfile\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 on;\r\n\u00a0\u00a0\u00a0 keepalive_timeout\u00a0 65;\r\n}<\/pre>\n<p>3. \u5728C:\\nginx-1.1.15\\html\u4e2d\u521b\u5efa1.xml\u6587\u4ef6\uff0c\u5185\u5bb9\u5982\u4e0b\uff0c<strong>\u4f7f\u7528UTF-8\u7f16\u7801<\/strong>\uff08\u5982\u679c\u7528\u8bb0\u4e8b\u672c\uff0c\u90a3\u5c31\u9700\u8981\u7528\u201c\u53e6\u5b58\u4e3a\u201d\u5bf9\u8bdd\u6846\uff0c\u628a\u4e0b\u9762\u7684\u201c\u7f16\u7801\u201d\u7531ANSI\u6539\u4e3aUTF-8\uff09\u3002<\/p>\n<pre><!--?xml version=\"1.0\" encoding=\"utf-8\"?-->&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;feed xmlns:opds=\"http:\/\/opds-spec.org\/2010\/catalog\" xmlns:opensearch=\"http:\/\/a9.com\/-\/spec\/opensearch\/1.1\/\" xmlns:dcterms=\"http:\/\/purl.org\/dc\/terms\/\" xmlns:thr=\"http:\/\/purl.org\/syndication\/thread\/1.0\" xmlns:dc=\"http:\/\/dublincore.org\/documents\/dcmi-namespace\/\" xmlns=\"http:\/\/www.w3.org\/2005\/Atom\"&gt;\r\n\u00a0 &lt;title type=\"text\"&gt;\u9526\u4e66OPDS\u6e90\u5217\u8868&lt;\/title&gt;\r\n\u00a0 &lt;id&gt;uuid:ea8a979d-7e28-4bf7-8d11-31aafb2ac66a;id=60&lt;\/id&gt;\r\n\u00a0 &lt;updated&gt;2012-03-11T15:49:25Z&lt;\/updated&gt;\r\n\u00a0 &lt;link rel=\"search\" type=\"application\/atom+xml\" href=\"http:\/\/opds.gk.sdo.com\/Search.aspx?ST=ALL&amp;amp;PageIndex=1&amp;amp;k={searchTerms}&amp;amp;{bbtk}\" \/&gt;\r\n\u00a0 &lt;entry&gt;\r\n\u00a0\u00a0\u00a0 &lt;id&gt;JiuYue&lt;\/id&gt;\r\n\u00a0\u00a0\u00a0 &lt;title type=\"text\"&gt;\u65b0\u534e\u4e66\u5e97\u4e5d\u6708\u7f51&lt;\/title&gt;\r\n\u00a0\u00a0\u00a0 &lt;updated&gt;2012-03-11T15:49:25Z&lt;\/updated&gt;\r\n\u00a0\u00a0\u00a0 &lt;link rel=\"alternate\" type=\"application\/atom+xml\" href=\"http:\/\/opds.9yue.com\/category.atom?site=BamBook\" \/&gt;\r\n\u00a0\u00a0\u00a0 &lt;content type=\"text\"&gt;\u65b0\u534e\u4e66\u5e97\u4e5d\u6708\u7f51&lt;\/content&gt;\r\n\u00a0 &lt;\/entry&gt;\r\n\u00a0 &lt;entry&gt;\r\n\u00a0\u00a0\u00a0 &lt;id&gt;http:\/\/m.gutenberg.org\/ebooks\/?format=opds&lt;\/id&gt;\r\n\u00a0\u00a0\u00a0 &lt;title type=\"text\"&gt;\u53e4\u817e\u5821\u8ba1\u5212&lt;\/title&gt;\r\n\u00a0\u00a0\u00a0 &lt;updated&gt;2012-03-11T15:49:25Z&lt;\/updated&gt;\r\n\u00a0\u00a0\u00a0 &lt;link rel=\"alternate\" type=\"application\/atom+xml\" href=\"http:\/\/m.gutenberg.org\/ebooks\/?format=opds\" \/&gt;\r\n\u00a0\u00a0\u00a0 &lt;content type=\"text\"&gt;\u82f1\u6587\u7535\u5b50\u4e66&lt;\/content&gt;\r\n\u00a0 &lt;\/entry&gt;\r\n\u00a0 &lt;entry&gt;\r\n\u00a0\u00a0\u00a0 &lt;id&gt;http:\/\/www.feedbooks.com\/site\/free_books.atom&lt;\/id&gt;\r\n\u00a0\u00a0\u00a0 &lt;title type=\"text\"&gt;feedbooks&lt;\/title&gt;\r\n\u00a0\u00a0\u00a0 &lt;updated&gt;2012-03-11T15:49:25Z&lt;\/updated&gt;\r\n\u00a0\u00a0\u00a0 &lt;link rel=\"alternate\" type=\"application\/atom+xml\" href=\"http:\/\/www.feedbooks.com\/site\/free_books.atom\" \/&gt;\r\n\u00a0\u00a0\u00a0 &lt;content type=\"text\"&gt;\u5728\u7ebf\u9605\u8bfb\u7f51\u7ebf\u56fe\u4e66&lt;\/content&gt;\r\n\u00a0 &lt;\/entry&gt;\r\n\u00a0 &lt;entry&gt;\r\n\u00a0\u00a0\u00a0 &lt;id&gt;http:\/\/www.feedbooks.com\/site\/free_books.atom&lt;\/id&gt;\r\n\u00a0\u00a0\u00a0 &lt;title type=\"text\"&gt;calibre&lt;\/title&gt;\r\n\u00a0\u00a0\u00a0 &lt;updated&gt;2012-03-11T15:49:25Z&lt;\/updated&gt;\r\n\u00a0\u00a0\u00a0 &lt;link rel=\"alternate\" type=\"application\/atom+xml\" href=\"http:\/\/192.168.8.102:8080\/opds\" \/&gt;\r\n\u00a0\u00a0\u00a0 &lt;content type=\"text\"&gt;calibre&lt;\/content&gt;\r\n\u00a0 &lt;\/entry&gt;\r\n&lt;\/feed&gt;<\/pre>\n<p>4. \u542f\u52a8nginx<\/p>\n<p>\u53cc\u51fb\u8fd0\u884cC:\\nginx-1.1.15\\nginx.exe\uff0c\u7528\u4efb\u52a1\u7ba1\u7406\u67e5\u770bnginx\u8fdb\u7a0b\uff0c\u786e\u8ba4\u542f\u52a8\u6210\u529f\u3002\u5982\u679c\u7528netstat -na\u68c0\u67e5\uff0c\u5e94\u8be5\u572880\u548c81\u7aef\u53e3\u4e0a\u6709LISTENING\u3002\u5982\u679c\u8bbf\u95eehttp:\/\/192.168.8.102:81\/1.xml\uff0c\u53ef\u4ee5\u770b\u5230\u4e0a\u9762\u6211\u4eec\u5efa\u7acb\u76841.xml\u6587\u4ef6\u3002<\/p>\n<p>5. \u5b89\u88c5Python 2.7<\/p>\n<p>\u4ece<a title=\"Python\u4e0b\u8f7d\u5730\u5740\" href=\"http:\/\/www.python.org\/getit\" target=\"_blank\">http:\/\/www.python.org\/getit<\/a>\u4e0b\u8f7dPython Windows Installer\u5e76\u5b89\u88c5\u5230C:\\Python27\u76ee\u5f55\u3002<\/p>\n<p>6. \u5199Python\u811a\u672c\uff0c\u5efa\u5047DNS\u3002\u628a\u4e0b\u9762\u7684\u5185\u5bb9\u5b58\u4e3aC:\\FakeDNS.py\u3002\u540c\u6837\uff0c<strong>\u5176\u4e2d\u7684192.168.8.102\u4e3aA\u7535\u8111\u7684IP\u5730\u5740\uff0c\u8bf7\u81ea\u884c\u66ff\u6362<\/strong>\u3002<\/p>\n<pre>#! \/usr\/bin\/env python\r\n# This code comes from\r\n# http:\/\/code.activestate.com\/recipes\/491264-mini-fake-dns-server\/\r\n# with some modifications\r\nimport socket\r\n\r\nclass DNSQuery:\r\n  def __init__(self, data):\r\n    self.data=data\r\n    self.domain=''\r\n    tipo = (ord(data[2]) &gt;&gt; 3) &amp; 15\r\n    if tipo == 0:\r\n      ini=12\r\n      lon=ord(data[ini])\r\n      while lon != 0:\r\n        self.domain+=data[ini+1:ini+lon+1]+'.'\r\n        ini+=lon+1\r\n        lon=ord(data[ini])\r\n\r\n  def respuesta(self, ip):\r\n    packet=''\r\n    if self.domain:\r\n      packet+=self.data[:2] + \"\\x81\\x80\"\r\n      packet+=self.data[4:6] + self.data[4:6] + '\\x00\\x00\\x00\\x00'\r\n      packet+=self.data[12:]\r\n      packet+='\\xc0\\x0c'\r\n      packet+='\\x00\\x01\\x00\\x01\\x00\\x00\\x00\\x3c\\x00\\x04'\r\n      packet+=str.join('',map(lambda x: chr(int(x)), ip.split('.')))\r\n    return packet\r\n\r\nif __name__ == '__main__':\r\n  udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\r\n  udps.bind(('',53))\r\n  try:\r\n    while 1:\r\n      data, addr = udps.recvfrom(1024)\r\n      p = DNSQuery(data)\r\n      if p.domain == 'opds.gk.sdo.com.':\r\n        ip = '192.168.8.102'\r\n      else:\r\n        ip = socket.gethostbyname(p.domain)\r\n      udps.sendto(p.respuesta(ip), addr)\r\n      print p.domain + \"=&gt;\" + ip\r\n  except KeyboardInterrupt:\r\n    udps.close()<\/pre>\n<p>7. \u542f\u52a8\u5047DNS<\/p>\n<p>\u5728\u547d\u884c\u63d0\u793a\u7b26\u4e2d\u8fd0\u884c\uff1a<\/p>\n<p><code>C:\\Python27\\python.exe C:\\FakeDNS.py<\/code><\/p>\n<p>\u542f\u52a8\u540e\u5e94\u8be5\u4f1a\u505c\u5728\u90a3\u91cc\uff0c\u6709\u8bf7\u6c42\u65f6\u4f1a\u6253\u5370\u51fa\u89e3\u6790\u7ed3\u679c\u3002\u53ef\u4ee5\u518d\u5f00\u4e00\u4e2a\u7a97\u53e3\u7528nslookup\u786e\u8ba4\u5b83\u7684\u5de5\u4f5c\u72b6\u6001\uff1a\u5bf9\u4e8e\u9664\u4e86opds.gk.sdo.com\u4ee5\u5916\u7684\u57df\u540d\uff0c\u90fd\u89e3\u6790\u4e3a\u6b63\u5e38IP\u5730\u5740\uff1b\u5bf9\u4e8eopds.gk.sdo.com.\uff0c\u89e3\u6790\u4e3a\u7535\u8111A\u7684IP\u5730\u5740\u3002<\/p>\n<p>8. Bambook\u8bbe\u7f6e<\/p>\n<p>\u8bbe\u7f6eBambook\u7684\u65e0\u7ebf\u8fde\u63a5\uff0c\u5176\u4e2dDNS\u670d\u52a1\u5668\u5730\u5740\u8bbe\u4e3a\u5047DNS\u6240\u5728\u7535\u8111A\u7684IP\u5730\u5740\u3002<\/p>\n<p>\u5982\u679c\u91c7\u7528\u4e24\u53f0\u7535\u8111\u7684\u65b9\u6848\uff0c\u5c31\u628a\u7535\u8111B\u7684\u7f51\u5361\u914d\u7f6e\u4e2d\u7684DNS\u6307\u5411\u7535\u8111A\u7684IP\u5730\u5740\u3002\u7136\u540e\u8fde\u63a5Bambook\u4e0e\u7535\u8111B\uff0c\u8ba9Bambook\u901a\u8fc7\u7535\u8111B\u4e0a\u7f51\u3002<\/p>\n<p>9. \u542f\u52a8calibre\u670d\u52a1\u5668<\/p>\n<p>\u8fd0\u884ccalibre\uff0c\u4e3b\u754c\u9762\u4e0b\u201c\u8fde\u63a5\/\u5171\u4eab\u201d-&gt;\u201c\u542f\u52a8\u8fde\u63a5\u670d\u52a1\u201d\uff0c\u8fd9\u65f6calibre\u5e94\u8be5\u4f1a\u57288080\u7aef\u53e3\u4e0a\u542f\u52a8http\u670d\u52a1\u5668\uff0c\u63d0\u4f9bOPDS\u670d\u52a1\uff0c\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95eehttp:\/\/127.0.0.1:8080\/opds\u6765\u9a8c\u8bc1\u3002\uff08\u8fd9\u662f\u5728\u9ed8\u8ba4\u914d\u7f6e\u7684\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u6709\u6539\u53d8\u8fc7\u914d\u7f6e\uff0c\u4e0a\u9762\u76841.xml\u505a\u76f8\u5e94\u6539\u52a8\u5373\u53ef\uff09<\/p>\n<p>\u4e00\u5207\u5c31\u7eea\uff0c\u5728Bambook\u4e0a\u6309\u201c\u627e\u4e66\u201d-&gt;1.\u8bbf\u95ee\u4e91\u4e2d\u4e66\u57ce-&gt;*.\u5207\u6362\u5230\u7b2c\u4e09\u65b9\u4e66\u5e93\uff0c\u6216\u8005\u6700\u65b0\u56fa\u4ef6\u4e0a\u4e66\u67b6\u4e3b\u83dc\u5355\u4e2d\u90093.\u66f4\u591a\u4e66\u57ce\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\u88ab\u6211\u4eec\u201c\u7be1\u6539\u201d\u8fc7\u7684\u7b2c\u4e09\u65b9\u4e66\u57ce\u5217\u8868\uff0c\u9009\u62e9\u5176\u4e2d\u76845. calibre\uff0c\u5c31\u53ef\u4ee5\u5c3d\u60c5\u7684\u4eab\u7528\u4f60\u672c\u5730calibre\u4e66\u5e93\u4e2d\u7684EPUB\u56fe\u4e66\u4e86\u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u8fd9\u4e2a\u65b9\u6cd5\u53ea\u652f\u6301Bambook\u4ececalibre\u4e66\u5e93\u4e2d\u4e0b\u8f7dEPUB\u683c\u5f0f\u7684\u56fe\u4e66\u3002\u5982\u679c\u4e66\u57ce\u5217\u8868\u83b7\u53d6\u4e0d\u6b63\u5e38\uff0c\u53ef\u80fd\u662fDNS\u7f13\u5b58\u7684\u95ee\u9898\uff0c\u91cd\u542fBambook\u540e\u518d\u8bd5\u4e00\u6b21\u3002<\/p>\n<p>calibre\u9664\u4e86\u81ea\u5e26\u7684OPDS\u8fde\u63a5\u670d\u52a1\uff0c\u4e5f\u53ef\u4ee5\u7528<a title=\"calibre2opds\" href=\"http:\/\/calibre2opds.com\/\" target=\"_blank\">calibre2opds<\/a>\u8fd9\u4e2a\u8f6f\u4ef6\u6765\u63d0\u4f9b\u66f4\u7f8e\u597d\u7684OPDS\u670d\u52a1\u5668\uff0c\u4ee5\u540e\u53e6\u6587\u4ecb\u7ecdcalibre2opds\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u5185\u5bb9\u5df2\u8fc7\u65f6\uff0c\u4e91\u68af0.98b\u7248\u672c\u5f00\u59cb\uff0c\u76f4\u63a5\u652f\u6301\u5411Bambook\u4e2d\u4f20\u9001\u539f\u751fEPU &hellip; <a href=\"https:\/\/www.freemindworld.com\/blog\/2012\/120312_bambook_epub_support_with_calibre.shtml\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[23,28,24,29,25,26,27],"class_list":["post-998","post","type-post","status-publish","format-standard","hentry","category-9","tag-bambook","tag-calibre","tag-eink","tag-epub","tag-25","tag-26","tag-27"],"_links":{"self":[{"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/posts\/998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/comments?post=998"}],"version-history":[{"count":11,"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/posts\/998\/revisions"}],"predecessor-version":[{"id":1009,"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/posts\/998\/revisions\/1009"}],"wp:attachment":[{"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/media?parent=998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/categories?post=998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freemindworld.com\/blog\/wp-json\/wp\/v2\/tags?post=998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}