こんばんは。急に暑くなって困ってます。
前回、前々回で全期間のアリスの記事とツイートを取得して、いいねの数を数えてDBに保存しました。
今回は半期ごとのいいねを数えたいので、特定の期間で絞って取得してこようと思います。
GET APIを叩いて取得したTwitterのツイート、ALISの記事データにはcreated_atという項目があるので、それを元に期間を限定していきたいと思います。
function getLikesAndRT(user, date) {
let rt = 0;
let likes = 0;
const tweets = JSON.parse(
readFileSync(`json/tweets/${user.twitter_id}.json`, "utf-8")
);
tweets.forEach((tweet) => {
const created_at = new Date(tweets[0].created_at);
if (created_at.getTime() > date.getTime()) {
likes += tweet.favorite_count;
rt += tweet.retweet_count;
}
});
const twitter_obj = {
likes_half: likes,
rt_half: rt,
};
return twitter_obj;
}
まず、前回からの変更点です。
const created_at = new Date(tweets[0].created_at);
if (created_at.getTime() > date.getTime()) {
この部分と、getLikesAndRT関数にdate引数を追加しています。
半期前より新しい、古いを比較したいのですが、日付の比較をするメソッドするには、形を変更する必要があります。
なので、getTime関数を使ってミリ秒に変換してから比較をしています。
async function main() {
const date = new Date();
const month = date.getMonth() + 1;
let period;
if (month !== 4 && month !== 9) {
console.log("学期始めではありません");
return;
}
if (month === 4) {
period = 18408600000;
} else if (month === 9) {
period = 15778800000;
}
date.setTime(date.getTime() - period);
let users = getUsers();
users.forEach((user) => {
user.twitter = getLikesAndRT(user, date);
updateTwitterData(user);
});
}
次に、半期ごと(前期: 4~8, 後期: 9~3)にしたいので、4月始まりの場合と9月始まりの場合で条件を分けています。
学期始めに、その前の学期分のデータを保存したいので、4月と9月以外は関数から出るようにしています。
dateを半期前に戻し、それをgetLikesAndRT関数の引数としてわたしています。
likes_halfとrt_halfが半期分のいいねとRTです。
数字に差がありますね😀
これで半期分の取得は完了です。
(どっちも6ヶ月なら楽なのにTT)と思いながら書いていました。
1週間ごとも取得するようにする必要があるので、そちらも同じ方法でやろうと思います。
追記:
昨日まとめたあとに、これだと4/30とかに実行した場合9/30からしかとれないのでは...と気がつきました。
また他の方法を試し次第編集します。
参考記事