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