您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发
当前为
// ==UserScript== // @name 极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发 // @namespace http://cs.06001.cn/ // @version 1.4 // @description 免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发 // @author 极度科技(157574701/jdwl06001) // @match https://weibo.com/u/* // @icon https://www.google.com/s2/favicons?sz=64&domain=weibo.com // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @connect weibo.com // @connect dashscope.aliyuncs.com // ==/UserScript== (function() { 'use strict'; console.log("Weibo Latest Post Monitor with Auto-Like, Comment, Repost 脚本已加载。"); // 初始化设置 const DEFAULT_INTERVAL = 5000; // 默认5秒 const SETTING_KEY = 'weibo_monitor_settings'; const LIKED_MIDS_KEY = 'weibo_liked_mids'; const COMMENTED_MIDS_KEY = 'weibo_commented_mids'; const REPOSTED_MIDS_KEY = 'weibo_reposted_mids'; // 获取或设置默认配置 let settings = GM_getValue(SETTING_KEY, { interval: DEFAULT_INTERVAL, autoLike: false, autoComment: false, autoRepost: false, aiApiKey: '' }); // 获取已执行的操作列表 let likedMids = GM_getValue(LIKED_MIDS_KEY, []); let commentedMids = GM_getValue(COMMENTED_MIDS_KEY, []); let repostedMids = GM_getValue(REPOSTED_MIDS_KEY, []); // 1. 自动提取UID const url = window.location.href; const uidMatch = url.match(/https:\/\/weibo\.com\/u\/(\d+)/); if (!uidMatch || uidMatch.length < 2) { alert("无法从URL中提取UID,请确保URL格式为 https://weibo.com/u/UID"); console.error("URL不匹配或未找到UID:", url); return; } const uid = uidMatch[1]; console.log("提取到的UID:", uid); // 2. 获取当前页面的Cookie const cookie = document.cookie; if (!cookie) { alert("无法获取Cookie,请确保已登录微博并重试。"); console.error("未获取到Cookie。"); return; } // 3. 从Cookie中解析XSRF-TOKEN const xsrfMatch = cookie.match(/XSRF-TOKEN=([^;]+)/); if (!xsrfMatch) { alert("未找到XSRF-TOKEN,请检查Cookie是否包含该项。"); console.error("未找到XSRF-TOKEN:", cookie); return; } const xsrfToken = decodeURIComponent(xsrfMatch[1]); console.log("提取到的XSRF-TOKEN:", xsrfToken); // 4. 创建配置面板 function createConfigPanel() { // 检查是否已存在配置面板 if (document.getElementById('weibo-config-panel')) return; const panel = document.createElement('div'); panel.id = 'weibo-config-panel'; panel.style.position = 'fixed'; panel.style.top = '10px'; panel.style.right = '10px'; panel.style.padding = '15px'; panel.style.backgroundColor = 'rgba(0, 0, 0, 0.8)'; panel.style.color = '#fff'; panel.style.borderRadius = '8px'; panel.style.zIndex = '10000'; panel.style.fontSize = '14px'; panel.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)'; panel.style.maxWidth = '300px'; panel.innerHTML = ` <h3 style="margin-top:0; text-align:center;">微博监控设置</h3> <label> 监控间隔 (秒): <input type="number" id="monitor-interval" min="1" value="${settings.interval / 1000}" style="width: 60px; margin-left: 10px;"> </label> <br><br> <label> <input type="checkbox" id="auto-like" ${settings.autoLike ? 'checked' : ''}> 自动点赞 </label> <br> <label> <input type="checkbox" id="auto-comment" ${settings.autoComment ? 'checked' : ''}> 自动评论 </label> <br> <label> <input type="checkbox" id="auto-repost" ${settings.autoRepost ? 'checked' : ''}> 自动转发 </label> <br><br> <label> 千义通问 API Key: <input type="text" id="ai-api-key" value="${settings.aiApiKey}" placeholder="请输入千义通问 API Key" style="width: 100%;"> </label> <br><br> <button id="save-settings" style="padding: 5px 10px; cursor: pointer;">保存设置</button> <button id="close-panel" style="padding: 5px 10px; cursor: pointer; margin-left: 10px;">关闭</button> <br><br> <div style="font-size: 12px; color: #ffcc00;"> 极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]千义通问 API Key申请地址:https://bailian.console.aliyun.com/?apiKey=1#/api-key (需登录阿里云且实名账号,赠送100万Token 免费额度有效期为180天) </div> `; document.body.appendChild(panel); // 绑定事件 document.getElementById('save-settings').addEventListener('click', () => { const intervalInput = document.getElementById('monitor-interval').value; const autoLikeInput = document.getElementById('auto-like').checked; const autoCommentInput = document.getElementById('auto-comment').checked; const autoRepostInput = document.getElementById('auto-repost').checked; const aiApiKeyInput = document.getElementById('ai-api-key').value.trim(); const newSettings = { interval: parseInt(intervalInput) * 1000, autoLike: autoLikeInput, autoComment: autoCommentInput, autoRepost: autoRepostInput, aiApiKey: aiApiKeyInput }; // 更新设置 GM_setValue(SETTING_KEY, newSettings); settings = newSettings; console.log("设置已保存:", settings); alert("设置已保存,页面即将刷新以应用新设置。"); window.location.reload(); }); document.getElementById('close-panel').addEventListener('click', () => { panel.style.display = 'none'; }); } // 5. 创建信息显示区域 function createInfoDisplay() { let infoDiv = document.getElementById('latest-post-info'); if (!infoDiv) { infoDiv = document.createElement('div'); infoDiv.id = 'latest-post-info'; infoDiv.style.position = 'fixed'; infoDiv.style.bottom = '10px'; infoDiv.style.right = '10px'; infoDiv.style.padding = '10px'; infoDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; infoDiv.style.color = '#fff'; infoDiv.style.borderRadius = '5px'; infoDiv.style.zIndex = '10000'; infoDiv.style.fontSize = '14px'; infoDiv.style.maxWidth = '300px'; infoDiv.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)'; document.body.appendChild(infoDiv); } return infoDiv; } // 6. 转换时间格式 function convertTime(createdAt) { const date = new Date(createdAt); return date.toLocaleString(); } // 7. 发送点赞请求 function sendLike(mid) { const likeUrl = `https://weibo.com/ajax/statuses/setLike`; const likePayload = JSON.stringify({ id: mid }); GM_xmlhttpRequest({ method: "POST", url: likeUrl, headers: { "Content-Type": "application/json", "X-XSRF-TOKEN": xsrfToken, "Referer": `https://weibo.com/u/${uid}`, "Origin": "https://weibo.com" }, data: likePayload, onload: function(response) { if (response.status !== 200) { console.error(`点赞请求失败,状态码:${response.status}`); infoDiv.innerHTML += `<br>❌ 点赞失败 MID: ${mid}`; return; } try { const json = JSON.parse(response.responseText); if (json.ok === 1) { console.log(`点赞成功,MID: ${mid}`); // 记录已点赞的mid if (!likedMids.includes(mid)) { likedMids.push(mid); GM_setValue(LIKED_MIDS_KEY, likedMids); } // 更新显示信息 infoDiv.innerHTML += `<br>✅ 已点赞 MID: ${mid}`; } else { console.warn(`点赞失败,MID: ${mid}`); infoDiv.innerHTML += `<br>❌ 点赞失败 MID: ${mid}`; } } catch (e) { console.error("解析点赞响应数据时发生错误:", e); } }, onerror: function(error) { console.error("点赞请求过程中发生错误:", error); infoDiv.innerHTML += `<br>❌ 点赞请求错误 MID: ${mid}`; } }); } // 8. 发送评论请求 function sendComment(mid, commentContent, retryCount = 0) { const commentUrl = `https://weibo.com/ajax/comments/create`; const commentPayload = `id=${mid}&comment=${encodeURIComponent(commentContent)}&pic_id=&is_repost=0&comment_ori=0&is_comment=0`; GM_xmlhttpRequest({ method: "POST", url: commentUrl, headers: { "Content-Type": "application/x-www-form-urlencoded", "X-XSRF-TOKEN": xsrfToken, "Referer": `https://weibo.com/u/${uid}`, "Origin": "https://weibo.com" }, data: commentPayload, onload: function(response) { if (response.status !== 200) { console.error(`评论请求失败,状态码:${response.status}`); if (retryCount < 3) { console.log(`重试评论请求,MID: ${mid},第 ${retryCount + 1} 次`); sendComment(mid, commentContent, retryCount + 1); } else { console.warn(`评论失败,MID: ${mid},已达到最大重试次数`); infoDiv.innerHTML += `<br>❌ 评论失败 MID: ${mid}`; } return; } try { const json = JSON.parse(response.responseText); if (json.ok === 1) { console.log(`评论成功,MID: ${mid}`); // 记录已评论的mid if (!commentedMids.includes(mid)) { commentedMids.push(mid); GM_setValue(COMMENTED_MIDS_KEY, commentedMids); } // 更新显示信息 infoDiv.innerHTML += `<br>💬 已评论 MID: ${mid}`; } else { console.warn(`评论失败,MID: ${mid},原因: ${json.message}`); if (retryCount < 3) { console.log(`重试评论请求,MID: ${mid},第 ${retryCount + 1} 次`); sendComment(mid, commentContent, retryCount + 1); } else { console.warn(`评论失败,MID: ${mid},已达到最大重试次数`); infoDiv.innerHTML += `<br>❌ 评论失败 MID: ${mid}`; } } } catch (e) { console.error("解析评论响应数据时发生错误:", e); if (retryCount < 3) { console.log(`重试评论请求,MID: ${mid},第 ${retryCount + 1} 次`); sendComment(mid, commentContent, retryCount + 1); } else { console.warn(`评论失败,MID: ${mid},已达到最大重试次数`); infoDiv.innerHTML += `<br>❌ 评论失败 MID: ${mid}`; } } }, onerror: function(error) { console.error("评论请求过程中发生错误:", error); if (retryCount < 3) { console.log(`重试评论请求,MID: ${mid},第 ${retryCount + 1} 次`); sendComment(mid, commentContent, retryCount + 1); } else { console.warn(`评论失败,MID: ${mid},已达到最大重试次数`); infoDiv.innerHTML += `<br>❌ 评论请求错误 MID: ${mid}`; } } }); } // 9. 发送转发请求 function sendRepost(mid, repostContent, retryCount = 0) { const repostUrl = `https://weibo.com/ajax/statuses/normal_repost`; const repostPayload = `id=${mid}&comment=${encodeURIComponent(repostContent)}&pic_id=&is_repost=0&comment_ori=0&is_comment=0&visible=0&share_id=`; GM_xmlhttpRequest({ method: "POST", url: repostUrl, headers: { "Content-Type": "application/x-www-form-urlencoded", "X-XSRF-TOKEN": xsrfToken, "Referer": `https://weibo.com/u/${uid}`, "Origin": "https://weibo.com" }, data: repostPayload, onload: function(response) { if (response.status !== 200) { console.error(`转发请求失败,状态码:${response.status}`); if (retryCount < 3) { console.log(`重试转发请求,MID: ${mid},第 ${retryCount + 1} 次`); sendRepost(mid, repostContent, retryCount + 1); } else { console.warn(`转发失败,MID: ${mid},已达到最大重试次数`); infoDiv.innerHTML += `<br>❌ 转发失败 MID: ${mid}`; } return; } try { const json = JSON.parse(response.responseText); if (json.ok === 1) { console.log(`转发成功,MID: ${mid}`); // 记录已转发的mid if (!repostedMids.includes(mid)) { repostedMids.push(mid); GM_setValue(REPOSTED_MIDS_KEY, repostedMids); } // 更新显示信息 infoDiv.innerHTML += `<br>🔁 已转发 MID: ${mid}`; } else { console.warn(`转发失败,MID: ${mid},原因: ${json.message}`); if (retryCount < 3) { console.log(`重试转发请求,MID: ${mid},第 ${retryCount + 1} 次`); sendRepost(mid, repostContent, retryCount + 1); } else { console.warn(`转发失败,MID: ${mid},已达到最大重试次数`); infoDiv.innerHTML += `<br>❌ 转发失败 MID: ${mid}`; } } } catch (e) { console.error("解析转发响应数据时发生错误:", e); if (retryCount < 3) { console.log(`重试转发请求,MID: ${mid},第 ${retryCount + 1} 次`); sendRepost(mid, repostContent, retryCount + 1); } else { console.warn(`转发失败,MID: ${mid},已达到最大重试次数`); infoDiv.innerHTML += `<br>❌ 转发失败 MID: ${mid}`; } } }, onerror: function(error) { console.error("转发请求过程中发生错误:", error); if (retryCount < 3) { console.log(`重试转发请求,MID: ${mid},第 ${retryCount + 1} 次`); sendRepost(mid, repostContent, retryCount + 1); } else { console.warn(`转发失败,MID: ${mid},已达到最大重试次数`); infoDiv.innerHTML += `<br>❌ 转发请求错误 MID: ${mid}`; } } }); } // 10. 使用AI生成评论内容 async function generateAIComment(postText) { if (!settings.aiApiKey) { console.warn("未提供AI API Key,使用默认评论。"); return "极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]"; } try { const response = await fetch('https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${settings.aiApiKey}` }, body: JSON.stringify({ model: "qwen-turbo", messages: [ { role: 'system', content: '你是一个评论大师,按照这个帖子内容给我写一条十字左右的评论' }, { role: 'user', content: postText } ] }) }); if (!response.ok) { console.error(`AI 请求失败,状态码:${response.status}`); return "极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]"; } const data = await response.json(); const aiComment = data.choices && data.choices[0].message.content.trim(); if (aiComment) { console.log(`AI生成的评论: ${aiComment}`); return aiComment; } else { console.warn("AI 未生成有效的评论,使用默认评论。"); return "极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]"; } } catch (error) { console.error("AI生成评论时发生错误:", error); return "极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]"; } } // 11. 使用AI生成转发内容 async function generateAIRepost(postText) { if (!settings.aiApiKey) { console.warn("未提供AI API Key,使用默认转发内容。"); return "极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]"; } try { const response = await fetch('https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${settings.aiApiKey}` }, body: JSON.stringify({ model: "qwen-turbo", messages: [ { role: 'system', content: '你是一个评论大师,按照这个帖子内容给我写一条十字左右的转发内容' }, { role: 'user', content: postText } ] }) }); if (!response.ok) { console.error(`AI 请求失败,状态码:${response.status}`); return "极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]"; } const data = await response.json(); const aiRepost = data.choices && data.choices[0].message.content.trim(); if (aiRepost) { console.log(`AI生成的转发内容: ${aiRepost}`); return aiRepost; } else { console.warn("AI 未生成有效的转发内容,使用默认转发内容。"); return "极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]"; } } catch (error) { console.error("AI生成转发内容时发生错误:", error); return "极度科技-免费版AI自动监控微博最新帖子并可选自动点赞、评论、转发联系157574701(备注免费js脚本)[功能:1.自动获取登录账号的Cookie+Token2.自动检测当页博主第一页所有帖子3.自动筛选判断最新帖子4.可设置是否点赞、是否评论、是否.自动检测博主最新发布帖子5.可设置是否点赞、是否评论、是否转发6.可对接ai自动生成回复内容和转发内容]"; } } // 12. 获取并处理最新帖子 async function fetchLatestPost() { const apiUrl = `https://weibo.com/ajax/statuses/mymblog?uid=${uid}&page=1&feature=0`; console.log("请求URL:", apiUrl); GM_xmlhttpRequest({ method: "GET", url: apiUrl, headers: { "X-XSRF-TOKEN": xsrfToken, "Referer": `https://weibo.com/u/${uid}` }, onload: async function(response) { console.log("请求完成,状态码:", response.status); if (response.status !== 200) { console.error(`请求失败,状态码:${response.status}`, response.responseText); infoDiv.innerHTML = `请求失败,状态码:${response.status}`; return; } try { const json = JSON.parse(response.responseText); console.log("响应JSON数据:", json); if (!json.data || !json.data.list || json.data.list.length === 0) { console.warn("未找到微博数据。"); infoDiv.innerHTML = `未找到微博数据。`; return; } const posts = json.data.list; let latestPost = null; let latestDate = null; // 遍历所有帖子,找出最新的 posts.forEach(post => { const mid = post.mid; const createdAt = post.created_at; const date = new Date(createdAt); console.log(`帖子 MID: ${mid}, 发布时间: ${createdAt}`); if (!latestDate || date > latestDate) { latestDate = date; latestPost = post; } }); if (latestPost) { const latestMid = latestPost.mid; const latestCreatedAt = convertTime(latestPost.created_at); const postText = latestPost.text; // 检查是否已点赞、评论、转发 const alreadyLiked = likedMids.includes(latestMid); const alreadyCommented = commentedMids.includes(latestMid); const alreadyReposted = repostedMids.includes(latestMid); // 显示结果 infoDiv.innerHTML = `<strong>最新微博:</strong><br> MID: ${latestMid}<br> 发布时间: ${latestCreatedAt}`; // 自动点赞 if (settings.autoLike && !alreadyLiked) { sendLike(latestMid); } else if (alreadyLiked) { infoDiv.innerHTML += `<br>👍 已点赞该微博。`; } // 自动评论 if (settings.autoComment && !alreadyCommented) { const commentContent = await generateAIComment(postText); sendComment(latestMid, commentContent); } else if (alreadyCommented) { infoDiv.innerHTML += `<br>💬 已评论该微博。`; } // 自动转发 if (settings.autoRepost && !alreadyReposted) { const repostContent = await generateAIRepost(postText); sendRepost(latestMid, repostContent); } else if (alreadyReposted) { infoDiv.innerHTML += `<br>🔁 已转发该微博。`; } } else { console.warn("未找到最新的帖子。"); infoDiv.innerHTML = `未找到最新的帖子。`; } } catch (e) { console.error("解析响应数据时发生错误:", e); infoDiv.innerHTML = `解析响应数据时发生错误。`; } }, onerror: function(error) { console.error("请求过程中发生错误:", error); infoDiv.innerHTML = `请求过程中发生错误。`; } }); } // 13. 创建配置按钮 function createConfigButton() { let button = document.getElementById('weibo-config-button'); if (!button) { button = document.createElement('button'); button.id = 'weibo-config-button'; button.innerText = '设置'; button.style.position = 'fixed'; button.style.top = '10px'; button.style.right = '20px'; // 调整位置,避免与设置面板重叠 button.style.padding = '10px'; button.style.backgroundColor = '#4CAF50'; button.style.color = '#fff'; button.style.border = 'none'; button.style.borderRadius = '5px'; button.style.cursor = 'pointer'; button.style.zIndex = '10000'; button.style.boxShadow = '0 0 5px rgba(0,0,0,0.3)'; document.body.appendChild(button); button.addEventListener('click', () => { createConfigPanel(); }); } } // 14. 创建信息显示区域 const infoDiv = createInfoDisplay(); // 15. 创建配置按钮 createConfigButton(); // 16. 初始调用 fetchLatestPost(); // 17. 设置定时任务 let monitorInterval = settings.interval; setInterval(() => { console.log("定时任务:获取最新帖子"); fetchLatestPost(); }, monitorInterval); })();