Homework 05: searx.py
This commit is contained in:
parent
0ea62d069c
commit
25099bf998
1 changed files with 49 additions and 4 deletions
53
homework05/searx.py
Normal file → Executable file
53
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
|
||||
[{'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:
|
||||
''' 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/
|
||||
...
|
||||
'''
|
||||
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
|
||||
|
||||
|
|
@ -56,9 +66,44 @@ def main(arguments=sys.argv[1:]) -> None:
|
|||
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__':
|
||||
main()
|
||||
|
||||
# vim: set sts=4 sw=4 ts=8 expandtab ft=python:
|
||||
# vim: set sts=4 sw=4 ts=8 expandtab ft=python:
|
||||
Loading…
Reference in a new issue