mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-10-31 10:37:00 -04:00 
			
		
		
		
	...
This commit is contained in:
		
						commit
						44b4fe25de
					
				| @ -6,6 +6,7 @@ __license__ = 'GPL 3' | |||||||
| __copyright__ = '2011, John Schember <john@nachtimwald.com>' | __copyright__ = '2011, John Schember <john@nachtimwald.com>' | ||||||
| __docformat__ = 'restructuredtext en' | __docformat__ = 'restructuredtext en' | ||||||
| 
 | 
 | ||||||
|  | import re | ||||||
| import urllib | import urllib | ||||||
| from contextlib import closing | from contextlib import closing | ||||||
| 
 | 
 | ||||||
| @ -25,6 +26,9 @@ class OReillyStore(BasicStoreConfig, StorePlugin): | |||||||
|     def open(self, parent=None, detail_item=None, external=False): |     def open(self, parent=None, detail_item=None, external=False): | ||||||
|         url = 'http://oreilly.com/ebooks/' |         url = 'http://oreilly.com/ebooks/' | ||||||
| 
 | 
 | ||||||
|  |         if detail_item: | ||||||
|  |             detail_item = 'https://epoch.oreilly.com/shop/cart.orm?prod=%s.EBOOK&p=CALIBRE' % 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_item if detail_item else url))) |             open_url(QUrl(url_slash_cleaner(detail_item if detail_item else url))) | ||||||
|         else: |         else: | ||||||
| @ -45,9 +49,11 @@ class OReillyStore(BasicStoreConfig, StorePlugin): | |||||||
|                 if counter <= 0: |                 if counter <= 0: | ||||||
|                     break |                     break | ||||||
| 
 | 
 | ||||||
|                 id = ''.join(data.xpath('.//div[@class="title"]/a/@href')) |                 full_id = ''.join(data.xpath('.//div[@class="title"]/a/@href')) | ||||||
|                 if not id: |                 mo = re.search('\d+', full_id) | ||||||
|  |                 if not mo: | ||||||
|                     continue |                     continue | ||||||
|  |                 id = mo.group() | ||||||
| 
 | 
 | ||||||
|                 cover_url = ''.join(data.xpath('.//div[@class="bigCover"]//img/@src')) |                 cover_url = ''.join(data.xpath('.//div[@class="bigCover"]//img/@src')) | ||||||
| 
 | 
 | ||||||
| @ -55,6 +61,18 @@ class OReillyStore(BasicStoreConfig, StorePlugin): | |||||||
|                 author = ''.join(data.xpath('.//div[@class="author"]/text()')) |                 author = ''.join(data.xpath('.//div[@class="author"]/text()')) | ||||||
|                 author = author.split('By ')[-1].strip() |                 author = author.split('By ')[-1].strip() | ||||||
| 
 | 
 | ||||||
|  |                 # Get the detail here because we need to get the ebook id for the detail_item. | ||||||
|  |                 with closing(br.open(full_id, timeout=timeout)) as nf: | ||||||
|  |                     idoc = html.fromstring(nf.read()) | ||||||
|  |                      | ||||||
|  |                     price = ''.join(idoc.xpath('(//span[@class="price"])[1]/span//text()')) | ||||||
|  |                     formats = ', '.join(idoc.xpath('//div[@class="ebook_formats"]//a/text()')) | ||||||
|  |                      | ||||||
|  |                     eid = ''.join(idoc.xpath('(//a[@class="product_buy_link" and contains(@href, ".EBOOK")])[1]/@href')).strip() | ||||||
|  |                     mo = re.search('\d+', eid) | ||||||
|  |                     if mo: | ||||||
|  |                         id = mo.group() | ||||||
|  | 
 | ||||||
|                 counter -= 1 |                 counter -= 1 | ||||||
|                  |                  | ||||||
|                 s = SearchResult() |                 s = SearchResult() | ||||||
| @ -62,17 +80,8 @@ class OReillyStore(BasicStoreConfig, StorePlugin): | |||||||
|                 s.title = title.strip() |                 s.title = title.strip() | ||||||
|                 s.author = author.strip() |                 s.author = author.strip() | ||||||
|                 s.detail_item = id.strip() |                 s.detail_item = id.strip() | ||||||
|  |                 s.price = price.strip() | ||||||
|                 s.drm = SearchResult.DRM_UNLOCKED |                 s.drm = SearchResult.DRM_UNLOCKED | ||||||
|  |                 s.formats = formats.upper() | ||||||
|                  |                  | ||||||
|                 yield s |                 yield s | ||||||
|                  |  | ||||||
|     def get_details(self, search_result, timeout): |  | ||||||
|         br = browser() |  | ||||||
|         with closing(br.open(search_result.detail_item, timeout=timeout)) as nf: |  | ||||||
|             doc = html.fromstring(nf.read()) |  | ||||||
| 
 |  | ||||||
|             search_result.price = ''.join(doc.xpath('(//span[@class="price"])[1]/span//text()')).strip() |  | ||||||
|             search_result.formats = ', '.join(doc.xpath('//div[@class="ebook_formats"]//a/text()')).upper() |  | ||||||
|              |  | ||||||
|         return True |  | ||||||
| 
 |  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user