1
- from requests import get
2
- from bs4 import BeautifulSoup as bs
3
- from re import search
1
+ from json import dump
4
2
from datetime import datetime
3
+ import asyncio
4
+ from bs4 import BeautifulSoup as bs
5
5
from babel .dates import format_datetime
6
- from json import dump
6
+ import aiohttp
7
7
8
- pynews = {}
8
+ from cacheVariables import pynews
9
9
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 ()
18
10
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" }
22
20
)
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" }
27
25
)
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" }
32
30
)
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
+
58
71
with open ("pynews.json" , "w" ) as f :
59
72
dump (pynews , f )
60
73
61
74
print ("Pynews executado com sucesso!" )
62
-
0 commit comments