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 | ||||
|     shortcut: us | ||||
| 
 | ||||
|   - name: yandex music | ||||
|     engine: yandex_music | ||||
|     shortcut: ydm | ||||
|     disabled: true | ||||
|     # https://yandex.com/support/music/access.html | ||||
|     inactive: true | ||||
| 
 | ||||
|   - name: yahoo | ||||
|     engine: yahoo | ||||
|     shortcut: yh | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Xinos
						Xinos