feat: 添加 fetch_proxies1 方法以从新 API 获取代理 IP

This commit is contained in:
晓丰 2025-05-28 14:30:06 +08:00
parent d26828449b
commit cdc1bede9e

View File

@ -4,9 +4,11 @@
import time import time
import sys import sys
import argparse import argparse
from json.decoder import JSONObject
from urllib.parse import quote from urllib.parse import quote
import redis import redis
import requests import requests
from pydantic.v1 import JsonError
from requests import RequestException from requests import RequestException
import DB import DB
@ -46,6 +48,24 @@ def fetch_proxies2(region_code, n):
url = "http://" + region_code.lower() + "-pr.thordata.net:25000" url = "http://" + region_code.lower() + "-pr.thordata.net:25000"
return [url for _ in range(n)] return [url for _ in range(n)]
def fetch_proxies1(region_code, n):
url = f"http://api.proxy.ipidea.io/getProxyIp?num={n}&return_type=json&lb=1&sb=0&flow=1&regions={region_code}&protocol=http"
try:
res = requests.get(url)
data_json = res.json()
except (RequestException, ValueError):
time.sleep(1)
return fetch_proxies1(region_code, n)
arr = data_json["data"] or []
if not arr:
time.sleep(1)
return fetch_proxies1(region_code, n)
result = []
for item in arr:
ip = item["ip"]
port = item["port"]
result.append(f"http://{ip}:{port}")
return result
def fetch_proxies(region_code, n): def fetch_proxies(region_code, n):
""" """
@ -90,7 +110,7 @@ def 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_code, n) return fetch_proxies1(region_code, n)
result = [] result = []
for item in arr: for item in arr:
@ -113,7 +133,7 @@ def refill_queue(r: redis.Redis, region_name: str, region_code: str,
to_fetch = batch - length to_fetch = batch - length
print(f"[{time.strftime('%H:%M:%S')}] {key} 长度 {length} < {low},一次性拉取 {to_fetch} 条…") print(f"[{time.strftime('%H:%M:%S')}] {key} 长度 {length} < {low},一次性拉取 {to_fetch} 条…")
proxies = fetch_proxies(region_code, to_fetch) proxies = fetch_proxies1(region_code, to_fetch)
if proxies: if proxies:
r.rpush(key, *proxies) r.rpush(key, *proxies)
print(f"[{time.strftime('%H:%M:%S')}] 已入队 {len(proxies)} 条 → 新长度 {r.llen(key)}") print(f"[{time.strftime('%H:%M:%S')}] 已入队 {len(proxies)} 条 → 新长度 {r.llen(key)}")