명언 LINE 봇을 만들어 보았다. (LINEAPI와 GAS를 사용하여 놀아 본 3)

명언군



설명



명언 100선 의 명언으로부터, 유저가 입력한 키워드에 관한 명언을 돌려줍니다.

사용법



1 : LINE으로 문자를 입력하여 송신합니다.
2 : LINE에 입력한 키워드와 관련된 명언이 반환됩니다. 관련 명언이 없으면 무작위로 명언이 반환됩니다.

만드는 법



1: 명언 100선 로부터 명언만을 스크래핑으로 꺼냅니다.
2:LINE 봇을 작성합니다.
3 : GSS에 스크래핑으로 꺼낸 명언을 입력합니다.
4 : GAS에 코드를 씁니다.

1: 명언 100선 로부터 명언만을 스크래핑으로 꺼냅니다.

스크래핑.py
from selenium import webdriver
import pandas

"""***************************************
もろもろの設定
***************************************"""
browser = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver')
df = pandas.read_csv('default.csv', index_col=0)
url = "https://business-textbooks.com/wordofwisdom100/" #データを取りたいページ

"""******************************
CSS SELECTORの設定
******************************"""
STRONG = "strong"

"""***************************************
実行部分
***************************************"""

browser.get(url)
strongs = browser.find_elements_by_css_selector(STRONG)
print(len(strongs))

for strong in strongs:
  try:
      word = strong.text
      print(word)
      se = pandas.Series([word],["word"])
      df = df.append(se, ignore_index=True)
  except Exception as e:
      print(e)


print("Finished Scraping. Writing CSV.......")
df.to_csv("output.csv")
print("DONE")

4 : GAS에 코드를 씁니다.

명언.gs
// シートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名

//使用する変数を設定
var PROPERTIES = PropertiesService.getScriptProperties();
var LINE_ACCESS_TOKEN = PROPERTIES.getProperty('LINE_ACCESS_TOKEN')
var LINE_END_POINT = "https://api.line.me/v2/bot/message/reply"
var reply_token;
var query;


function doPost(e){
if (typeof e === "undefined"){
 reply_token = ""
 query = "満足"
} else{
  var json = JSON.parse(e.postData.contents);
  reply_token= json.events[0].replyToken;
  //送られたLINEメッセージを取得
  query = json.events[0].message.text;
}
  Logger.log("検索キーワード"+query);
 var answer = searchGSS(query);
 postBackToLine(answer);
}


//GSSの名言(A1:A100)の中からLINEメッセージで送られてきたキーワードを含む名言を返す。
function searchGss(query){
  var target_numbers = [];
  var values = sheet.getRange("A1:A100").getValues();
  for (var i = 0;i<values.length;i++) {
    var value = values[i].toString();//object→string
    if (value.indexOf(query)!=-1) {
      target_numbers.push(i);
      Logger.log(target_numbers);
    }
  }
  if(target_numbers.length > 0) {
    Logger.log(target_numbers)
    var min = 0 ;
    var max = target_numbers.length - 1 ;
    var random = Math.floor( Math.random() * (max + 1 - min) ) + min  ;  
    var target_number = target_numbers[random] + 1;
    var target_value = sheet.getRange("A" + target_number).getValue();
  }else{
    var min = 0;
    var max = 99;
    var random = Math.floor( Math.random() * (max + 1 - min) ) + min ; 
    var target_value = sheet.getRange("A" + random).getValue();
  }
  return target_value
}

//LINEに名言を返す。
function postBackToLine(answer){
var messages = [{
 "type": "text",
 "text":  "そういう時はこの名言!\n\n" + answer
}];

Logger.log(messages)
UrlFetchApp.fetch(LINE_END_POINT, {
 'headers': {
   'Content-Type': 'application/json; charset=UTF-8',
   'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
 },
 'method': 'post',
 'payload': JSON.stringify({
   'replyToken': reply_token,
   'messages': messages,
 }),
});   
}

이상

QR 코드



아래의 QR코드에서 친구등록할 수 있으므로, 좋으면 시험해 주세요.

좋은 웹페이지 즐겨찾기