Skip to content

Commit c0baa90

Browse files
authoredJul 26, 2024
Merge pull request #3 from dan5e3s6ares/Multiple-Requests
Adiciona Asyncio e AIOHttp para a execução de grande volume de requests em menor tempo.
2 parents 4e999a5 + 624688b commit c0baa90

File tree

3 files changed

+64
-51
lines changed

3 files changed

+64
-51
lines changed
 

‎cacheVariables.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pynews = {}

‎getNews.py

+62-50
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,74 @@
1-
from requests import get
2-
from bs4 import BeautifulSoup as bs
3-
from re import search
1+
from json import dump
42
from datetime import datetime
3+
import asyncio
4+
from bs4 import BeautifulSoup as bs
55
from babel.dates import format_datetime
6-
from json import dump
6+
import aiohttp
77

8-
pynews = {}
8+
from cacheVariables import pynews
99

10-
with open("bibliotecas.list") as f:
11-
libs = f.read().split("\n")
12-
13-
for lib in libs:
14-
hist_page = get(f"https://pypi.org/project/{lib.lower()}/#history")
15-
html = bs(hist_page.text, "html.parser")
16-
title = html.title.decode()
17-
title = title[title.find(">") + 1: title.find(" ")].title()
1810

19-
div_release = html.find(
20-
"div",
21-
{"class": "release release--latest release--current"}
11+
async def fetch(session, url):
12+
async with session.get(f"https://pypi.org/project/{url.lower()}/#history") as response:
13+
body = await response.text()
14+
html = bs(body, "html.parser")
15+
title = html.title.decode()
16+
title = title[title.find(">") + 1: title.find(" ")].title()
17+
div_release = html.find(
18+
"div",
19+
{"class": "release release--latest release--current"}
2220
)
23-
if div_release:
24-
p_date = div_release.find(
25-
"p",
26-
{"class": "release__version-date"}
21+
if div_release:
22+
p_date = div_release.find(
23+
"p",
24+
{"class": "release__version-date"}
2725
)
28-
29-
p_ver = div_release.find(
30-
"p",
31-
{"class": "release__version"}
26+
27+
p_ver = div_release.find(
28+
"p",
29+
{"class": "release__version"}
3230
)
33-
else:
34-
continue
35-
36-
if p_date and p_ver:
37-
str_release = p_date.text.strip()
38-
str_version = p_ver.text.strip()
39-
else:
40-
continue
41-
42-
last_release = datetime.strptime(str_release, "%b %d, %Y")
43-
if last_release.month == datetime.now().month:
44-
ver_page = get(f"https://pypi.org/project/{lib}/{str_version}")
45-
html = bs(ver_page.text, "html.parser")
46-
project_page = html.find("a", {"class": "vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--condensed"})["href"]
47-
48-
pynews[title] = {
49-
"release": format_datetime(
50-
last_release,
51-
format="dd.MMMM.yyyy",
52-
locale="pt_BR"
53-
).title().replace(".", " de "),
54-
"version": str_version,
55-
"project_page": project_page
56-
}
57-
31+
else:
32+
return
33+
34+
if p_date and p_ver:
35+
str_release = p_date.text.strip()
36+
str_version = p_ver.text.strip()
37+
else:
38+
return
39+
40+
last_release = datetime.strptime(str_release, "%b %d, %Y")
41+
if last_release.month == datetime.now().month:
42+
async with session.get(f"https://pypi.org/project/{url.lower()}/{str_version}") as ver_page:
43+
body = await ver_page.text()
44+
html = bs(body, "html.parser")
45+
project_page = html.find(
46+
"a", {"class": "vertical-tabs__tab vertical-tabs__tab--with-icon vertical-tabs__tab--condensed"})["href"]
47+
pynews[title] = {
48+
"release": format_datetime(
49+
last_release,
50+
format="dd.MMMM.yyyy",
51+
locale="pt_BR"
52+
).title().replace(".", " de "),
53+
"version": str_version,
54+
"project_page": project_page
55+
}
56+
57+
58+
with open("bibliotecas.list") as f:
59+
libs = f.read().split("\n")
60+
61+
62+
async def main():
63+
async with aiohttp.ClientSession() as session:
64+
tasks = [asyncio.ensure_future(fetch(session, url)) for url in libs]
65+
await asyncio.gather(*tasks)
66+
67+
loop = asyncio.new_event_loop()
68+
asyncio.set_event_loop(loop)
69+
loop.run_until_complete(main())
70+
5871
with open("pynews.json", "w") as f:
5972
dump(pynews, f)
6073

6174
print("Pynews executado com sucesso!")
62-

‎requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
requests==2.31.0
21
beautifulsoup4==4.12.3
32
babel==2.15.0
3+
aiohttp==3.9.5

0 commit comments

Comments
 (0)
Please sign in to comment.