mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-04 03:27:00 -05:00 
			
		
		
		
	Add Virtualo to Get Books stores
This commit is contained in:
		
						commit
						289fa23f5f
					
				@ -1346,6 +1346,16 @@ class StoreSmashwordsStore(StoreBase):
 | 
				
			|||||||
    headquarters = 'US'
 | 
					    headquarters = 'US'
 | 
				
			||||||
    formats = ['EPUB', 'HTML', 'LRF', 'MOBI', 'PDB', 'RTF', 'TXT']
 | 
					    formats = ['EPUB', 'HTML', 'LRF', 'MOBI', 'PDB', 'RTF', 'TXT']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class StoreVirtualoStore(StoreBase):
 | 
				
			||||||
 | 
					    name = 'Virtualo'
 | 
				
			||||||
 | 
					    author = u'Tomasz Długosz'
 | 
				
			||||||
 | 
					    description = u'Księgarnia internetowa, która oferuje bezpieczny i szeroki dostęp do książek w formie cyfrowej.'
 | 
				
			||||||
 | 
					    actual_plugin = 'calibre.gui2.store.virtualo_plugin:VirtualoStore'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    drm_free_only = False
 | 
				
			||||||
 | 
					    headquarters = 'PL'
 | 
				
			||||||
 | 
					    formats = ['EPUB', 'PDF']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class StoreWaterstonesUKStore(StoreBase):
 | 
					class StoreWaterstonesUKStore(StoreBase):
 | 
				
			||||||
    name = 'Waterstones UK'
 | 
					    name = 'Waterstones UK'
 | 
				
			||||||
    author = 'Charles Haley'
 | 
					    author = 'Charles Haley'
 | 
				
			||||||
@ -1376,7 +1386,7 @@ class StoreWizardsTowerBooksStore(StoreBase):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class StoreWoblinkStore(StoreBase):
 | 
					class StoreWoblinkStore(StoreBase):
 | 
				
			||||||
    name = 'Woblink'
 | 
					    name = 'Woblink'
 | 
				
			||||||
    author = 'Tomasz Długosz'
 | 
					    author = u'Tomasz Długosz'
 | 
				
			||||||
    description = u'Czytanie zdarza się wszędzie!'
 | 
					    description = u'Czytanie zdarza się wszędzie!'
 | 
				
			||||||
    actual_plugin = 'calibre.gui2.store.woblink_plugin:WoblinkStore'
 | 
					    actual_plugin = 'calibre.gui2.store.woblink_plugin:WoblinkStore'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1411,6 +1421,7 @@ plugins += [
 | 
				
			|||||||
    StoreOReillyStore,
 | 
					    StoreOReillyStore,
 | 
				
			||||||
    StorePragmaticBookshelfStore,
 | 
					    StorePragmaticBookshelfStore,
 | 
				
			||||||
    StoreSmashwordsStore,
 | 
					    StoreSmashwordsStore,
 | 
				
			||||||
 | 
					    StoreVirtualoStore,
 | 
				
			||||||
    StoreWaterstonesUKStore,
 | 
					    StoreWaterstonesUKStore,
 | 
				
			||||||
    StoreWeightlessBooksStore,
 | 
					    StoreWeightlessBooksStore,
 | 
				
			||||||
    StoreWizardsTowerBooksStore,
 | 
					    StoreWizardsTowerBooksStore,
 | 
				
			||||||
 | 
				
			|||||||
@ -130,7 +130,7 @@ class Matches(QAbstractItemModel):
 | 
				
			|||||||
        elif col == 1:
 | 
					        elif col == 1:
 | 
				
			||||||
            text = match.name
 | 
					            text = match.name
 | 
				
			||||||
        elif col == 2:
 | 
					        elif col == 2:
 | 
				
			||||||
            text = 'b' if getattr(match, 'drm', True) else 'a'
 | 
					            text = 'a' if getattr(match, 'drm_free_only', True) else 'b'
 | 
				
			||||||
        elif col == 3:
 | 
					        elif col == 3:
 | 
				
			||||||
            text = getattr(match, 'headquarters', '')
 | 
					            text = getattr(match, 'headquarters', '')
 | 
				
			||||||
        return text
 | 
					        return text
 | 
				
			||||||
@ -240,5 +240,3 @@ class SearchFilter(SearchQueryParser):
 | 
				
			|||||||
                    import traceback
 | 
					                    import traceback
 | 
				
			||||||
                    traceback.print_exc()
 | 
					                    traceback.print_exc()
 | 
				
			||||||
        return matches
 | 
					        return matches
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										72
									
								
								src/calibre/gui2/store/virtualo_plugin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/calibre/gui2/store/virtualo_plugin.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from __future__ import (unicode_literals, division, absolute_import, print_function)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__license__ = 'GPL 3'
 | 
				
			||||||
 | 
					__copyright__ = '2011, Tomasz Długosz <tomek3d@gmail.com>'
 | 
				
			||||||
 | 
					__docformat__ = 'restructuredtext en'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					import urllib
 | 
				
			||||||
 | 
					from contextlib import closing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from lxml import html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from PyQt4.Qt import QUrl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from calibre import browser, url_slash_cleaner
 | 
				
			||||||
 | 
					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 VirtualoStore(BasicStoreConfig, StorePlugin):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def open(self, parent=None, detail_item=None, external=False):
 | 
				
			||||||
 | 
					        url = 'http://virtualo.pl/ebook/c2/'
 | 
				
			||||||
 | 
					        detail_url = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if external or self.config.get('open_external', False):
 | 
				
			||||||
 | 
					            open_url(QUrl(url_slash_cleaner(detail_item if detail_item else url)))
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            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://virtualo.pl/c2/?q=' + urllib.quote(query.encode('utf-8'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        br = browser()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        counter = max_results
 | 
				
			||||||
 | 
					        with closing(br.open(url, timeout=timeout)) as f:
 | 
				
			||||||
 | 
					            doc = html.fromstring(f.read())
 | 
				
			||||||
 | 
					            for data in doc.xpath('//div[@id="product_list"]/div/div[@class="column"]'):
 | 
				
			||||||
 | 
					                if counter <= 0:
 | 
				
			||||||
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                id = ''.join(data.xpath('.//table/tr[2]/td[1]/a/@href'))
 | 
				
			||||||
 | 
					                if not id:
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                price = ''.join(data.xpath('.//span[@class="price"]/text() | .//span[@class="price abbr"]/text()'))
 | 
				
			||||||
 | 
					                cover_url = ''.join(data.xpath('.//table/tr[2]/td[1]/a/img/@src'))
 | 
				
			||||||
 | 
					                title = ''.join(data.xpath('.//div[@class="title"]/a/text()'))
 | 
				
			||||||
 | 
					                author = ', '.join(data.xpath('.//div[@class="authors"]/a/text()'))
 | 
				
			||||||
 | 
					                formats = ', '.join(data.xpath('.//span[@class="format"]/a/text()'))
 | 
				
			||||||
 | 
					                formats = re.sub(r'(, )?ONLINE(, )?', '', formats)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                counter -= 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                s = SearchResult()
 | 
				
			||||||
 | 
					                s.cover_url = cover_url
 | 
				
			||||||
 | 
					                s.title = title.strip() + ' ' + formats
 | 
				
			||||||
 | 
					                s.author = author.strip()
 | 
				
			||||||
 | 
					                s.price = price + ' zł'
 | 
				
			||||||
 | 
					                s.detail_item = 'http://virtualo.pl' + id.strip()
 | 
				
			||||||
 | 
					                s.formats = formats.upper().strip()
 | 
				
			||||||
 | 
					                s.drm = SearchResult.DRM_UNKNOWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                yield s
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user