1- from requests import get
2- from bs4 import BeautifulSoup as bs
3- from re import search
1+ from json import dump
42from datetime import datetime
3+ import asyncio
4+ from bs4 import BeautifulSoup as bs
55from 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+
5871with open ("pynews.json" , "w" ) as f :
5972 dump (pynews , f )
6073
6174print ("Pynews executado com sucesso!" )
62-
0 commit comments