mirror of
				https://github.com/searxng/searxng
				synced 2024-01-01 19:24:07 +01:00 
			
		
		
		
	[feat] engine: implementation of https://hex.pm
The package manager for the Erlang ecosystem Find packages. Co-authored-by: Bnyro <82752168+Bnyro@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									04271e555b
								
							
						
					
					
						commit
						46d7a8289b
					
				
					 3 changed files with 62 additions and 0 deletions
				
			
		| 
						 | 
					@ -172,3 +172,4 @@ features or generally made searx better:
 | 
				
			||||||
- Bernie Huang `<https://github.com/BernieHuang2008>`
 | 
					- Bernie Huang `<https://github.com/BernieHuang2008>`
 | 
				
			||||||
- Austin Olacsi `<https://github.com/Austin-Olacsi>`
 | 
					- Austin Olacsi `<https://github.com/Austin-Olacsi>`
 | 
				
			||||||
- @micsthepick
 | 
					- @micsthepick
 | 
				
			||||||
 | 
					- Daniel Kukula `<https://github.com/dkuku>`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										56
									
								
								searx/engines/hex.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								searx/engines/hex.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,56 @@
 | 
				
			||||||
 | 
					# SPDX-License-Identifier: AGPL-3.0-or-later
 | 
				
			||||||
 | 
					"""hex.pm"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from urllib.parse import urlencode
 | 
				
			||||||
 | 
					from dateutil import parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					about = {
 | 
				
			||||||
 | 
					    # pylint: disable=line-too-long
 | 
				
			||||||
 | 
					    "website": "https://hex.pm/",
 | 
				
			||||||
 | 
					    "wikidata_id": None,
 | 
				
			||||||
 | 
					    "official_api_documentation": "https://github.com/hexpm/hexpm/blob/main/lib/hexpm_web/controllers/api/package_controller.ex",
 | 
				
			||||||
 | 
					    "use_official_api": True,
 | 
				
			||||||
 | 
					    "require_api_key": False,
 | 
				
			||||||
 | 
					    "results": "JSON",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					categories = ["it", "packages"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# engine dependent config
 | 
				
			||||||
 | 
					paging = True
 | 
				
			||||||
 | 
					search_url = "https://hex.pm/api/packages/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def request(query: str, params):
 | 
				
			||||||
 | 
					    args = urlencode({"page": params["pageno"], "search": query})
 | 
				
			||||||
 | 
					    params["url"] = f"{search_url}?{args}"
 | 
				
			||||||
 | 
					    return params
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def response(resp):
 | 
				
			||||||
 | 
					    results = []
 | 
				
			||||||
 | 
					    for package in resp.json():
 | 
				
			||||||
 | 
					        meta = package["meta"]
 | 
				
			||||||
 | 
					        publishedDate = package.get("inserted_at")
 | 
				
			||||||
 | 
					        if publishedDate:
 | 
				
			||||||
 | 
					            publishedDate = parser.parse(publishedDate)
 | 
				
			||||||
 | 
					        tags = meta.get("licenses", [])
 | 
				
			||||||
 | 
					        results.append(
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                "template": "packages.html",
 | 
				
			||||||
 | 
					                "url": package["url"],
 | 
				
			||||||
 | 
					                "title": package["name"],
 | 
				
			||||||
 | 
					                "package_name": package["name"],
 | 
				
			||||||
 | 
					                "content": meta.get("description", ""),
 | 
				
			||||||
 | 
					                "version": meta.get("latest_version"),
 | 
				
			||||||
 | 
					                "maintainer": ", ".join(meta.get("maintainers", [])),
 | 
				
			||||||
 | 
					                "publishedDate": publishedDate,
 | 
				
			||||||
 | 
					                "tags": tags,
 | 
				
			||||||
 | 
					                "homepage": meta.get("links", {}).get("homepage"),
 | 
				
			||||||
 | 
					                "source_code_url": meta.get("links", {}).get("github"),
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return results
 | 
				
			||||||
| 
						 | 
					@ -926,6 +926,11 @@ engines:
 | 
				
			||||||
    shortcut: hn
 | 
					    shortcut: hn
 | 
				
			||||||
    disabled: true
 | 
					    disabled: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: hex
 | 
				
			||||||
 | 
					    engine: hex
 | 
				
			||||||
 | 
					    shortcut: hex
 | 
				
			||||||
 | 
					    disabled: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - name: hoogle
 | 
					  - name: hoogle
 | 
				
			||||||
    engine: xpath
 | 
					    engine: xpath
 | 
				
			||||||
    search_url: https://hoogle.haskell.org/?hoogle={query}
 | 
					    search_url: https://hoogle.haskell.org/?hoogle={query}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue