この記事をいいねしたユーザの投稿記事タイムラインを自動更新する記事を作成してみた


# TL;DR

**(注意) 本記事を「いいね」すると、いいねしたユーザの投稿した記事に、投稿後一定期間、本記事からリンクが作成されます。**~~本記事で何がしたいのかは作成者も不明~~

<details><summary>この記事を自動更新するためのコード(node.js)</summary><div>

下記のコードをcronにて、毎朝11時55分に実行されるように設定しています。

```  javascript: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);
```

</div></details>

# この記事をいいねしたユーザの投稿記事タイムライン

(該当する記事は存在しません。)