diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 6ecf68e7de..51501388a8 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -1190,6 +1190,15 @@ class StoreDieselEbooksStore(StoreBase): formats = ['EPUB', 'PDF'] affiliate = True +class StoreEbookNLStore(StoreBase): + name = 'eBook.nl' + description = u'De eBookwinkel van Nederland' + actual_plugin = 'calibre.gui2.store.stores.ebook_nl_plugin:EBookNLStore' + + headquarters = 'NL' + formats = ['EPUB'] + affiliate = True + class StoreEbookscomStore(StoreBase): name = 'eBooks.com' description = u'Sells books in multiple electronic formats in all categories. Technical infrastructure is cutting edge, robust and scalable, with servers in the US and Europe.' @@ -1447,6 +1456,7 @@ plugins += [ StoreBeamEBooksDEStore, StoreBeWriteStore, StoreDieselEbooksStore, + StoreEbookNLStore, StoreEbookscomStore, StoreEBookShoppeUKStore, StoreEPubBuyDEStore, diff --git a/src/calibre/gui2/store/stores/ebook_nl_plugin.py b/src/calibre/gui2/store/stores/ebook_nl_plugin.py new file mode 100644 index 0000000000..e18ca7de72 --- /dev/null +++ b/src/calibre/gui2/store/stores/ebook_nl_plugin.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- + +from __future__ import (unicode_literals, division, absolute_import, print_function) + +__license__ = 'GPL 3' +__copyright__ = '2011, John Schember ' +__docformat__ = 'restructuredtext en' + +import urllib2 +from contextlib import closing + +from lxml import html + +from PyQt4.Qt import QUrl + +from calibre import browser +from calibre.gui2 import open_url +from calibre.gui2.store import StorePlugin +from calibre.gui2.store.basic_config import BasicStoreConfig +from calibre.gui2.store.search_result import SearchResult +from calibre.gui2.store.web_store_dialog import WebStoreDialog + +class EBookNLStore(BasicStoreConfig, StorePlugin): + + def open(self, parent=None, detail_item=None, external=False): + url = 'http://ad.zanox.com/ppc/?19015168C29310186T' + url_details = ('http://ad.zanox.com/ppc/?19016028C1098154549T&ULP=[[' + 'http://www.ebook.nl/store/{0}]]') + + if external or self.config.get('open_external', False): + if detail_item: + url = url_details.format(detail_item) + open_url(QUrl(url)) + else: + detail_url = None + if detail_item: + detail_url = url_details.format(detail_item) + d = WebStoreDialog(self.gui, url, parent, detail_url) + d.setWindowTitle(self.name) + d.set_tags(self.config.get('tags', '')) + d.exec_() + + def search(self, query, max_results=10, timeout=60): + url = ('http://www.ebook.nl/store/advanced_search_result.php?keywords=' + + urllib2.quote(query)) + br = browser() + + counter = max_results + with closing(br.open(url, timeout=timeout)) as f: + doc = html.fromstring(f.read()) + for data in doc.xpath('//table[contains(@class, "productListing")]/tr'): + if counter <= 0: + break + + details = data.xpath('./td/div[@class="prodImage"]/a') + if not details: + continue + details = details[0] + id = ''.join(details.xpath('./@href')).strip() + id = id[id.rfind('/')+1:] + i = id.rfind('?') + if i > 0: + id = id[:i] + if not id: + continue + cover_url = 'http://www.ebook.nl/store/' + ''.join(details.xpath('./img/@src')) + title = ''.join(details.xpath('./img/@title')).strip() + author = ''.join(data.xpath('./td/div[@class="prodTitle"]/h3/a/text()')).strip() + price = ''.join(data.xpath('./td/div[@class="prodTitle"]/b/text()')) + pdf = data.xpath('boolean(./td/div[@class="prodTitle"]/' + 'p[contains(text(), "Bestandsformaat: Pdf")])') + epub = data.xpath('boolean(./td/div[@class="prodTitle"]/' + 'p[contains(text(), "Bestandsformaat: ePub")])') + nodrm = data.xpath('boolean(./td/div[@class="prodTitle"]/' + 'p[contains(text(), "zonder DRM") or' + ' contains(text(), "watermerk")])') + counter -= 1 + + s = SearchResult() + s.cover_url = cover_url + s.title = title.strip() + s.author = author.strip() + s.price = price + if nodrm: + s.drm = SearchResult.DRM_UNLOCKED + else: + s.drm = SearchResult.DRM_LOCKED + s.detail_item = id + formats = [] + if epub: + formats.append('ePub') + if pdf: + formats.append('PDF') + s.formats = ','.join(formats) + + yield s