下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133
这个微博自动发布工具包含四个主要模块:主控制程序、微博操作类、内容生成器和配置文件。使用时需要先配置config.json文件,包含微博账号信息和发布设置。工具支持定时发布、随机内容生成和图片附件功能。
import requests
import time
import random
import json
from datetime import datetime
class WeiboBot:
def init(self, username, password):
self.session = requests.Session()
self.username = username
self.password = password
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
self.login_url = 'https://passport.weibo.cn/sso/login'
self.post_url = 'https://weibo.com/aj/mblog/add?ajwvr=6'
def login(self):
login_data = {
'username': self.username,
'password': self.password,
'savestate': '1',
'r': 'https://weibo.com/',
'ec': '0',
'pagerefer': '',
'entry': 'mweibo',
'wentry': '',
'loginfrom': '',
'client_id': '',
'code': '',
'qq': '',
'mainpageflag': '1',
'hff': '',
'hfp': ''
}
response = self.session.post(self.login_url, data=login_data, headers=self.headers)
if response.status_code == 200:
print("登录成功")
return True
else:
print("登录失败")
return False
def post_weibo(self, content, image_path=None):
post_data = {
'text': content,
'pic_id': '',
'appkey': '',
'style_type': '1',
'pdetail': '',
'rank': '0',
'rankid': '',
'module': 'stissue',
'pub_source': 'main_',
'pub_type': 'dialog',
'_t': '0'
}
if image_path:
files = {'pic': open(image_path, 'rb')}
response = self.session.post(self.post_url, data=post_data, files=files, headers=self.headers)
else:
response = self.session.post(self.post_url, data=post_data, headers=self.headers)
if response.status_code == 200:
print("微博发布成功")
return True
else:
print("微博发布失败")
return False
def scheduled_post(self, content, post_time, image_path=None):
now = datetime.now()
target_time = datetime.strptime(post_time, "%Y-%m-%d %H:%M:%S")
delay = (target_time - now).total_seconds()
if delay > 0:
print(f"等待 {delay} 秒后发布...")
time.sleep(delay)
return self.post_weibo(content, image_path)
else:
print("指定时间已过,立即发布")
return self.post_weibo(content, image_path)
random
import jieba
from collections import Counter
class ContentGenerator:
def init(self, corpus_file=None):
self.word_dict = {}
if corpus_file:
self.load_corpus(corpus_file)
def load_corpus(self, file_path):
with open(file_path, 'r', encoding='utf-8') as f:
text = f.read()
words = jieba.lcut(text)
self.word_dict = dict(Counter(words))
def generate_sentence(self, length=20):
if not self.word_dict:
return self._generate_random_sentence(length)
total = sum(self.word_dict.values())
sentence = []
for _ in range(length):
r = random.randint(1, total)
upto = 0
for word, count in self.word_dict.items():
if upto + count >= r:
sentence.append(word)
break
upto += count
return ''.join(sentence)
def _generate_random_sentence(self, length):
templates = [
"今天天气真好,#阳光# 明媚,适合出门走走~",
"分享一个有趣的事情:{}",
"最近在读《{}》,感觉很有收获!",
"{} 这个观点你怎么看?#讨论#",
"记录生活:{} #日常#"
]
fillers = [
"人工智能", "科技发展", "编程学习", "美食分享",
"旅行见闻", "读书笔记", "电影推荐", "健身打卡"
]
template = random.choice(templates)
if '{}' in template:
return template.format(random.choice(fillers))
return template