feat: 添加委托代理检索方法并重构代理处理
This commit is contained in:
parent
af14e27e4c
commit
75cf8f7345
18
DB.py
18
DB.py
@ -104,6 +104,21 @@ class DBVidcon:
|
|||||||
continue
|
continue
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
def get_proxy_agent_dict(self) -> dict:
|
||||||
|
sql = "SELECT rn, parameter FROM proxy_agent"
|
||||||
|
self.cursor.execute(sql)
|
||||||
|
rows = self.cursor.fetchall()
|
||||||
|
result = {rn: param for rn, param in rows}
|
||||||
|
self.close()
|
||||||
|
return result
|
||||||
|
|
||||||
|
def get_proxy_parameter(self, rn: str) -> str:
|
||||||
|
sql = "SELECT parameter FROM proxy_agent WHERE rn = %s LIMIT 1"
|
||||||
|
self.cursor.execute(sql, (rn,))
|
||||||
|
result = self.cursor.fetchone()
|
||||||
|
self.close()
|
||||||
|
return result[0] if result else None
|
||||||
|
|
||||||
def rollback_records(self, raws):
|
def rollback_records(self, raws):
|
||||||
if isinstance(raws, str):
|
if isinstance(raws, str):
|
||||||
raws = [raws]
|
raws = [raws]
|
||||||
@ -240,11 +255,12 @@ class DBVidcon:
|
|||||||
self.cursor.close()
|
self.cursor.close()
|
||||||
self.conn.close()
|
self.conn.close()
|
||||||
|
|
||||||
def get_proxy(self, region_code: str) -> str:
|
def get_proxy(self, region_name: str) -> str:
|
||||||
"""
|
"""
|
||||||
从 Redis 队列 proxy_queue:<region_code> 弹出一个代理并返回。
|
从 Redis 队列 proxy_queue:<region_code> 弹出一个代理并返回。
|
||||||
如果队列为空,阻塞
|
如果队列为空,阻塞
|
||||||
"""
|
"""
|
||||||
|
region_code = self.get_proxy_parameter(region_name)
|
||||||
proxy = ""
|
proxy = ""
|
||||||
while True:
|
while True:
|
||||||
key = f"proxy_queue:{region_code}"
|
key = f"proxy_queue:{region_code}"
|
||||||
|
17
main.py
17
main.py
@ -11,18 +11,6 @@ from dateutil import parser as date_parser
|
|||||||
|
|
||||||
batch = str(int(time.time()))
|
batch = str(int(time.time()))
|
||||||
db = DBVidcon()
|
db = DBVidcon()
|
||||||
proxies_address = {
|
|
||||||
"印度尼西亚": "ID",
|
|
||||||
"马来": "MY",
|
|
||||||
"加拿大": "CA",
|
|
||||||
"台湾": "CN_city_TW", # "TW", #
|
|
||||||
"泰国": "TH",
|
|
||||||
"美国": "US",
|
|
||||||
"西班牙": "ES",
|
|
||||||
"韩国": "KR",
|
|
||||||
"香港": "CN_city_HK", # "HK", #
|
|
||||||
"越南": "VN",
|
|
||||||
}
|
|
||||||
MACHINE_ID = None
|
MACHINE_ID = None
|
||||||
MAX_WORKERS = 10
|
MAX_WORKERS = 10
|
||||||
|
|
||||||
@ -658,8 +646,7 @@ def fetch_video_detail(task):
|
|||||||
"u_id": creator.get('id'),
|
"u_id": creator.get('id'),
|
||||||
"u_xid": creator.get('xid'),
|
"u_xid": creator.get('xid'),
|
||||||
"u_name": creator.get('name'),
|
"u_name": creator.get('name'),
|
||||||
"u_pic": avatar.get('url'),
|
"u_pic": avatar.get('url')
|
||||||
"_region": proxies_address
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -708,7 +695,7 @@ def integrate_data():
|
|||||||
for index, (payload, kitem) in enumerate(keywords):
|
for index, (payload, kitem) in enumerate(keywords):
|
||||||
try:
|
try:
|
||||||
global Gproxies
|
global Gproxies
|
||||||
Gproxies = proxies_address[kitem['rn']]
|
Gproxies = kitem['rn']
|
||||||
v_list = get_searchInfo(kitem['keyword'])
|
v_list = get_searchInfo(kitem['keyword'])
|
||||||
|
|
||||||
if not v_list:
|
if not v_list:
|
||||||
|
@ -8,6 +8,7 @@ import redis
|
|||||||
import requests
|
import requests
|
||||||
from requests import RequestException
|
from requests import RequestException
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
|
import DB
|
||||||
|
|
||||||
# —— 固定 Redis 连接配置 —— #
|
# —— 固定 Redis 连接配置 —— #
|
||||||
_REDIS_CONF = {
|
_REDIS_CONF = {
|
||||||
@ -23,28 +24,14 @@ LOW_WATERMARK = 200
|
|||||||
REFILL_BATCH = 1000
|
REFILL_BATCH = 1000
|
||||||
SLEEP_INTERVAL = 10
|
SLEEP_INTERVAL = 10
|
||||||
|
|
||||||
# 区域映射
|
|
||||||
PROXIES_ADDRESS = {
|
|
||||||
"印度尼西亚": "ID",
|
|
||||||
"马来": "MY",
|
|
||||||
"加拿大": "CA",
|
|
||||||
"台湾": "CN_city_TW", #"TW", #
|
|
||||||
"泰国": "TH",
|
|
||||||
"美国": "US",
|
|
||||||
"西班牙": "ES",
|
|
||||||
"韩国": "KR",
|
|
||||||
"香港": "CN_city_HK", #"HK", #
|
|
||||||
"越南": "VN",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# 第三方 API 参数
|
# 第三方 API 参数
|
||||||
PROXY_API_URL = "https://www.kookeey.net/pickdynamicips"
|
PROXY_API_URL = "https://www.kookeey.net/pickdynamicips"
|
||||||
ACCESS_ID = "2207189"
|
ACCESS_ID = "2207189"
|
||||||
SIGN = "10099426b05c7119e9c4dbd6a7a0aa4e"
|
SIGN = "10099426b05c7119e9c4dbd6a7a0aa4e"
|
||||||
|
|
||||||
|
db = DB.DBVidcon()
|
||||||
|
|
||||||
def fetch_proxies(region_name, n):
|
def fetch_proxies(region_code, n):
|
||||||
"""
|
"""
|
||||||
从第三方一次性请求 n 条代理,返回格式化列表
|
从第三方一次性请求 n 条代理,返回格式化列表
|
||||||
"""
|
"""
|
||||||
@ -54,7 +41,7 @@ def fetch_proxies(region_name, n):
|
|||||||
"n": str(n),
|
"n": str(n),
|
||||||
"p": "http",
|
"p": "http",
|
||||||
"gate": "sea",
|
"gate": "sea",
|
||||||
"g": region_name,
|
"g": region_code,
|
||||||
"r": "0",
|
"r": "0",
|
||||||
"type": "json",
|
"type": "json",
|
||||||
"sign": SIGN,
|
"sign": SIGN,
|
||||||
@ -67,12 +54,12 @@ def fetch_proxies(region_name, n):
|
|||||||
data = resp.json()
|
data = resp.json()
|
||||||
except (RequestException, ValueError):
|
except (RequestException, ValueError):
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
return fetch_proxies(region_name, n)
|
return fetch_proxies(region_code, n)
|
||||||
|
|
||||||
arr = data.get("data") or []
|
arr = data.get("data") or []
|
||||||
if not arr:
|
if not arr:
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
return fetch_proxies(region_name, n)
|
return fetch_proxies(region_code, n)
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
for item in arr:
|
for item in arr:
|
||||||
@ -87,9 +74,6 @@ def fetch_proxies(region_name, n):
|
|||||||
|
|
||||||
def refill_queue(r: redis.Redis, region_name: str, region_code: str,
|
def refill_queue(r: redis.Redis, region_name: str, region_code: str,
|
||||||
low: int, batch: int):
|
low: int, batch: int):
|
||||||
"""
|
|
||||||
如果 region 对应的队列长度 < low,就一次性补 batch 条
|
|
||||||
"""
|
|
||||||
key = f"{QUEUE_PREFIX}:{region_code}"
|
key = f"{QUEUE_PREFIX}:{region_code}"
|
||||||
length = r.llen(key)
|
length = r.llen(key)
|
||||||
if length >= low:
|
if length >= low:
|
||||||
@ -114,13 +98,13 @@ def main():
|
|||||||
p.add_argument("--sleep", "-s", type=int, default=SLEEP_INTERVAL,
|
p.add_argument("--sleep", "-s", type=int, default=SLEEP_INTERVAL,
|
||||||
help="检测间隔秒数")
|
help="检测间隔秒数")
|
||||||
args = p.parse_args()
|
args = p.parse_args()
|
||||||
|
|
||||||
r = redis.Redis(**_REDIS_CONF)
|
r = redis.Redis(**_REDIS_CONF)
|
||||||
print(f"[*] 启动补给,监控前缀 `{QUEUE_PREFIX}:<code>` 列表,低于 {args.low} 条即补至 {args.batch} 条")
|
print(f"[*] 启动补给,监控前缀 `{QUEUE_PREFIX}:<code>` 列表,低于 {args.low} 条即补至 {args.batch} 条")
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
for region_name, region_code in PROXIES_ADDRESS.items():
|
proxies_address = db.get_proxy_agent_dict()
|
||||||
|
for region_name, region_code in proxies_address.items():
|
||||||
refill_queue(r, region_name, region_code, args.low, args.batch)
|
refill_queue(r, region_name, region_code, args.low, args.batch)
|
||||||
time.sleep(args.sleep)
|
time.sleep(args.sleep)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user