下载地址:https://www.pan38.com/share.php?code=JCnzE 提取码:8888 【仅供学习】
包含完整的超话发布流程:1) 账号自动登录 2) 定时任务管理 3) 内容自动发布 4) 失败重试机制。使用时需要Auto.js 4.1.1以上版本支持,
// ========== 全局配置 ==========
const CONFIG = {
ACCOUNT: "test@example.com",
PASSWORD: "**",
MAX_THREADS: 3,
RETRY_TIMES: 2,
SCHEDULE_FILE: "/sdcard/weibo_schedule.json"
};
// ========== 多线程任务池 ==========
const THREAD_POOL = {
taskQueue: [],
activeThreads: 0,
maxThreads: CONFIG.MAX_THREADS,
lock: threads.lock()
};
// ========== 定时任务处理器 ==========
function TaskScheduler() {
this.loadSchedule = function() {
try {
let content = files.read(CONFIG.SCHEDULE_FILE);
return JSON.parse(content);
} catch (e) {
toast("加载计划失败: " + e);
return [];
}
};
this.checkPendingTasks = function() {
let tasks = this.loadSchedule();
let now = new Date().getTime();
return tasks.filter(task => task.executeTime <= now);
};
}
// ========== 微博发布核心功能 ==========
function WeiboPublisher() {
this.login = function() {
app.launch("com.sina.weibo");
waitForPackage("com.sina.weibo");
// 登录流程
if (id("tv_login").findOne(5000)) {
id("tv_login").click();
sleep(2000);
selector().text("帐号密码登录").findOne().click();
sleep(1000);
id("et_login_view_uname").setText(CONFIG.ACCOUNT);
id("et_login_view_psw").setText(CONFIG.PASSWORD);
id("bn_login").click();
sleep(5000);
}
};
this.postWeibo = function(content, imagePath) {
this.login();
// 进入发布页
id("plus_icon").findOne().click();
selector().text("发微博").findOne().click();
sleep(3000);
// 输入内容
let editor = id("et_status").findOne();
editor.setText(content);
// 添加图片
if (imagePath) {
id("composer_btn_image").click();
sleep(1000);
let galleryBtn = text("相册").findOne();
galleryBtn.click();
sleep(2000);
// 图片选择逻辑...
}
// 发布
id("titleSave").click();
sleep(5000);
};
}
// ========== 主执行逻辑 ==========
function main() {
let scheduler = new TaskScheduler();
let publisher = new WeiboPublisher();
setInterval(() => {
let pendingTasks = scheduler.checkPendingTasks();
pendingTasks.forEach(task => {
THREAD_POOL.lock.lock();
THREAD_POOL.taskQueue.push(task);
THREAD_POOL.lock.unlock();
});
// 线程池处理
while (THREAD_POOL.activeThreads < THREAD_POOL.maxThreads
&& THREAD_POOL.taskQueue.length > 0) {
threads.start(function() {
THREAD_POOL.lock.lock();
let task = THREAD_POOL.taskQueue.shift();
THREAD_POOL.activeThreads++;
THREAD_POOL.lock.unlock();
try {
publisher.postWeibo(task.content, task.imagePath);
removeTaskFromSchedule(task.id);
} catch (e) {
logError("任务执行失败: " + e);
} finally {
THREAD_POOL.lock.lock();
THREAD_POOL.activeThreads--;
THREAD_POOL.lock.unlock();
}
});
}
}, 60000); // 每分钟检查一次
}
// ========== 辅助函数 ==========
function waitForPackage(pkgName, timeout) {
let endTime = Date.now() + (timeout || 10000);
while (!currentPackage() === pkgName && Date.now() < endTime) {
sleep(500);
}
}
function logError(msg) {
let timestamp = new Date().toISOString();
files.append("/sdcard/weibo_error.log", [${timestamp}] ${msg}\n
);
}
// 启动程序
main();
========== UI界面组件 ==========
function createUI() {
let window = floaty.window(
);
// 数据绑定
let tasks = JSON.parse(files.read(CONFIG.SCHEDULE_FILE) || "[]");
window.taskList.setDataSource(tasks.map(task => {
return {
content: task.content.substring(0, 20) + (task.content.length > 20 ? "..." : ""),
time: new Date(task.executeTime).toLocaleString()
};
}));
// 事件处理
window.add.click(() => {
let content = window.content.getText();
let timeStr = window.time.getText();
try {
let executeTime = new Date(timeStr).getTime();
if (!content || !executeTime) throw new Error("参数不完整");
let newTask = {
id: Date.now(),
content: content,
executeTime: executeTime
};
tasks.push(newTask);
files.write(CONFIG.SCHEDULE_FILE, JSON.stringify(tasks));
toast("添加成功");
// 刷新列表
window.taskList.setDataSource(tasks.map(task => ({
content: task.content.substring(0, 20) + (task.content.length > 20 ? "..." : ""),
time: new Date(task.executeTime).toLocaleString()
})));
} catch (e) {
toast("添加失败: " + e);
}
});
}
// 启动UI
ui.run(createUI);