getapi commited on
Commit
15624c3
·
verified ·
1 Parent(s): 3c05d8e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -2
app.py CHANGED
@@ -1,6 +1,7 @@
1
  from asyncio import Queue, create_task, gather, sleep
2
  from contextlib import asynccontextmanager
3
  from json import dumps, loads
 
4
  from pathlib import Path
5
  from typing import Literal
6
 
@@ -10,12 +11,24 @@ from fastapi.responses import JSONResponse, PlainTextResponse
10
  from proxybroker import Broker
11
  from uvicorn import run as uvicorn_run
12
 
 
13
  scheduler = AsyncIOScheduler()
 
14
  try:
15
  workdir = Path(__file__).parent
16
  except:
17
  workdir = Path.cwd().parent
18
 
 
 
 
 
 
 
 
 
 
 
19
  is_first_run = True
20
 
21
  http_collected_json = workdir / 'http_proxies.json'
@@ -95,19 +108,23 @@ async def stop_broker_after_timeout(broker: Broker, timeout_minutes: int):
95
 
96
 
97
  async def find_proxies_by_type(proxy_type: Literal['HTTP', 'HTTPS', 'SOCKS5'], output_json_file: Path, timeout_minutes: int = 50):
 
98
  output_json_file.write_text(dumps({'countries': None, 'proxies': []}, indent=4))
99
  proxies_queue = Queue()
100
- broker = Broker(proxies_queue, timeout=2, max_conn=200, max_tries=3, verify_ssl=True if proxy_type != 'HTTPS' else False)
101
  stop_task = create_task(stop_broker_after_timeout(broker, timeout_minutes))
102
  await broker.find(types=[proxy_type], countries=countries_list, limit=0)
103
  await stop_task
104
  proxies_list = await collect_proxies(proxies_queue)
105
- return create_json_from_proxies(proxies_list, output_json_file)
 
 
106
 
107
 
108
  async def find_proxies():
109
  global is_first_run
110
  timeout_minutes = 10 if is_first_run else 50
 
111
  results = await gather(
112
  find_proxies_by_type('HTTP', http_collected_json, timeout_minutes),
113
  find_proxies_by_type('HTTPS', https_collected_json, timeout_minutes),
@@ -115,6 +132,7 @@ async def find_proxies():
115
  )
116
  await sort_proxies_and_merge(list(results), collected_json)
117
  is_first_run = False
 
118
 
119
 
120
  scheduler.add_job(find_proxies, 'interval', max_instances=1, minutes=60)
@@ -173,6 +191,14 @@ async def get_socks5_proxies():
173
  return not_redy_yet()
174
 
175
 
 
 
 
 
 
 
 
 
176
  @app.get('/')
177
  async def read_root():
178
  return PlainTextResponse('ну пролапс, ну и что', status_code=200)
 
1
  from asyncio import Queue, create_task, gather, sleep
2
  from contextlib import asynccontextmanager
3
  from json import dumps, loads
4
+ from logging import INFO, basicConfig, getLogger
5
  from pathlib import Path
6
  from typing import Literal
7
 
 
11
  from proxybroker import Broker
12
  from uvicorn import run as uvicorn_run
13
 
14
+
15
  scheduler = AsyncIOScheduler()
16
+
17
  try:
18
  workdir = Path(__file__).parent
19
  except:
20
  workdir = Path.cwd().parent
21
 
22
+ logfile = workdir / 'log.log'
23
+
24
+ basicConfig(
25
+ level=INFO,
26
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
27
+ filename=str(logfile),
28
+ filemode='a'
29
+ )
30
+ logger = getLogger('proxy_collector')
31
+
32
  is_first_run = True
33
 
34
  http_collected_json = workdir / 'http_proxies.json'
 
108
 
109
 
110
  async def find_proxies_by_type(proxy_type: Literal['HTTP', 'HTTPS', 'SOCKS5'], output_json_file: Path, timeout_minutes: int = 50):
111
+ logger.info(f'начат сбор прокси {proxy_type}')
112
  output_json_file.write_text(dumps({'countries': None, 'proxies': []}, indent=4))
113
  proxies_queue = Queue()
114
+ broker = Broker(proxies_queue, timeout=8, max_conn=200, max_tries=3, verify_ssl=False)
115
  stop_task = create_task(stop_broker_after_timeout(broker, timeout_minutes))
116
  await broker.find(types=[proxy_type], countries=countries_list, limit=0)
117
  await stop_task
118
  proxies_list = await collect_proxies(proxies_queue)
119
+ saved_proxy = create_json_from_proxies(proxies_list, output_json_file)
120
+ logger.info(f'завершён сбор прокси {proxy_type}')
121
+ return saved_proxy
122
 
123
 
124
  async def find_proxies():
125
  global is_first_run
126
  timeout_minutes = 10 if is_first_run else 50
127
+ logger.info(f'запущены задачи по сбору всех типов прокси')
128
  results = await gather(
129
  find_proxies_by_type('HTTP', http_collected_json, timeout_minutes),
130
  find_proxies_by_type('HTTPS', https_collected_json, timeout_minutes),
 
132
  )
133
  await sort_proxies_and_merge(list(results), collected_json)
134
  is_first_run = False
135
+ logger.info(f'задачи по сбору прокси завершены')
136
 
137
 
138
  scheduler.add_job(find_proxies, 'interval', max_instances=1, minutes=60)
 
191
  return not_redy_yet()
192
 
193
 
194
+ @app.get('/log/')
195
+ async def get_logs():
196
+ if logfile.exists():
197
+ return PlainTextResponse(logfile.read_text(encoding='utf-8'), status_code=200)
198
+ else:
199
+ return PlainTextResponse('лог пуст', status_code=200)
200
+
201
+
202
  @app.get('/')
203
  async def read_root():
204
  return PlainTextResponse('ну пролапс, ну и что', status_code=200)