LoginSignup
8
3

More than 1 year has passed since last update.

プロトアウトスタジオの投稿記事、読むのを習慣化するためにLINE BOTを作ってみた。強くなりたいので。

Posted at

そもそもの動機

「強くなりたい」
史上最強の男にだれでも一度は憧れるものです。
とはいえ、僕は筋力が無ければ、運動神経も悪い、ただの独身男性なので早々と断念しました。
方向性をぐるんと変えて、「妄想を形にできる最強のクリエイター」を目指すことに。
それがきっかけとなり、僕はプロトアウトスタジオの門を叩いたのでした。

なぜ習慣化するためのBOTを作るのか

プロトアウトスタジオにはQiita上にメンバーが執筆した記事がたくさん投稿されています。
ので、まずは記事をたくさん読み込んで圧倒的に成長しようと考えたのですね。
image.png
そして、すぐに挫折することとなりました。

  • 「よく投稿されているタグ」があるもののなんの技術もないのでどれを読めばいいか分からない
  • 「人気の記事」をひとまず読んでみるも、そこから次の記事に発展していかない

つまり、あまりに記事が多く、かつ取っ掛かりがないので記事を継続して読めなかったのです。
これを受けて、技術の知識がない僕でも毎日読むのを習慣化できるようなBOTを作りたくなりました。

必要な機能は

毎日送られてきた記事は必ず読むというルールにすれば、
習慣化され、かつ次第に知識がついていくんじゃないかと考えました。

LINE BOTの機能は下の2つにしました

  1. プロトアウトスタジオメンバが投稿した記事からランダムに3つ選択する
  2. 毎日決められた時間に記事を送ってくれる

完成デモ

IMG_4673.jpg

これなら記事選択に迷うことがなさそうです。
ちなみに送ってくれた記事はこちら

  1. スクールに通ったら意識はどうなる?Word2Vecで調べてみた
  2. 暑くなったらクーラーをつけるよう呼びかけ熱中症予防する
  3. ド素人がプロトタイピングスクールに入ったらどうなったか&宿題公開

環境

Visual Studio Code v1.71.0
node v18.8.0
@line/bot-sdk

制作①:LINE BOTアカウントを作成する

LINE公式アカウントの作成 / LINE Botの初め方
▲こちらの記事を参考に、まずLINE BOTアカウントを作成

IMG_4676.jpg

(友達に、、、なって、、、、)

制作②:Node.jsでQiita APIを使ってみる

「プロトアウトスタジオ」で検索してヒットした記事を格納する

記事格納
let responses = await axios.get('https://qiita.com/api/v2/items?per_page=50&&query='+ encodeURIComponent("プロトアウトスタジオ"));

記事件数分のランダムな数値が格納された配列を作成する

ランダム配列
        var randoms = [];
        var min = 1, max = 49;
       
        for(i = min; i <= max; i++){
          while(true){
            var tmp = intRandom(min, max);
            if(!randoms.includes(tmp)){
              randoms.push(tmp);
              break;
            }
          }
        }
       
        function intRandom(min, max){
          return Math.floor( Math.random() * (max - min + 1)) + min;
        }

配列の数値を使って、ランダムに記事を3つプッシュメッセージする

PushMessages
        for(let i = 0; i<3; i++){
         let num = randoms[i];
         

         const messages = [{
            type: 'text',
            text: `${responses.data[num].title} \n ${responses.data[num].url}`
        }];

        try {
            const res = await client.broadcast(messages);
            console.log(res);
        } catch (error) {
            console.log(`エラー: ${error.statusMessage}`);
            console.log(error.originalError.response.data);
        }
       }

終わりに

本当は、毎日早朝にランダム記事を送ってくれる機能を実装したかったのですが実現せず、、、
近いうちに実装して、習慣化を図りたいと思います。強くなりたいので。

最後に現状のコードを全文載せておきます。
今日も読んでいただいてありがとうございます。

サンプルコード全文

全文
const line = require('@line/bot-sdk');
const axios = require('axios');

const config = {
    channelSecret: '*************',
    channelAccessToken: '************************'
};

const client = new line.Client(config);

const main = async () => {

  const messages = [{
    type: 'text',
    text: "おはよう!今日もいってみよー!"
}];

try {
    const res = await client.broadcast(messages);
    console.log(res);
} catch (error) {
    console.log(`エラー: ${error.statusMessage}`);
    console.log(error.originalError.response.data);
}
       
       
         let responses = await axios.get('https://qiita.com/api/v2/items?per_page=50&&query='+ encodeURIComponent("プロトアウトスタジオ"));

         var randoms = [];
         var min = 1, max = 49;
        
         for(i = min; i <= max; i++){
           while(true){
             var tmp = intRandom(min, max);
             if(!randoms.includes(tmp)){
               randoms.push(tmp);
               break;
             }
           }
         }
        
         function intRandom(min, max){
           return Math.floor( Math.random() * (max - min + 1)) + min;
         }
         
       for(let i = 0; i<3; i++){
         let num = randoms[i];
         

         const messages = [{
            type: 'text',
            text: `${responses.data[num].title} \n ${responses.data[num].url}`
        }];

        try {
            const res = await client.broadcast(messages);
            console.log(res);
        } catch (error) {
            console.log(`エラー: ${error.statusMessage}`);
            console.log(error.originalError.response.data);
        }
       }
}

main();
8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3