Homework 05: searx.py
This commit is contained in:
parent
0ea62d069c
commit
25099bf998
1 changed files with 49 additions and 4 deletions
51
homework05/searx.py
Normal file → Executable file
51
homework05/searx.py
Normal file → Executable file
|
|
@ -34,7 +34,10 @@ def searx_query(query: str, url: str=URL) -> list[dict]:
|
||||||
>>> searx_query('Python', 'https://yld.me/iB1T') # doctest: +ELLIPSIS
|
>>> searx_query('Python', 'https://yld.me/iB1T') # doctest: +ELLIPSIS
|
||||||
[{'url': 'https://www.python.org/', 'title': 'Welcome to Python.org', ...}]
|
[{'url': 'https://www.python.org/', 'title': 'Welcome to Python.org', ...}]
|
||||||
'''
|
'''
|
||||||
pass
|
|
||||||
|
parameters = {'q': query, 'format': 'json'}
|
||||||
|
response = requests.get(url, params=parameters)
|
||||||
|
return response.json()['results']
|
||||||
|
|
||||||
def print_results(results: list[dict], limit: int=LIMIT, orderby: str=ORDERBY) -> None:
|
def print_results(results: list[dict], limit: int=LIMIT, orderby: str=ORDERBY) -> None:
|
||||||
''' Print results of SearX query.
|
''' Print results of SearX query.
|
||||||
|
|
@ -44,7 +47,14 @@ def print_results(results: list[dict], limit: int=LIMIT, orderby: str=ORDERBY) -
|
||||||
https://www.python.org/
|
https://www.python.org/
|
||||||
...
|
...
|
||||||
'''
|
'''
|
||||||
pass
|
|
||||||
|
sorted_results = sorted(results, key=lambda x: x[orderby], reverse=(orderby=='score'))
|
||||||
|
|
||||||
|
for index, result in enumerate(sorted_results[:limit], 1):
|
||||||
|
print(f"{index:>4}.\t{result['title']} [{result['score']:0.2f}]")
|
||||||
|
print(f"\t{result['url']}")
|
||||||
|
if index < len(sorted_results[:limit]): # only prints new line between items
|
||||||
|
print()
|
||||||
|
|
||||||
# Main Execution
|
# Main Execution
|
||||||
|
|
||||||
|
|
@ -56,7 +66,42 @@ def main(arguments=sys.argv[1:]) -> None:
|
||||||
https://www.python.org/
|
https://www.python.org/
|
||||||
...
|
...
|
||||||
'''
|
'''
|
||||||
pass
|
|
||||||
|
# Set variables equal to the constants (initially)
|
||||||
|
url = URL
|
||||||
|
limit = LIMIT
|
||||||
|
orderby = ORDERBY
|
||||||
|
|
||||||
|
search_terms = []
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
while i < len(arguments):
|
||||||
|
arg = arguments[i]
|
||||||
|
|
||||||
|
if arg == '-u':
|
||||||
|
url = arguments[i+1]
|
||||||
|
i += 2
|
||||||
|
elif arg == '-n':
|
||||||
|
limit = int(arguments[i+1]) # convert the argument to int before setting limit
|
||||||
|
i += 2
|
||||||
|
elif arg == '-o':
|
||||||
|
orderby = arguments[i+1]
|
||||||
|
i += 2
|
||||||
|
elif arg == '-h':
|
||||||
|
usage(0)
|
||||||
|
elif arg.startswith('-'): # handles case where user enters an invalid command
|
||||||
|
usage(1)
|
||||||
|
else: # if it's not a command and it's not invalid, I can assume it's a search term
|
||||||
|
search_terms.append(arg)
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
# Display the usage message if the user didn't enter a search term
|
||||||
|
if not search_terms:
|
||||||
|
usage(1)
|
||||||
|
|
||||||
|
query = ' '.join(search_terms)
|
||||||
|
results = searx_query(query, url)
|
||||||
|
print_results(results, limit, orderby)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue