Skip to content

Commit d80b5c2

Browse files
author
Plamen Milenkov
committed
Day 45
1 parent fc8e328 commit d80b5c2

File tree

3 files changed

+111
-7
lines changed

3 files changed

+111
-7
lines changed
Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
1+
from typing import List
2+
13
import requests
4+
from collections import namedtuple
5+
6+
Article = namedtuple('Article', 'category, id,'
7+
'url, title, description')
28

3-
def search(keyword):
9+
def search(keyword: str) -> List[Article]:
410
print(f'Looking for {keyword}...')
511

612
url = f'http://search.talkpython.fm/api/search?q={keyword}'
7-
response = requests.get(url)
13+
try:
14+
response = requests.get(url)
15+
except requests.exceptions.ConnectionError:
16+
print('Cannot connect. Please try again later.')
17+
return []
818
response.raise_for_status()
919

10-
return response.json()['results']
20+
articles = []
21+
for article in response.json()['results']:
22+
articles.append(Article(**article))
23+
return articles

days/43-45-search-api/my_search_api_43/my_search_api

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,85 @@
33
[2018-11-01 11:37:47.640360] INFO: Main: Taking user input...
44
[2018-11-01 11:37:50.107731] INFO: Main: Searching for test
55
[2018-11-01 11:37:51.136118] INFO: Main: End of execution
6+
[2018-11-01 11:59:26.059671] INFO: Main: Taking user input...
7+
[2018-11-01 11:59:27.966544] INFO: Main: Searching for tst
8+
[2018-11-01 11:59:28.353173] INFO: Main: End of execution
9+
[2018-11-01 11:59:32.232412] INFO: Main: Taking user input...
10+
[2018-11-01 11:59:34.459314] INFO: Main: Searching for test
11+
[2018-11-01 11:59:35.544212] INFO: Main: End of execution
12+
[2018-11-01 12:03:10.533471] INFO: Main: Taking user input...
13+
[2018-11-01 12:03:13.703748] INFO: Main: Searching for Test
14+
[2018-11-01 12:03:29.541788] INFO: Main: Taking user input...
15+
[2018-11-01 12:04:47.235649] INFO: Main: Taking user input...
16+
[2018-11-01 12:04:49.840179] INFO: Main: Searching for Test
17+
[2018-11-01 12:04:50.861832] INFO: Main: End of execution
18+
[2018-11-01 12:05:09.159210] INFO: Main: Taking user input...
19+
[2018-11-01 12:05:12.539776] INFO: Main: Searching for evangelist
20+
[2018-11-01 12:05:13.051444] INFO: Main: End of execution
21+
[2018-11-01 12:06:47.249123] INFO: Main: Taking user input...
22+
[2018-11-01 12:06:50.061626] INFO: Main: Searching for Test
23+
[2018-11-01 12:06:51.086955] INFO: Main: End of execution
24+
[2018-11-01 12:08:06.247525] INFO: Main: Taking user input...
25+
[2018-11-01 12:08:08.944600] INFO: Main: Searching for Test
26+
[2018-11-01 12:09:51.852782] INFO: Main: Taking user input...
27+
[2018-11-01 12:09:54.534807] INFO: Main: Searching for Test
28+
[2018-11-01 12:09:54.558635] INFO: Main: End of execution
29+
[2018-11-01 12:11:22.107291] INFO: Main: Taking user input...
30+
[2018-11-01 12:11:23.535399] INFO: Main: Searching for
31+
[2018-11-01 12:11:23.950284] INFO: Main: End of execution
32+
[2018-11-01 12:11:31.958232] INFO: Main: Taking user input...
33+
[2018-11-01 12:11:36.356220] INFO: Main: Searching for 123456
34+
[2018-11-01 12:11:36.637423] INFO: Main: End of execution
35+
[2018-11-01 12:11:39.904620] INFO: Main: Taking user input...
36+
[2018-11-01 12:11:44.786497] INFO: Main: Searching for None
37+
[2018-11-01 12:11:45.319395] INFO: Main: End of execution
38+
[2018-11-01 12:13:20.649559] INFO: Main: Taking user input...
39+
[2018-11-01 12:13:23.234386] INFO: Main: Searching for Test
40+
[2018-11-01 12:13:23.911220] INFO: Main: End of execution
41+
[2018-11-01 12:13:56.753222] INFO: Main: Taking user input...
42+
[2018-11-01 12:13:59.158078] INFO: Main: Searching for Test
43+
[2018-11-01 12:13:59.819754] INFO: Main: End of execution
44+
[2018-11-01 12:16:12.332734] INFO: Main: Taking user input...
45+
[2018-11-01 12:16:14.870481] INFO: Main: Searching for Test
46+
[2018-11-01 12:16:23.148851] INFO: Main: End of execution
47+
[2018-11-01 12:16:25.859262] INFO: Main: Taking user input...
48+
[2018-11-01 12:16:28.106578] INFO: Main: Searching for Test
49+
[2018-11-01 12:16:32.971772] INFO: Main: End of execution
50+
[2018-11-01 12:17:36.695139] INFO: Main: Taking user input...
51+
[2018-11-01 12:17:39.516578] INFO: Main: Searching for Test
52+
[2018-11-01 12:18:22.406519] INFO: Main: Taking user input...
53+
[2018-11-01 12:18:25.120406] INFO: Main: Searching for Test
54+
[2018-11-01 12:18:44.834353] INFO: Main: End of execution
55+
[2018-11-01 12:18:47.071174] INFO: Main: Taking user input...
56+
[2018-11-01 12:18:49.971167] INFO: Main: Searching for Test
57+
[2018-11-01 12:18:55.807881] INFO: Main: End of execution
58+
[2018-11-01 12:19:40.105590] INFO: Main: Taking user input...
59+
[2018-11-01 12:19:43.402166] INFO: Main: Searching for Test
60+
[2018-11-01 12:19:46.516121] INFO: Main: End of execution
61+
[2018-11-01 12:20:24.827253] INFO: Main: Taking user input...
62+
[2018-11-01 12:20:27.647224] INFO: Main: Searching for Test
63+
[2018-11-01 12:20:30.329746] INFO: Main: End of execution
64+
[2018-11-01 12:21:04.334859] INFO: Main: Taking user input...
65+
[2018-11-01 12:21:06.942996] INFO: Main: Searching for Test
66+
[2018-11-01 12:21:09.213442] INFO: Main: End of execution
67+
[2018-11-01 12:21:49.960626] INFO: Main: Taking user input...
68+
[2018-11-01 12:21:52.562683] INFO: Main: Searching for Test
69+
[2018-11-01 12:21:54.846975] INFO: Main: End of execution
70+
[2018-11-01 12:23:04.316350] INFO: Main: Taking user input...
71+
[2018-11-01 12:23:06.872914] INFO: Main: Searching for Test
72+
[2018-11-01 12:23:08.890324] INFO: Main: End of execution
73+
[2018-11-01 12:23:59.926540] INFO: Main: Taking user input...
74+
[2018-11-01 12:24:02.185623] INFO: Main: Searching for Test
75+
[2018-11-01 12:24:04.057188] INFO: Main: End of execution
76+
[2018-11-01 12:24:42.367150] INFO: Main: Taking user input...
77+
[2018-11-01 12:24:44.783687] INFO: Main: Searching for Test
78+
[2018-11-01 12:24:47.129405] INFO: Main: End of execution
79+
[2018-11-01 12:27:12.708999] INFO: Main: Taking user input...
80+
[2018-11-01 12:27:15.336448] INFO: Main: Searching for Test
81+
[2018-11-01 12:27:36.493512] INFO: Main: End of execution
82+
[2018-11-01 12:29:19.860669] INFO: Main: Taking user input...
83+
[2018-11-01 12:29:22.932351] INFO: Main: Searching for Test
84+
[2018-11-01 12:29:36.957346] INFO: Main: End of execution
85+
[2018-11-01 12:29:54.723797] INFO: Main: Taking user input...
86+
[2018-11-01 12:29:57.702897] INFO: Main: Searching for test
87+
[2018-11-01 12:30:00.152460] INFO: Main: End of execution

days/43-45-search-api/my_search_api_43/program.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import api
22
import logbook
3+
from webbrowser import open as web_open
34

45
logbook.RotatingFileHandler('my_search_api', level=logbook.TRACE).push_application()
56
logger = logbook.Logger("Main")
@@ -8,10 +9,18 @@ def main():
89
logger.info('Taking user input...')
910
user_input = input('Enter search criteria: ')
1011
logger.info(f'Searching for {user_input}')
11-
result = api.search(user_input)
12-
print(f'Found {len(result)} results')
13-
for r in result:
14-
print(f"Title: {r.get('title')}")
12+
articles = api.search(user_input)
13+
print(f'Found {len(articles)} articles')
14+
id_to_article_dict = {}
15+
for r in articles:
16+
id_to_article_dict[r.id] = r
17+
print(f"[{r.id}] {r.title}: {r.category}")
18+
19+
print("*"*20)
20+
21+
user_input = input('For which article do you need more information [q for quit]: ')
22+
if user_input != 'q':
23+
web_open("http://talkpython.fm" + id_to_article_dict[int(user_input)].url, new=2)
1524
logger.info('End of execution')
1625

1726
if __name__ == '__main__':

0 commit comments

Comments
 (0)