井戸端日記の盛り上がりを文字数を使用して観測
take 1
調子よくいっているので、グラフにしたい
並列取得する
曜日との相関もありそう
順序がそろってない
並列処理後の順序をどうにかする
活動指標としての文字数を扱うときに対数に変換してた
長期間取得する
初期は抜けがありそうなので404対応する
2020年10月1日から
アイコンを検知する
index.js//@ts-check
const fs = require("fs").promises;
const { plot, stack, clear } = require("nodeplotlib");
const weekDay = ["日", "月", "火", "水", "木", "金", "土"];
// @ts-ignore
const Plot = require("nodeplotlib").Plot;
/**
* @type {Plot}
*/
const data = [
{
x: [],
y: [],
type: "bar",
},
];
/**
*
* @param {Date} date
* @param {string} sep
* @returns {string}
*/
function formatDate(date, sep) {
const yyyy = date.getFullYear();
const mm = ("00" + (date.getMonth() + 1)).slice(-2);
const dd = ("00" + date.getDate()).slice(-2);
return `${yyyy}${sep}${mm}${sep}${dd}`;
}
/**
*
* @param {string} url
* @param {number} n
* @returns {Promise<Response>}
*/
const fetch_retry = async (url, n) => {
try {
console.log(url, n);
return await fetch(url);
} catch (err) {
if (n === 1) {
throw err;
}
return await fetch_retry(url, n - 1);
}
};
/**
*
* @param {number} index
* @return {Promise<{datetext2:String,leng:Number}>}
*/
const sub1 = async (index) => {
const date = new Date(Date.now());
date.setDate(date.getDate() + index);
const datetext = formatDate(date, "/");
const datetext2 = (
formatDate(date, "/") +
"(" +
weekDay[date.getDay()] +
")"
).slice(2);
const pglisttempreq = await fetch_retry(
`https://scrapbox.io/api/pages/villagepump/${encodeURIComponent(
datetext
)}/text`,
15
);
const pglisttemptxt = await pglisttempreq.text();
if (pglisttempreq.status == 200) {
console.log(datetext2, pglisttemptxt.length);
return { datetext2, leng: pglisttemptxt.length };
} else {
console.error(datetext2, "not found");
return { datetext2, leng: 0 };
}
};
const main = async () => {
const promises = [];
for (let index = -1460; index < 0; index++) {
promises.push(sub1(index));
}
const res = await Promise.all(promises);
res.forEach((obj) => {
data[0].x.push(obj.datetext2);
data[0].y.push(obj.leng);
});
stack(data);
plot();
};
main();