Files
wq-h-qinglong/proxy_update.py
weiqun fa68033d4a 更新 proxy_update.py
添加通知
2025-04-19 14:53:31 +08:00

148 lines
5.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# cron: 10 */2 * * *
# new Env('更新IP代理白名单');
import requests
import hashlib
import urllib.parse
import os
from sendNotify import send # 添加通知发送模块
# JULIANG_KEY = '' # 填入巨量的API密钥点击设置授权信息按钮查看获取地址 https://www.juliangip.com/users/product/time
# JULIANG_TRADE_NO = '' # 填入巨量的业务编号
# XK_APIKEY = '' # 填入星空的 API Key
# XK_SIGN = '' # 填入星空的 Sign
# XIEQU_UID = '' # 填入携趣的 UID获取地址 https://www.xiequ.cn/redirect.aspx?act=MyIpWhiteList.aspx
# XIEQU_UKEY = '' # 填入携趣的 UKEY
# YYY_UID = '' # 填入优亦云的用户套餐ID
# YYY_TOKEN = '' # 填入优亦云的TOKEN
# 巨量
JULIANG_KEY = ''
JULIANG_TRADE_NO = ''
# 星空
XK_APIKEY = ''
XK_SIGN = ''
# 携趣
XIEQU_UID = ''
XIEQU_UKEY = ''
# 优亦云
YYY_UID = ''
YYY_TOKEN = ''
# 青龙环境变量(若上面不填写,则读取青龙环境变量)
JULIANG_KEY = JULIANG_KEY if JULIANG_KEY else os.getenv("JULIANG_KEY")
JULIANG_TRADE_NO = JULIANG_TRADE_NO if JULIANG_TRADE_NO else os.getenv("JULIANG_TRADE_NO")
XK_APIKEY = XK_APIKEY if XK_APIKEY else os.getenv("XK_APIKEY")
XK_SIGN = XK_SIGN if XK_SIGN else os.getenv("XK_SIGN")
XIEQU_UID = XIEQU_UID if XIEQU_UID else os.getenv("XIEQU_UID")
XIEQU_UKEY = XIEQU_UKEY if XIEQU_UKEY else os.getenv("XIEQU_UKEY")
YYY_UID = YYY_UID if YYY_UID else os.getenv("YYY_UID")
YYY_TOKEN = YYY_TOKEN if YYY_TOKEN else os.getenv("YYY_TOKEN")
class SignKit:
@staticmethod
def md5_sign(params, secret):
sign_content = SignKit.get_sign_content(params)
return hashlib.md5((sign_content + '&key=' + secret).encode('utf-8')).hexdigest()
@staticmethod
def get_sign_content(params):
params.pop('sign', None) # 删除 sign
sorted_params = sorted(params.items())
sign_content = '&'.join([f"{k}={str(v)}" for k, v in sorted_params if str(v) is not None and not str(v).startswith('@')])
return sign_content
def get_current_ip():
response = requests.get('https://myip.ipip.net/json')
data = response.json()
return data['data']['ip']
def update_juliang_white_list(ip, JULIANG_KEY, JULIANG_TRADE_NO):
if JULIANG_KEY and JULIANG_TRADE_NO:
params = {
'new_ip': ip,
'reset': '1',
'trade_no': JULIANG_TRADE_NO
}
sign = SignKit.md5_sign(params, JULIANG_KEY)
query_string = urllib.parse.urlencode(params) + "&sign=" + sign
url = f'http://v2.api.juliangip.com/dynamic/replaceWhiteIp?{query_string}'
response = requests.get(url)
return response.text
def update_xk_white_list(ip, XK_APIKEY, XK_SIGN):
if XK_APIKEY and XK_SIGN:
url = f'http://api2.xkdaili.com/tools/XApi.ashx?apikey={XK_APIKEY}&type=addwhiteip&sign={XK_SIGN}&flag=8&ip={ip}'
response = requests.get(url)
return response.text
def update_xiequ_white_list(ip, XIEQU_UID, XIEQU_UKEY):
if XIEQU_UID and XIEQU_UKEY:
url = f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=get'
response = requests.get(url)
data = response.text
arr = data.split(',')
if ip not in arr:
requests.get(f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=del&ip=all')
response = requests.get(f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=add&ip={ip}')
return '更新xiequ白名单成功' if response.status_code == 200 else '更新xiequ白名单出错'
else:
return '携趣白名单ip未变化'
def update_yyy_white_list(ip, YYY_UID, YYY_TOKEN):
if YYY_UID and YYY_TOKEN:
url = f'http://data.yyyip.cn:88/whiteip_api?method=list&token={YYY_TOKEN}'
response = requests.get(url)
data = response.json()
arr = [d["ip"] for d in data['data']]
ipstr = ','.join(map(str, arr))
if ip not in arr:
requests.get(f'http://data.yyyip.cn:88/whiteip_api?method=del&token={YYY_TOKEN}&ip={ipstr}')
response = requests.get(f'http://data.yyyip.cn:88/whiteip_api?method=add&token={YYY_TOKEN}&upackid={YYY_UID}&ip={ip}')
return response.json()['msg']
# return '更新优亦云白名单成功' if response.status_code == 200 else '更新优亦云白名单出错'
else:
return '优亦云白名单ip未变化'
def main():
ip = get_current_ip()
print('当前ip地址', ip)
res1 = update_juliang_white_list(ip, JULIANG_KEY, JULIANG_TRADE_NO)
res2 = update_xk_white_list(ip, XK_APIKEY, XK_SIGN)
res3 = update_xiequ_white_list(ip, XIEQU_UID, XIEQU_UKEY)
res4 = update_yyy_white_list(ip, YYY_UID, YYY_TOKEN)
print('更新巨量白名单结果:', res1)
print('更新星空白名单结果:', res2)
print('更新携趣白名单结果:', res3)
print('更新优亦云白名单结果:', res4)
# 判断是否有实际变更(不是 None 且不是“未变化”)
meaningful_results = []
if res1 and '未变化' not in res1:
meaningful_results.append(f"巨量:{res1}")
if res2 and '未变化' not in res2:
meaningful_results.append(f"星空:{res2}")
if res3 and '未变化' not in res3:
meaningful_results.append(f"携趣:{res3}")
if res4 and '未变化' not in res4:
meaningful_results.append(f"优亦云:{res4}")
if meaningful_results:
msg = f"""📝 当前IP地址{ip}
🔄 有效更新结果:
""" + "\n".join(meaningful_results)
send("IP白名单更新通知", msg)
else:
print("无有效更新,无需发送通知。")
if __name__ == "__main__":
main()