mirror of
				https://github.com/searxng/searxng.git
				synced 2025-10-26 08:12:30 -04:00 
			
		
		
		
	This patch was generated by black [1]::
    make format.python
[1] https://github.com/psf/black
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
		
	
			
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # SPDX-License-Identifier: AGPL-3.0-or-later
 | |
| """
 | |
|  Rumble (Videos)
 | |
| """
 | |
| from urllib.parse import urlencode
 | |
| from lxml import html
 | |
| from datetime import datetime
 | |
| 
 | |
| # about
 | |
| from searx.utils import extract_text
 | |
| 
 | |
| about = {
 | |
|     "website": 'https://rumble.com/',
 | |
|     "wikidata_id": 'Q104765127',
 | |
|     "official_api_documentation": 'https://help.rumble.com/',
 | |
|     "use_official_api": False,
 | |
|     "require_api_key": False,
 | |
|     "results": 'HTML',
 | |
| }
 | |
| 
 | |
| # engine dependent config
 | |
| categories = ['videos']
 | |
| paging = True
 | |
| 
 | |
| # search-url
 | |
| base_url = 'https://rumble.com'
 | |
| # https://rumble.com/search/video?q=searx&page=3
 | |
| search_url = base_url + '/search/video?{query}&page={pageno}'
 | |
| 
 | |
| url_xpath = './/a[@class="video-item--a"]/@href'
 | |
| thumbnail_xpath = './/img[@class="video-item--img"]/@src'
 | |
| title_xpath = './/h3[@class="video-item--title"]'
 | |
| published_date = './/time[@class="video-item--meta video-item--time"]/@datetime'
 | |
| earned_xpath = './/span[@class="video-item--meta video-item--earned"]/@data-value'
 | |
| views_xpath = './/span[@class="video-item--meta video-item--views"]/@data-value'
 | |
| rumbles_xpath = './/span[@class="video-item--meta video-item--rumbles"]/@data-value'
 | |
| author_xpath = './/div[@class="ellipsis-1"]'
 | |
| length_xpath = './/span[@class="video-item--duration"]/@data-value'
 | |
| 
 | |
| 
 | |
| def request(query, params):
 | |
|     params['url'] = search_url.format(pageno=params['pageno'], query=urlencode({'q': query}))
 | |
|     return params
 | |
| 
 | |
| 
 | |
| def response(resp):
 | |
|     results = []
 | |
|     dom = html.fromstring(resp.text)
 | |
|     results_dom = dom.xpath('//li[contains(@class, "video-listing-entry")]')
 | |
| 
 | |
|     if not results_dom:
 | |
|         return []
 | |
| 
 | |
|     for result_dom in results_dom:
 | |
|         url = base_url + extract_text(result_dom.xpath(url_xpath))
 | |
|         thumbnail = extract_text(result_dom.xpath(thumbnail_xpath))
 | |
|         title = extract_text(result_dom.xpath(title_xpath))
 | |
|         p_date = extract_text(result_dom.xpath(published_date))
 | |
|         # fix offset date for line 644 webapp.py check
 | |
|         fixed_date = datetime.strptime(p_date, '%Y-%m-%dT%H:%M:%S%z')
 | |
|         earned = extract_text(result_dom.xpath(earned_xpath))
 | |
|         views = extract_text(result_dom.xpath(views_xpath))
 | |
|         rumbles = extract_text(result_dom.xpath(rumbles_xpath))
 | |
|         author = extract_text(result_dom.xpath(author_xpath))
 | |
|         length = extract_text(result_dom.xpath(length_xpath))
 | |
|         if earned:
 | |
|             content = f"{views} views - {rumbles} rumbles - ${earned}"
 | |
|         else:
 | |
|             content = f"{views} views - {rumbles} rumbles"
 | |
| 
 | |
|         results.append(
 | |
|             {
 | |
|                 'url': url,
 | |
|                 'title': title,
 | |
|                 'content': content,
 | |
|                 'author': author,
 | |
|                 'length': length,
 | |
|                 'template': 'videos.html',
 | |
|                 'publishedDate': fixed_date,
 | |
|                 'thumbnail': thumbnail,
 | |
|             }
 | |
|         )
 | |
|     return results
 |