mirror of
				https://github.com/searxng/searxng
				synced 2024-01-01 19:24:07 +01:00 
			
		
		
		
	[feat] engine: implementation of yandex music
Access to music is limited to a few countries: - https://yandex.com/support/music/access.html
This commit is contained in:
		
							parent
							
								
									fb36a06acd
								
							
						
					
					
						commit
						3c42252c78
					
				
					 2 changed files with 70 additions and 0 deletions
				
			
		
							
								
								
									
										63
									
								
								searx/engines/yandex_music.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								searx/engines/yandex_music.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | ||||||
|  | # SPDX-License-Identifier: AGPL-3.0-or-later | ||||||
|  | # lint: pylint | ||||||
|  | """Yandex Music | ||||||
|  | 
 | ||||||
|  | .. _Countries where Yandex.Music is available: https://yandex.com/support/music/access.html | ||||||
|  | 
 | ||||||
|  | .. hint:: | ||||||
|  | 
 | ||||||
|  |    Access to music is limited to a few countries: `Countries where Yandex.Music | ||||||
|  |    is available`_ | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | from urllib.parse import urlencode | ||||||
|  | 
 | ||||||
|  | # about | ||||||
|  | about = { | ||||||
|  |     "website": 'https://music.yandex.ru', | ||||||
|  |     "wikidata_id": 'Q4537983', | ||||||
|  |     "official_api_documentation": None, | ||||||
|  |     "use_official_api": False, | ||||||
|  |     "require_api_key": False, | ||||||
|  |     "results": 'JSON', | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # engine dependent config | ||||||
|  | categories = ['music'] | ||||||
|  | paging = True | ||||||
|  | 
 | ||||||
|  | # search-url | ||||||
|  | url = 'https://music.yandex.ru' | ||||||
|  | search_url = url + '/handlers/music-search.jsx' | ||||||
|  | 
 | ||||||
|  | # do search-request | ||||||
|  | def request(query, params): | ||||||
|  |     args = {'text': query, 'page': params['pageno'] - 1} | ||||||
|  |     params['url'] = search_url + '?' + urlencode(args) | ||||||
|  | 
 | ||||||
|  |     return params | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # get response from search-request | ||||||
|  | def response(resp): | ||||||
|  |     results = [] | ||||||
|  |     search_res = resp.json() | ||||||
|  | 
 | ||||||
|  |     # parse results | ||||||
|  |     for result in search_res.get('tracks', {}).get('items', []): | ||||||
|  |         if result['type'] == 'music': | ||||||
|  |             track_id = result['id'] | ||||||
|  |             album_id = result['albums'][0]['id'] | ||||||
|  | 
 | ||||||
|  |             # append result | ||||||
|  |             results.append( | ||||||
|  |                 { | ||||||
|  |                     'url': f'{url}/album/{album_id}/track/{track_id}', | ||||||
|  |                     'title': result['title'], | ||||||
|  |                     'content': f"[{result['albums'][0]['title']}] {result['artists'][0]['name']} - {result['title']}", | ||||||
|  |                     'iframe_src': f'{url}/iframe/track/{track_id}/{album_id}', | ||||||
|  |                 } | ||||||
|  |             ) | ||||||
|  | 
 | ||||||
|  |     return results | ||||||
|  | @ -1708,6 +1708,13 @@ engines: | ||||||
|     engine: unsplash |     engine: unsplash | ||||||
|     shortcut: us |     shortcut: us | ||||||
| 
 | 
 | ||||||
|  |   - name: yandex music | ||||||
|  |     engine: yandex_music | ||||||
|  |     shortcut: ydm | ||||||
|  |     disabled: true | ||||||
|  |     # https://yandex.com/support/music/access.html | ||||||
|  |     inactive: true | ||||||
|  | 
 | ||||||
|   - name: yahoo |   - name: yahoo | ||||||
|     engine: yahoo |     engine: yahoo | ||||||
|     shortcut: yh |     shortcut: yh | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Xinos
						Xinos