mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-03 19:17:02 -05:00 
			
		
		
		
	legimi store
This commit is contained in:
		
							parent
							
								
									91e57ed680
								
							
						
					
					
						commit
						2cb241b205
					
				@ -1272,6 +1272,16 @@ class StoreKoboStore(StoreBase):
 | 
			
		||||
    headquarters = 'CA'
 | 
			
		||||
    formats = ['EPUB']
 | 
			
		||||
 | 
			
		||||
class StoreLegimiStore(StoreBase):
 | 
			
		||||
    name = 'Legimi'
 | 
			
		||||
    author = u'Tomasz Długosz'
 | 
			
		||||
    description = u'Tanie oraz darmowe ebooki, egazety i blogi w formacie EPUB, wprost na Twój e-czytnik, iPhone, iPad, Android i komputer'
 | 
			
		||||
    actual_plugin = 'calibre.gui2.store.legimi_plugin:LegimiStore'
 | 
			
		||||
    
 | 
			
		||||
    drm_free_only = False
 | 
			
		||||
    headquarters = 'PL'
 | 
			
		||||
    formats = ['EPUB']
 | 
			
		||||
 | 
			
		||||
class StoreManyBooksStore(StoreBase):
 | 
			
		||||
    name = 'ManyBooks'
 | 
			
		||||
    description = u'Public domain and creative commons works from many sources.'
 | 
			
		||||
@ -1393,6 +1403,7 @@ plugins += [
 | 
			
		||||
    StoreGoogleBooksStore,
 | 
			
		||||
    StoreGutenbergStore,
 | 
			
		||||
    StoreKoboStore,
 | 
			
		||||
    StoreLegimiStore,
 | 
			
		||||
    StoreManyBooksStore,
 | 
			
		||||
    StoreMobileReadStore,
 | 
			
		||||
    StoreNextoStore,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										75
									
								
								src/calibre/gui2/store/legimi_plugin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/calibre/gui2/store/legimi_plugin.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,75 @@
 | 
			
		||||
# -*- 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 LegimiStore(BasicStoreConfig, StorePlugin):
 | 
			
		||||
 | 
			
		||||
    def open(self, parent=None, detail_item=None, external=False):
 | 
			
		||||
        
 | 
			
		||||
        url = 'http://www.legimi.com/pl/ebooks/?price=any'
 | 
			
		||||
        detail_url = None
 | 
			
		||||
 | 
			
		||||
        if detail_item:
 | 
			
		||||
            detail_url = detail_item
 | 
			
		||||
 | 
			
		||||
        if external or self.config.get('open_external', False):
 | 
			
		||||
            open_url(QUrl(url_slash_cleaner(detail_url if detail_url 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://www.legimi.com/pl/ebooks/?price=any&lang=pl&search=' + urllib.quote_plus(query.encode('utf-8')) + '&sort=relevance'
 | 
			
		||||
        
 | 
			
		||||
        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[@class="list"]/ul/li'):
 | 
			
		||||
                if counter <= 0:
 | 
			
		||||
                    break
 | 
			
		||||
                
 | 
			
		||||
                id = ''.join(data.xpath('.//div[@class="item_cover_container"]/a[1]/@href'))
 | 
			
		||||
                if not id:
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                cover_url = ''.join(data.xpath('.//div[@class="item_cover_container"]/a/img/@src'))
 | 
			
		||||
                title = ''.join(data.xpath('.//div[@class="item_entries"]/h2/a/text()'))
 | 
			
		||||
                author = ''.join(data.xpath('.//div[@class="item_entries"]/span[1]/a/text()'))
 | 
			
		||||
                price = ''.join(data.xpath('.//div[@class="item_entries"]/span[3]/text()'))
 | 
			
		||||
                price = re.sub(r'[^0-9,]*','',price) + ' zł'
 | 
			
		||||
 | 
			
		||||
                counter -= 1
 | 
			
		||||
                
 | 
			
		||||
                s = SearchResult()
 | 
			
		||||
                s.cover_url = 'http://www.legimi.com/' + cover_url
 | 
			
		||||
                s.title = title.strip()
 | 
			
		||||
                s.author = author.strip()
 | 
			
		||||
                s.price = price
 | 
			
		||||
                s.detail_item = 'http://www.legimi.com/' + id.strip()
 | 
			
		||||
                s.drm = SearchResult.DRM_LOCKED
 | 
			
		||||
                s.formats = 'EPUB'
 | 
			
		||||
                
 | 
			
		||||
                yield s
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user