TL;DR
**(注意) 本記事を「いいね」すると、いいねしたユーザの投稿した記事に、投稿後一定期間、本記事からリンクが作成されます。**本記事で何がしたいのかは作成者も不明
この記事を自動更新するためのコード(node.js)
下記のコードをcronにて、毎朝11時55分に実行されるように設定しています。
thisRankingCreate.js
const authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd';
const thisCode = (authorization_token) => {
const request = require('request');
const ITEM_ID = '1f23349c2521d916ed1a'
const GET_LIKE_REQUEST_MAX = 10; // この記事につく「いいね」は1,000を超えないだろう。
const GET_ITEM_REQUEST_MAX = 30; // 直近、3,000記事が対象
const execRequest = (url, method, json) => {
return new Promise( (resolve, reject) => {
let request_arg = { url: url, headers: { Authorization: authorization_token } };
if (method) request_arg.method = method;
if (json) {
request_arg.json = json;
request_arg.headers['Content-Type'] = 'application/json';
}
request(request_arg, (error, response, body) => {
if (error) {
console.log(`execRequest fail [${url}]`);
reject(error);
} else {
console.log(`execRequest success [${url}}]`);
if (method) console.log(body);
resolve(method ? body : JSON.parse(body));
}
});
});
}
(async () => {
let users = [];
for(let i = 1; i <= GET_LIKE_REQUEST_MAX; i++) {
let response_likes = await execRequest(`https://qiita.com/api/v2/items/${ITEM_ID}/likes?page=${i}&per_page=100`);
response_likes.forEach( like => {
users.push(like.user.id);
});
if (response_likes.length < 100 || response_likes.length === 0) break;
}
let items = [];
for(let i = 1; i <= GET_ITEM_REQUEST_MAX; i++) {
let response_items = await execRequest(`https://qiita.com/api/v2/items/?page=${i}&per_page=100`);
response_items.forEach( item => {
if (users.indexOf(item.user.id) !== -1) {
let jDate = new Date(item.created_at);
items.push(`##### [${item.title}](${item.url}) by ${item.user.id} ${jDate.getFullYear()}/${('0' + (jDate.getMonth() + 1) ).slice(-2)}/${('0' + jDate.getDate() ).slice(-2)} ${('0' + jDate.getHours() ).slice(-2)}:${('0' + jDate.getMinutes() ).slice(-2)}:${('0' + jDate.getSeconds() ).slice(-2)}`);
}
});
if (response_items.length < 100 || response_items.length === 0) break;
}
let body = `
# TL;DR
**(注意) 本記事を「いいね」すると、いいねしたユーザの投稿した記事に、投稿後一定期間、本記事からリンクが作成されます。**~~本記事で何がしたいのかは作成者も不明~~
<details><summary>この記事を自動更新するためのコード(node.js)</summary><div>
下記のコードをcronにて、毎朝11時55分に実行されるように設定しています。
\`\`\` javascript:thisRankingCreate.js
const authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd';
const thisCode = ${thisCode.toString()}
thisCode(authorization_token);
\`\`\`
</div></details>
# この記事をいいねしたユーザの投稿記事タイムライン
${items.length > 0 ? items.join('\n\n') : '(該当する記事は存在しません。)' }
`;
await execRequest(`https://qiita.com/api/v2/items/${ITEM_ID}`, 'PATCH', {
body: body,
private: false,
tags: [
{ name: 'QiitaAPI' },
{ name: '自動更新' },
{ name: 'ネタ' },
],
title: "この記事をいいねしたユーザの投稿記事タイムラインを自動更新する記事を作成してみた"
});
})();
}
thisCode(authorization_token);
この記事をいいねしたユーザの投稿記事タイムライン
(該当する記事は存在しません。)