在生活中我们常常遇到这种情况:只想简单看看双色球开奖号码,却被强制要求下载各种 App 📲。
这些 App 不是广告满天飞 💥,就是界面臃肿卡顿 🐢,甚至还可能偷偷获取隐私信息 😒。
于是我决定:自己动手,用 Python 写一个脚本,自动获取开奖号码并通过青龙面板发送通知 📬!
干净、快速、自由,想看就看,拒绝被绑架。
🎯 开发目标
✅ 自动获取每日双色球开奖信息
✅ 通过青龙定时任务推送通知(支持 Bark / 钉钉 / Telegram 等)
✅ 无需手动操作,全自动运行
⚙️ 技术选型
📝 Python 3:脚本首选语言,灵活高效
📡 requests:拉取开奖信息
🧹 json & re:处理数据内容
🧭 青龙面板:定时执行 & 多渠道通知
🔗 开奖数据来源
为了确保数据准确可靠,我选用了中彩网或其他公开接口作为数据源 🧮。
示例接口返回内容如下:
{
"issue": "2025047",
"openTime": "2025-04-29",
"frontWinningNum": "01 14 21 22 23 31",
"backWinningNum": "12",
"seqFrontWinningNum": "14 22 31 23 01 21",
"seqBackWinningNum": "12",
"saleMoney": "364051920",
"r9SaleMoney": "",
"prizePoolMoney": "2211042881",
"week": "星期二",
"winnerDetails": [
{
"awardEtc": "1",
"baseBetWinner": {
"remark": "一等奖",
"awardNum": "4",
"awardMoney": "10000000",
"totalMoney": ""
},
"addToBetWinner": "",
"addToBetWinner2": "",
"addToBetWinner3": ""
},
{
"awardEtc": "2",
"baseBetWinner": {
"remark": "二等奖",
"awardNum": "174",
"awardMoney": "152770",
"totalMoney": ""
},
"addToBetWinner": "",
"addToBetWinner2": "",
"addToBetWinner3": ""
},
{
"awardEtc": "3",
"baseBetWinner": {
"remark": "三等奖",
"awardNum": "929",
"awardMoney": "3000",
"totalMoney": ""
},
"addToBetWinner": "",
"addToBetWinner2": "",
"addToBetWinner3": ""
},
{
"awardEtc": "4",
"baseBetWinner": {
"remark": "四等奖",
"awardNum": "47377",
"awardMoney": "200",
"totalMoney": ""
},
"addToBetWinner": "",
"addToBetWinner2": "",
"addToBetWinner3": ""
},
{
"awardEtc": "5",
"baseBetWinner": {
"remark": "五等奖",
"awardNum": "1005016",
"awardMoney": "10",
"totalMoney": ""
},
"addToBetWinner": "",
"addToBetWinner2": "",
"addToBetWinner3": ""
},
{
"awardEtc": "6",
"baseBetWinner": {
"remark": "六等奖",
"awardNum": "9948912",
"awardMoney": "5",
"totalMoney": ""
},
"addToBetWinner": "",
"addToBetWinner2": "",
"addToBetWinner3": ""
}
]
}
💻 代码示例
import requests
import time
import random
import json
import re
import notify
# 生成动态参数以避免缓存
current_timestamp = int(time.time() * 1000)
tt_value = random.random()
callback_timestamp = current_timestamp - 1
url = (
"https://jc.zhcw.com/port/client_json.php?"
f"callback=jQuery1122029918790071673307_{callback_timestamp}&"
"transactionType=10001001&"
"lotteryId=1&"
"issueCount=30&"
"startIssue=&"
"endIssue=&"
"startDate=&"
"endDate=&"
"type=0&"
"pageNum=1&"
"pageSize=1&"
f"tt={tt_value}&"
f"_={current_timestamp}"
)
headers = {
"Accept": "*/*",
"Accept-Language": "zh-CN,zh-TW;q=0.9,zh;q=0.8,en;q=0.7",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"Cookie": "PHPSESSID=bi2vu7nn8gdqvg79ggal0bmvq0",
"Pragma": "no-cache",
"Referer": "https://www.zhcw.com/",
"Sec-Fetch-Dest": "script",
"Sec-Fetch-Mode": "no-cors",
"Sec-Fetch-Site": "same-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
}
response = requests.get(url, headers=headers)
response_text = response.text
# 清理字符串以获取有效的JSON对象
start_index = response_text.find('(') + 1
end_index = response_text.rfind(')')
json_str = response_text[start_index:end_index]
# 解析JSON字符串
parsed_data = json.loads(json_str)
# 提取"data"中的信息
data_info = parsed_data.get('data', [])
# 遍历每个数据项(在这个例子中只有一个)
for data in data_info:
# 数据解析(建议添加类型校验)
red_numbers = data.get('frontWinningNum', '').split() # 前区红球
blue_number = data.get('backWinningNum', '') # 后区蓝球
open_time = data.get('openTime', '未知时间')
week = data.get('week', '未知星期')
issue = data.get('issue', '未知期号')
# 动态生成红球HTML
red_balls = '\n'.join([
f'<div style="width:40px;height:40px;background:#e74c3c;border-radius:50%;color:white;'
f'display:flex;align-items:center;justify-content:center;font-weight:bold;">{num}</div>'
for num in red_numbers
])
# 构建HTML模板
message = f'''
<div style="background:#f8f9fa;padding:20px;border-radius:12px;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">
<h2 style="color:#2d3436;margin:0 0;border-bottom:2px solid #e74c3c;display:flex;">
<span style="font-size:1.2em;margin-right:8px;">🎉</span>双色球开奖公告
</h2>
<div style="color:#636e72;display: flex">
<span style="color:#e74c3c;">📅 {open_time} {week}</span>
<span style="margin:0 8px">|</span>
<span>第{issue}期</span>
</div>
<div style="display:flex;flex-wrap:wrap;gap:8px;">
<!-- 红球 -->
{red_balls}
<!-- 蓝球 -->
<div style="width:40px;height:40px;background:#3498db;border-radius:50%;color:white;
display:flex;align-items:center;justify-content:center;font-weight:bold;">{blue_number}</div>
</div>
<div style="color:#636e72;display: flex">
<span>⏰ 开奖时间:20:30(每周二、四、日)</span>
<span style="margin:0 8px">|</span>
<span>📞 客服电话:95086</span>
</div>
</div>
'''
notify.send("双色球", message)
🕒 青龙定时任务配置
把脚本放进青龙的脚本目录,然后设置每天晚上开奖时间后自动执行 🧠。
🗓 定时任务规则:
0 22 * * 2,4,0
📱 效果展示
每天开奖后,手机立即收到通知👇:

真可以