mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-10-31 10:37:00 -04:00 
			
		
		
		
	Get Books: Add a plugin for the Koobe Polish book store
This commit is contained in:
		
						commit
						83c306de07
					
				| @ -1468,6 +1468,17 @@ class StoreKoboStore(StoreBase): | |||||||
|     formats = ['EPUB'] |     formats = ['EPUB'] | ||||||
|     affiliate = True |     affiliate = True | ||||||
| 
 | 
 | ||||||
|  | class StoreKoobeStore(StoreBase): | ||||||
|  |     name = 'Koobe' | ||||||
|  |     author = u'Tomasz Długosz' | ||||||
|  |     description = u'Księgarnia internetowa oferuje ebooki (książki elektroniczne) w postaci plików epub, mobi i pdf.' | ||||||
|  |     actual_plugin = 'calibre.gui2.store.stores.koobe_plugin:KoobeStore' | ||||||
|  | 
 | ||||||
|  |     drm_free_only = True | ||||||
|  |     headquarters = 'PL' | ||||||
|  |     formats = ['EPUB', 'MOBI', 'PDF'] | ||||||
|  |     affiliate = True | ||||||
|  | 
 | ||||||
| class StoreLegimiStore(StoreBase): | class StoreLegimiStore(StoreBase): | ||||||
|     name = 'Legimi' |     name = 'Legimi' | ||||||
|     author = u'Tomasz Długosz' |     author = u'Tomasz Długosz' | ||||||
| @ -1650,6 +1661,7 @@ class StoreWoblinkStore(StoreBase): | |||||||
| 
 | 
 | ||||||
|     headquarters = 'PL' |     headquarters = 'PL' | ||||||
|     formats = ['EPUB', 'MOBI', 'PDF', 'WOBLINK'] |     formats = ['EPUB', 'MOBI', 'PDF', 'WOBLINK'] | ||||||
|  |     affiliate = True | ||||||
| 
 | 
 | ||||||
| class XinXiiStore(StoreBase): | class XinXiiStore(StoreBase): | ||||||
|     name = 'XinXii' |     name = 'XinXii' | ||||||
| @ -1687,6 +1699,7 @@ plugins += [ | |||||||
|     StoreGoogleBooksStore, |     StoreGoogleBooksStore, | ||||||
|     StoreGutenbergStore, |     StoreGutenbergStore, | ||||||
|     StoreKoboStore, |     StoreKoboStore, | ||||||
|  |     StoreKoobeStore, | ||||||
|     StoreLegimiStore, |     StoreLegimiStore, | ||||||
|     StoreLibreDEStore, |     StoreLibreDEStore, | ||||||
|     StoreLitResStore, |     StoreLitResStore, | ||||||
|  | |||||||
							
								
								
									
										83
									
								
								src/calibre/gui2/store/stores/koobe_plugin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								src/calibre/gui2/store/stores/koobe_plugin.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,83 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | 
 | ||||||
|  | from __future__ import (division, absolute_import, print_function) | ||||||
|  | store_version = 1 # Needed for dynamic plugin loading | ||||||
|  | 
 | ||||||
|  | __license__ = 'GPL 3' | ||||||
|  | __copyright__ = '2013, Tomasz Długosz <tomek3d@gmail.com>' | ||||||
|  | __docformat__ = 'restructuredtext en' | ||||||
|  | 
 | ||||||
|  | import re | ||||||
|  | import urllib | ||||||
|  | from base64 import b64encode | ||||||
|  | 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 KoobeStore(BasicStoreConfig, StorePlugin): | ||||||
|  | 
 | ||||||
|  |     def open(self, parent=None, detail_item=None, external=False): | ||||||
|  |         aff_root = 'https://www.a4b-tracking.com/pl/stat-click-text-link/15/58/' | ||||||
|  |         url = 'http://www.koobe.pl/' | ||||||
|  | 
 | ||||||
|  |         aff_url = aff_root + str(b64encode(url)) | ||||||
|  | 
 | ||||||
|  |         detail_url = None | ||||||
|  |         if detail_item: | ||||||
|  |             detail_url = aff_root + str(b64encode(detail_item)) | ||||||
|  | 
 | ||||||
|  |         if external or self.config.get('open_external', False): | ||||||
|  |             open_url(QUrl(url_slash_cleaner(detail_url if detail_url else aff_url))) | ||||||
|  |         else: | ||||||
|  |             d = WebStoreDialog(self.gui, url, parent, detail_url if detail_url else aff_url) | ||||||
|  |             d.setWindowTitle(self.name) | ||||||
|  |             d.set_tags(self.config.get('tags', '')) | ||||||
|  |             d.exec_() | ||||||
|  | 
 | ||||||
|  |     def search(self, query, max_results=10, timeout=60): | ||||||
|  | 
 | ||||||
|  |         br = browser() | ||||||
|  |         page=1 | ||||||
|  | 
 | ||||||
|  |         counter = max_results | ||||||
|  |         while counter: | ||||||
|  |             with closing(br.open('http://www.koobe.pl/s,p,' + str(page) + ',szukaj/fraza:' + urllib.quote(query), timeout=timeout)) as f: | ||||||
|  |                 doc = html.fromstring(f.read().decode('utf-8')) | ||||||
|  |                 for data in doc.xpath('//div[@class="seach_result"]/div[@class="result"]'): | ||||||
|  |                     if counter <= 0: | ||||||
|  |                         break | ||||||
|  | 
 | ||||||
|  |                     id = ''.join(data.xpath('.//div[@class="cover"]/a/@href')) | ||||||
|  |                     if not id: | ||||||
|  |                         continue | ||||||
|  | 
 | ||||||
|  |                     cover_url = ''.join(data.xpath('.//div[@class="cover"]/a/img/@src')) | ||||||
|  |                     price = ''.join(data.xpath('.//span[@class="current_price"]/text()')) | ||||||
|  |                     title = ''.join(data.xpath('.//h2[@class="title"]/a/text()')) | ||||||
|  |                     author = ''.join(data.xpath('.//h3[@class="book_author"]/a/text()')) | ||||||
|  |                     formats = ', '.join(data.xpath('.//div[@class="formats"]/div/div/@title')) | ||||||
|  | 
 | ||||||
|  |                     counter -= 1 | ||||||
|  | 
 | ||||||
|  |                     s = SearchResult() | ||||||
|  |                     s.cover_url =  'http://koobe.pl/' + cover_url | ||||||
|  |                     s.title = title.strip() | ||||||
|  |                     s.author = author.strip() | ||||||
|  |                     s.price = price | ||||||
|  |                     s.detail_item = 'http://koobe.pl' + id[1:] | ||||||
|  |                     s.formats = formats.upper() | ||||||
|  |                     s.drm = SearchResult.DRM_UNLOCKED | ||||||
|  | 
 | ||||||
|  |                     yield s | ||||||
|  |                 if not doc.xpath('//div[@class="site_bottom"]//a[@class="right"]'): | ||||||
|  |                     break | ||||||
|  |             page+=1 | ||||||
| @ -1,14 +1,15 @@ | |||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| 
 | 
 | ||||||
| from __future__ import (unicode_literals, division, absolute_import, print_function) | from __future__ import (unicode_literals, division, absolute_import, print_function) | ||||||
| store_version = 1 # Needed for dynamic plugin loading | store_version = 2 # Needed for dynamic plugin loading | ||||||
| 
 | 
 | ||||||
| __license__ = 'GPL 3' | __license__ = 'GPL 3' | ||||||
| __copyright__ = '2011-2012, Tomasz Długosz <tomek3d@gmail.com>' | __copyright__ = '2011-2013, Tomasz Długosz <tomek3d@gmail.com>' | ||||||
| __docformat__ = 'restructuredtext en' | __docformat__ = 'restructuredtext en' | ||||||
| 
 | 
 | ||||||
| import re | import re | ||||||
| import urllib | import urllib | ||||||
|  | from base64 import b64encode | ||||||
| from contextlib import closing | from contextlib import closing | ||||||
| 
 | 
 | ||||||
| from lxml import html | from lxml import html | ||||||
| @ -25,17 +26,19 @@ from calibre.gui2.store.web_store_dialog import WebStoreDialog | |||||||
| class WoblinkStore(BasicStoreConfig, StorePlugin): | class WoblinkStore(BasicStoreConfig, StorePlugin): | ||||||
| 
 | 
 | ||||||
|     def open(self, parent=None, detail_item=None, external=False): |     def open(self, parent=None, detail_item=None, external=False): | ||||||
| 
 |         aff_root = 'https://www.a4b-tracking.com/pl/stat-click-text-link/16/58/' | ||||||
|         url = 'http://woblink.com/publication' |         url = 'http://woblink.com/publication' | ||||||
|  | 
 | ||||||
|  |         aff_url = aff_root + str(b64encode(url)) | ||||||
|         detail_url = None |         detail_url = None | ||||||
| 
 | 
 | ||||||
|         if detail_item: |         if detail_item: | ||||||
|             detail_url = 'http://woblink.com' + detail_item |             detail_url = aff_root + str(b64encode('http://woblink.com' + detail_item)) | ||||||
| 
 | 
 | ||||||
|         if external or self.config.get('open_external', False): |         if external or self.config.get('open_external', False): | ||||||
|             open_url(QUrl(url_slash_cleaner(detail_url if detail_url else url))) |             open_url(QUrl(url_slash_cleaner(detail_url if detail_url else aff_url))) | ||||||
|         else: |         else: | ||||||
|             d = WebStoreDialog(self.gui, url, parent, detail_url) |             d = WebStoreDialog(self.gui, url, parent, detail_url if detail_url else aff_url) | ||||||
|             d.setWindowTitle(self.name) |             d.setWindowTitle(self.name) | ||||||
|             d.set_tags(self.config.get('tags', '')) |             d.set_tags(self.config.get('tags', '')) | ||||||
|             d.exec_() |             d.exec_() | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user