LoginSignup
4
5

More than 5 years have passed since last update.

名言LINEボットを作ってみた。(LINEAPIとGASを使って遊んでみた3)

Last updated at Posted at 2018-08-23

名言君

説明

名言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コードから友達登録できますので、よろしければお試しください。

スクリーンショット 2018-08-23 13.15.23.png

4
5
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
4
5