摘要:僅供學習交流,請勿用于商業用途,并遵守新浪微博相關規定。代碼目錄此微博機器人的實現功能如下模擬登陸新浪微博獲取自動上傳圖片至微博圖床自動發送內容不同的圖文微博通過定時任務,實現周期性發微博任務。
僅供學習交流,請勿用于商業用途,并遵守新浪微博相關規定。
代碼目錄 此微博機器人的實現功能如下:模擬登陸新浪微博,獲取cookie;
自動上傳圖片至微博圖床;
自動發送內容不同的圖文微博;
通過定時任務,實現周期性發微博任務。
效果圖
圖文內容我固定了,可自行使用第三方api獲取要發送的內容或爬取第三方內容發送。(偷個懶...
登錄微博。
圖片上傳至微博圖床獲取PID。
發送微博。
登錄登錄可以使用Puppeteer node庫,很輕松的實現登錄獲取微博cookie,這里不多介紹,可以自行搜索Puppeteer學習。
</>復制代碼
Puppeteer是谷歌官方出品的一個通過DevTools協議控制headless Chrome的Node庫。可以通過Puppeteer的提供的api直接控制Chrome模擬大部分用戶操作來進行UI Test或者作為爬蟲訪問頁面來收集數據。
</>復制代碼
async function login(username, password) {
const browser = await puppeteer.launch({
// headless: false,
slowMo: 250,
executablePath: ""
});
const page = (await browser.pages())[0];
await page.setViewport({
width: 1280,
height: 800
});
await page.goto("https://weibo.com/");
await page.waitForNavigation();
await page.type("#loginname", username);
await page.type("#pl_login_form > div > div:nth-child(3) > div.info_list.password > div > input", password);
await page.click("#pl_login_form > div > div:nth-child(3) > div:nth-child(6)");
await page.waitForNavigation().then(result => {
return new Promise((resolve) => {
page.cookies().then(async cookie => {
fs.createWriteStream("cookie.txt").write(JSON.stringify(cookie), "UTF8");//存儲cookie
await browser.close();//關閉打開的瀏覽器
resolve(cookie);
});
})
}).catch(e => {
page.screenshot({
path: "code.png",
type: "png",
x: 800,
y: 200,
width: 100,
height: 100
});
return new Promise((resolve, reject) => {
readSyncByRl("請輸入驗證碼").then(async (code) => {
await page.type("#pl_login_form > div > div:nth-child(3) > div.info_list.verify.clearfix > div > input", code);
await page.click("#pl_login_form > div > div:nth-child(3) > div:nth-child(6)");
await page.waitForNavigation();
page.cookies().then(async cookie => {
fs.createWriteStream("cookie.txt").write(JSON.stringify(cookie), "UTF8");
await browser.close();
resolve(cookie);
});
})
})
})
}
圖片上傳至微博圖床
上傳到微博圖床可以看這里 http://weibo.com/minipublish 抓包看上傳的接口過程,可以看到上傳的是base64圖片信息。所以上傳前把圖片轉換成base64編碼,而本地圖片的編碼和互聯網鏈接圖片的編碼又不一樣,這里使用的是互聯網鏈接的圖片,node本地圖片轉換成base64編碼更簡單些。上傳成功后返回微博圖床圖片的pid。記住這個pid,發微博用的就是這個pid。
發送微博有了微博cookie和圖片pid后就可以發微博了,多張圖片時pid之間以|隔開的。
</>復制代碼
async function weibopost(text, pic_ids = "", cookie) { //發送微博內容(支持帶圖片)
return new Promise(async (resolve, reject) => {
if (cookie === "") {
reject("Error: Cookie not set!");
}
let post_data = querystring.stringify({
"location": "v6_content_home",
"text": text,
"appkey": "",
"style_type": "1",
"pic_id": pic_ids,
"tid": "",
"pdetail": "",
"mid": "",
"isReEdit": "false",
"rank": "0",
"rankid": "",
"module": "stissue",
"pub_source": "main_",
"pub_type": "dialog",
"isPri": "0",
"_t": "0"
});
let post_options = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7",
"Connection": "keep-alive",
"Content-Length": Buffer.byteLength(post_data),
"Content-Type": "application/x-www-form-urlencoded",
"Cookie": cookie,
"Host": "weibo.com",
"Origin": "https://weibo.com",
"Referer": "https://weibo.com",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
};
let {
data
} = await axios.post("https://weibo.com/aj/mblog/add?ajwvr=6&__rnd=" + new Date().getTime(), post_data, {
withCredentials: true,
headers: post_options
})
if (data.code == 100000) {
console.log("
" + text + "-----Sent!" + "---" + new Date().toLocaleString());
resolve(data);
} else {
console.log("post error");
reject("post error");
}
});
}
最后就是定時任務了,定時任務可以使用node-schedule node庫,這里不多介紹,可以自行搜索學習。這里使用的是每隔10分鐘發送一次。
</>復制代碼
function loginTo() {
login(config.username, config.password).then(async () => {
let rule = null;
rule = new schedule.RecurrenceRule();
rule.minute = [01, 11, 21, 31, 41, 51];
try {
let cookie = await getCookie();
getContent(cookie);
} catch (error) {
console.log(error);
}
j = schedule.scheduleJob(rule, async () => { //定時任務
try {
let cookie = await getCookie();
getContent(cookie);
} catch (error) {
console.log(error);
}
});
})
}
源碼地址: github地址
參考
</>復制代碼
https://github.com/itibbers/w...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102814.html
摘要:微博圖床對于微博圖床的理解得力于這篇文章利用微博當圖床語言實現。源碼如下上傳圖片到微博圖床圖片文件圖片是否采用方式上傳返回的數據微博提交正則表達式提取返回結果中的數據微博機器人源碼列舉了所要用到的幾個重要,最后還是貼一下機器人的源碼吧。 ? 在2011年的時候,浙大的一位博士生借助微博的開放平臺為他實驗室的一臺飲水機弄了個微博,名喚@浙大CCNT實驗室飲水機,俗稱飲水機娘。當年這...
摘要:對深度學習模型而言,水就是海量的數據。就拿機器識別物體這樣的任務來說,通過數百萬副圖片的訓練,深度學習模型甚至可以超過人的肉眼的識別能力,這確實是人工智能在感知類問題上重要的里程碑。關于深度學習,還有一個有趣的現象。 說到人工智能和機器人,上點兒歲數的碼農們可能對封面這張圖有點印象。不明就里的朋友,可以回去補習一下《編輯部的故事》。我是個二手的人工智能表演藝術家:從博士畢業開始,就在MSRA...
摘要:圍繞軟件工程效率提升進行一系列技術內容分享,包括國內外持續集成持續交付,持續部署自動化測試等實踐教程工具與資源,以及一些工程師文化相關的程序員。劃分了數據庫日志安全監控配置管理云服務等個大類,個工具。 CI Weekly 圍繞『 軟件工程效率提升』 進行一系列技術內容分享,包括國內外持續集成、持續交付,持續部署、自動化測試、 DevOps 等實踐教程、工具與資源,以及一些工程師文化相關...
摘要:以上為阿里云賬號注冊的方法流程,官方文檔阿里云賬號注冊流程中也有教程,由于阿里云賬號需要實名認證才可以正常使用,所以云吞鋪子建議可以通過支付寶淘寶微博等方式登錄,可以免去實名認證,不然還得上傳身份證審核。購買阿里云服務器、域名或者其他云產品都需要阿里云賬號,而且賬號必須實名認證否則購買不了,云吞鋪子分享賬號注冊流程方法及常見問題解答: 阿里云賬號注冊流程方法 1. 先打開阿里云官網www.a...
摘要:最重要的是,我的代碼全部以實現,是時候讓前端工程師們在人工智能機器學習領域大展身手了。千萬不要被表象所困擾,更不要被人工智能機器學習的標簽所迷惑。基于同樣由計算機視覺科學家開發的成熟且高度可擴展的深度學習技術,每天能夠分析數十億張圖像。 最近HBO電視網推出的美劇《硅谷Silicon Valley》席卷全球,里面有一個橋段介紹了超級有趣的iOS app-?Not Hotdog。你甚至可...
閱讀 3116·2021-11-24 09:39
閱讀 976·2021-09-07 10:20
閱讀 2395·2021-08-23 09:45
閱讀 2270·2021-08-05 10:00
閱讀 574·2019-08-29 16:36
閱讀 840·2019-08-29 11:12
閱讀 2823·2019-08-26 11:34
閱讀 1843·2019-08-26 10:56