下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133
实现说明:
核心模块包含超话列表获取和签到功能2
使用配置文件存储cookies避免硬编码1
定时任务模块实现自动化执行3
请求间隔控制防止被封禁4
使用步骤:
安装依赖:pip install requests schedule
获取微博cookies并保存为cookies.json文件1
配置需要签到的超话ID列表(可选)
运行main.py启动定时任务
注意事项:
cookies需要定期更新1
建议使用服务器保持长期运行3
可扩展添加邮件/微信通知功能4
完整项目包含错误处理和日志记录模块
import requests
import json
import time
from datetime import datetime
class WeiboSigner:
def init(self, cookies):
self.session = requests.Session()
self.session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Cookie': '; '.join([f"{k}={v}" for k,v in cookies.items()])
})
def get_super_topics(self):
url = "https://api.weibo.com/2/page/super_follow_list.json"
resp = self.session.get(url)
return resp.json().get('data', {}).get('list', [])
def sign_super_topic(self, topic_id):
sign_url = f"https://api.weibo.com/2/page/super_follow_sign.json"
data = {
'super_topic_id': topic_id,
'type': '1',
'source': 'weibo'
}
resp = self.session.post(sign_url, data=data)
return resp.json()
def batch_sign(self, topic_ids=None):
if not topic_ids:
topics = self.get_super_topics()
topic_ids = [t['id'] for t in topics]
results = []
for tid in topic_ids:
res = self.sign_super_topic(tid)
results.append({
'topic_id': tid,
'result': res,
'time': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
})
time.sleep(1) # 避免请求过于频繁
return results
import os
import json
class ConfigLoader:
@staticmethod
def load_cookies(file_path='cookies.json'):
if not os.path.exists(file_path):
raise FileNotFoundError("Cookie配置文件不存在")
with open(file_path, 'r', encoding='utf-8') as f:
return json.load(f)
@staticmethod
def save_cookies(cookies, file_path='cookies.json'):
with open(file_path, 'w', encoding='utf-8') as f:
json.dump(cookies, f, ensure_ascii=False, indent=4)
from weibo_auto_sign import WeiboSigner
from config_loader import ConfigLoader
import schedule
import time
def job():
try:
cookies = ConfigLoader.load_cookies()
signer = WeiboSigner(cookies)
results = signer.batch_sign()
success_count = sum(1 for r in results if r['result'].get('code') == '100000')
print(f"[{time.strftime('%Y-%m-%d %H:%M')}] 签到完成,成功{success_count}个")
except Exception as e:
print(f"签到失败: {str(e)}")
if name == 'main':
# 每天8点执行
schedule.every().day.at("08:00").do(job)
while True:
schedule.run_pending()
time.sleep(60)