完成物
■Qiita検索
検索したいタグを入れると、そのタグの新着記事が返ってくるLINE bot
今回使うもの
- LINE Messaging API
- Amazon API Gateway
- AWS Lambda(言語:node.js)
- Qiita API
LINE Messaging API, Amazon API Gateway, AWS Lambdaの準備は以下の記事に書きましたので、
こちらをご参照ください。
[過去記事]AWS(Lambda, API Gateway)でLINEの天気予報botを作ってみる
この記事では、実際のコードについてのみ書いています。
Lambda関数を書く
ローカルで、以下の通りにモジュールをインストールします。
$ npm install @line/bot-sdk
$ npm install axios
index.jsは以下の通り。
index.js
constline=require('@line/bot-sdk');constaxios=require('axios');axios.defaults.baseURL='https://qiita.com/api/v2';constclient=newline.Client({channelAccessToken:process.env.ACCESSTOKEN});letevent;letcallback;letuserMessage='';letmessage={};exports.handler=(_event,_context,_callback)=>{event=_event;callback=_callback;userMessage=JSON.parse(event.body).events[0].message.text;consturl='/tags/'+userMessage+'/items?page=1&per_page=5';main(url);};functionmain(url){axios.get(url).then(function(response){if(response.data.length!==0){letcolumns=[];for(leti=0;i<5;i++){letcolumn={};lettags="";for(letj=0;j<response.data[i].tags.length;j++){tags+=response.data[i].tags[j].name+", ";}tags=tags.slice(0,-2);column={"thumbnailImageUrl":response.data[i].user.profile_image_url,"title":response.data[i].title.length>40?response.data[i].title.slice(0,40):response.data[i].title,//最大40文字"text":tags.length>55?"tag: "+tags.slice(0,55):"tag: "+tags,//最大60文字"actions":[{"type":"uri","label":"記事を読む","uri":response.data[i].url}]}columns.push(column);}message={"type":"template","altText":"#"+userMessage+"の新着記事","template":{"type":"carousel","columns":columns}}}else{//検索結果が0件だった場合message={type:"text",text:"検索結果は0件でした。"};}}).catch(function(error){//該当するタブが存在しない場合console.log(error);message={type:"text",text:"#"+userMessage+"は存在しません。"};}).finally(function(){//メッセージ返信console.log(JSON.stringify(message));client.replyMessage(JSON.parse(event.body).events[0].replyToken,message).then(()=>{callback(null,{});}).catch((err)=>{callback(null,{});});});};
環境変数には、LINE botのチャネルアクセストークンを設定します。
これで完成!
まとめ
今回は、簡単なカルーセルテンプレートを使用したので記事は5つのみの表示です。
ここに色々なメッセージタイプが載っているので、是非色々試してみてください。