GAS

【GAS活用例】LINE botで姓名判断結果を取得する

本記事ではLINE BOTを作成する際に必要なGASコードの例を紹介します。

本内容はLINEで名前を入力すれば姓名判断結果が自動で返ってくるBOTです。姓名判断は「吉本式姓名判断」のサイトから引用するものです。

新しい姓名判断として「カバラ数秘術」を使ったものを提唱されています。

なぜこの姓名判断を使うのかという選択理由は色々ありますが、本題から外れるのでまた機会があれば紹介します。

名付けの際に姓名判断の本を読み漁りましたが、結構当たる部分も多いので名付けの際は何もしないよりは本を読んで参考にすることをオススメします。

後からの後悔もなくなると思うので、やれることはやるで良いと思います。

//LINE Developersで事前にトークンを取得
var channel_access_token = "・・・・・・・・・・・・・・・・"

// ボットにメッセージ送信した時の処理
function doPost(e) {
  var events = JSON.parse(e.postData.contents).events;
  events.forEach(function(event) {
    if(event.type == "message") {
      if(event.message.type=="text" && checkInput(event.message.text)) {
        reply(doUranai(event.message.text), event.replyToken);
      } else { 
        reply("名字と名前をスペースで区切ってテキスト入力してみてね",event.replyToken);
      }
    }
 });
}


// 入力された氏名をチェック
function checkInput(msg) {
  var msg_ary = msg.replace(/ /g, ' ').split(' ');
  if(msg_ary.length >= 2) {
    return true;
  } else {
    return false;
  }
}


// 姓名判断を実施
function doUranai(msg) {
  //入力された姓名を取得
  var msg_ary = msg.replace(/ /g, ' ').split(' ');
  var sei = msg_ary[0];
  var mei = msg_ary[1];

  //URL
  var seimei_url = "https://yoshimoto.cc/life/kantei1?LifeForm%5Bsei%5D=" + sei + "&LifeForm%5Bmei%5D=" + mei + "&mode=kantei";
  var tag_from = '<section class="resultComment">';
  var tag_from2 = '<div class="mainvisial-sub">';

  //URLを呼び出す
  var response = UrlFetchApp.fetch(seimei_url).getContentText();

  //返却されたHTMLを解析
  var res = findTag(response, tag_from, '<div class="tweetWrap">');
  var res_ten = findTag(res, '<span class="wordTitle">◆天格', '<br><br>');
  var res_jin = findTag(res, '<span class="wordTitle">◆人格', '<br><br>');
  var res_ti = findTag(res, '<span class="wordTitle">◆地格', '<br><br>');
  var res_gai = findTag(res, '<span class="wordTitle">◆外格 ', '<br><br>');
  var res_sou = findTag(res, '<span class="wordTitle">◆総格', '<br><br>');
  var res_kat = findTag(res, '<span class="wordTitle">◆家庭運', '<br><br>');
  var res_enj = findTag(res, '<span class="wordTitle">◆援助運', '<br><br>');
  var res_naA = findTag(res, '<span class="wordTitle">◆内運A', '<br><br>');
  var res_naB = findTag(res, '<span class="wordTitle">◆内運B', '<br><br>');
  var res_you = findTag(res, '<span class="wordTitle">◆陰陽クラス', '<div class="resultComment__btn">');
  
  
  //姓名判断の結果を返却1
  var ret_msg = "●天格" + res_ten  + "\n\n" + "●外格"+ res_gai + "\n\n" + "●地格" + res_ti + "\n\n" + "●人格" + res_jin + "\n\n" + "●総格" + res_sou 
   + "\n\n"  + "●家庭運" + res_kat + "\n\n" + "●社会運" + res_enj + "\n\n"  + "●陽陰クラス" + res_you + "詳細は「 " + seimei_url + " 」を見てね" ;
  return ret_msg.replace(/<h3>/g,'\n\n').replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'');
}  

// HTMLを解析するための関数
function findTag(text, from, to) {
  var fromIndex = text.indexOf(from);
  if (fromIndex === -1) return '';
  text = text.substring(fromIndex + from.length);
  var toIndex = text.indexOf(to);
  if (toIndex === -1) return '';
  return text.substring(0, toIndex);
}


// 入力されたメッセージをLINE送信
function reply(msg,replyToken) {
  var message = {
    "replyToken" : replyToken,
    "messages" : [
      {
        "type" : "text",
        "text" : msg
      }
    ]
  };
  var replyData = {
    "method" : "post",
    "headers" : {
      "Content-Type" : "application/json",
      "Authorization" : "Bearer " + channel_access_token
    },
    "payload" : JSON.stringify(message)
  };
  var response = UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", replyData);
  return response;
}

結果はどうでしょうか。

サイトを開くまで手間がかかると思うので、常に開くラインですぐに判定できると便利だと思います。

これからもLINE BOTが流行っていきそうなので注目です。

■参考

https://qiita.com/fukumasa/items/ea72f9d51df4dff1c7f7

ABOUT ME
Mickey@コーヒー好きエンジニア
【コーヒー×科学×AI×ものづくり】趣味は①家庭用ロースターで自家焙煎コーヒー作り②アプリ開発です。 Wordpressブログ、note、Instagramやっています♪ ブログでは自家焙煎の実例や実践的なプログラミングの例文紹介、noteではコーヒーの海外論文(主に焙煎理論)やAIに関する情報の発信をしています。