blog
blog copied to clipboard
来写个脚本定会议室
思路
1.先找到预定会议室的接口,一般需要登录认证,看需要哪个cookie 2.退出登录,重新登录,看set-cookie 是在哪个response 里给的 3.如果入参没有什么加密的东西,比较简单的话那么直接通过这个接口发请求就可以了 4.如果入参比较复杂,自己比较难构造,那就使用puppeteer 模拟登录行为,最终拿到cookie
puppeteer + node-schedule
const request = require('request-promise-native');
const puppeteer = require('puppeteer');
const fakeLogin = async () => {
const url = 'http://it.netease.com/meeting/index.html';
const browser = await puppeteer.launch({});
const page = await browser.newPage();
await page.goto(url);
await page.waitFor(1000);
await page.type('#corp_id_for_corpid', 'name');
await page.type('#corp_id_for_corppw', 'pass');
await page.waitFor(1000);
await page.click('#corp button');
await page.waitFor(1000);
await page.goto('http://it.netease.com/portal/security/getCurrentUserInfo.du');
await page.waitFor(1000);
return page.cookies();
};
async function setOrder(Cookie) {
function getOrderDate() {
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const fullSet = (val) => {
return (val > 10) ? val : `0${val}`;
};
return `${year}-${fullSet(month)}-${fullSet(day)}`;
}
const date = getOrderDate();
const options = {
method: 'POST',
uri: 'http://it.netease.com/portal/meeting/insertMeeting.du',
headers: {
Cookie,
},
body: {
"subject": "code review",
"content": "今天看谁的代码^_^",
"meetingMembers": [
{
"attendUser": "ann",
"attendUsername": "ann",
},
],
"sendPopoNow": true,
"sendMailNow": false,
"sendPopo": true,
"sendMail": false,
"roomId": 171,
"location": "杭州-大厦",
"roomName": "B楼-3F-No.xxx",
"meetingTimelines": [
{
date,
"start": 17,
"end": 19,
},
],
},
json: true,
};
try {
const rsData = await request(options);
console.log(rsData);
} catch (err) {
console.log(err);
}
}
module.exports = function () {
fakeLogin()
.then((cookieArr) => {
const cookieObj = cookieArr[0];
const cookieStr = `${cookieObj.name}=${cookieObj.value}`;
setOrder(cookieStr);
});
};
// 定时任务
const schedule = require('node-schedule');
const task = require('./meeting');
// 定义规则
let rule = new schedule.RecurrenceRule();
rule.dayOfWeek = 5;
rule.hour = 9;
rule.minute = 0;
rule.second = 0;
// 每周五早上9点执行任务
let job = schedule.scheduleJob(rule, () => {
task();
});
执行
{
"scripts": {
"start": "node schedule.js 2>&1 > ./logs &",
},
}