目次
- 初めに
- 導入
- プログラムの作成
- トリガーの設定
- おまけ
- 参考文献
1. 初めに
友達のLINEグループにて
A : 今日の運勢めっちゃ悪いやん
わし : 星座占いなんて子供かよww ちなみにうお座は?
B : スクショほい
わし : うわめっちゃいいやんやった!!!!
A,B : ...
わし : 毎朝LINEに送ってくれるbotあったら便利じゃね?
というのがこのbot作成の経緯となりました(笑)
まあ確かに、自動でしてくれたら楽ですよね!
ってことでレッツ作成!
2. 導入
-
何よりも先に、LINE botを作りましょう!
それは私が過去に書いた記事をご覧ください。過去の記事はherokuと連携していますが、今回はGASを使いますので、LINE botの作成のご参考にしてください。 -
次に今回はGoogle App Scriptを使用します。選んだ理由はトリガーがついて便利だからです。
この次に、LINEには個人、グループそれぞれにIDというものが紐づいています。
botを友達登録さえしていれば、その個人やグループにメッセージを送信することができます。
ということで送りたいグループのIDを取得しましょう!
こちらの方のを見てやるとスムーズかと思います。
私は下記
こちらを参考にさせていただきました。
一応、私の方でも上記のサイトの手順をお伝えしておきたいと思います。
1. LINE botの登録、追加
これは上記に記載してあるので 飛ばします。
2. グループIDの取得
- まずは白紙のグーグルスプレッドシートを開きます。
- 次に、ツールボタン→スクリプト エディタボタンを押します。
- サイトに記載している通りにコードを書きます
- その後、デプロイをします。
ここで注意!
おそらくここのデプロイでなんらかのエラーが出ると思います。
"ポップアップとリダイレクトの設定を変更してください"
と私は出ました。
- あと、デプロイする際、下記のようにアプリのアクセス範囲を"全員"にしないとLINEのWebhookが通りませんので注意してください。
3. webhookの登録
- LINE Messaging APIでwebhookを登録しましょう。
- 先ほどデプロイが完了した際に出た、httpsのURLを貼り付けましょう。
- その後、検証ボタンを押すのですが、
アプリのアクセス範囲を制限している方はここで403エラー?が出たと思います。
正しい動作は下記のように「成功」と出るはずです。
4. スプレッドシートの確認
- その後、botをグループに招待してbot以外の誰かがなんでもいいので文字を送ります。
- そしたらスプレッドシートにIDがインプットされています^^
3. プログラムの作成
- 今回はスクレイピングにおいては範囲外なので割愛します。
- yahoo占いからデータ情報を取得し、うお座、みずがめ座の運勢情報をグループラインに送信します。
function myFunction() {
var url = "https://fortune.yahoo.co.jp/12astro/ranking.html" // Yahoo!占い
var html = UrlFetchApp.fetch(url).getContentText('euc-jp') // html抽出
var body_uo = '';
var body_mi = '';
//奇数
var list_odd = Parser.data(html).from('<tr class="st01">').to('</tr>').iterate()
//偶数
var list_even = Parser.data(html).from('<tr class="st02">').to('</tr>').iterate()
for(var i=0; i<list_odd.length; i++) {
//奇数
results_odd = parse(list_odd[i])
//うお座抽出
if (results_odd.indexOf('うお座')!== -1){
body_uo=results_odd
//みずがめ座抽出
}else if(results_odd.indexOf('みずがめ座')!== -1){
body_mi=results_odd
}
//偶数
results_even = parse(list_even[i])
//うお座抽出
if (results_even.indexOf('うお座')!== -1){
body_uo=results_even
//みずがめ座抽出
}else if(results_even.indexOf('みずがめ座')!== -1){
body_mi=results_even
}
}
sendLINE(body_uo,body_mi);
}
function parse(contents) {
//ランクを取得
var rank = Parser.data(contents).from('<td class="st01">').to('</td>').build()
rank = Parser.data(rank).from('alt="').to('">').build()
//星座名を取得
var seiza = Parser.data(contents).from('<p class="seiza">').to('</p>').build()
seiza = Parser.data(seiza).from('alt="').to('">').build()
//コメントを取得
var text = Parser.data(contents).from('<p class="ft01">').to('</p>').build()
text = Parser.data(text).from('">').to('</a>').build();
var results =[rank, seiza, text]
return results
}
function sendLINE(body_uo,body_mi){
var ACCESS_TOKEN = '';
var url_1 = 'https://api.line.me/v2/bot/message/push';
var groupID = '';
var date = new Date();
var dayOfWeek = date.getDay();
var dayOfWeekStr = [ "日", "月", "火", "水", "木", "金", "土" ][dayOfWeek];
if ((dayOfWeekStr=="土") || (dayOfWeekStr=="日")){
comment='休日やん!!休むぞ〜〜';
}
else {
comment='平日やで、、学校頑張ろう!!';
}
month=Utilities.formatDate( date, 'Asia/Tokyo', 'MM');
day=Utilities.formatDate( date, 'Asia/Tokyo', 'dd');
UrlFetchApp.fetch(url_1, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'POST',
'payload': JSON.stringify({
'to': groupID,
'messages': [{
'type': 'text',
'text': '今日は '+month+'月'+day+'日 '+dayOfWeekStr+'曜日やで!!\n' +comment+'\nほな今から星座占い送るで〜',
}]
})
})
Utilities.sleep(20000)
UrlFetchApp.fetch(url_1, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'POST',
'payload': JSON.stringify({
'to': groupID,
'messages':[{
'type': 'text',
'text': 'の運勢は・・'+body_uo[0]+'!!!\n'+body_uo[1]+'の方へアドバイス↓ \n『'+body_uo[2] +'』' ,
}]
})
})
Utilities.sleep(20000)
UrlFetchApp.fetch(url_1, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'POST',
'payload': JSON.stringify({
'to': groupID,
'messages': [{
'type': 'text',
'text': 'の運勢は'+body_mi[0]+'!!!\n'+body_mi[1]+'の方へアドバイス↓ \n『'+body_mi[2]+'』' ,
}]
})
})
}
- 上記のソースコードはこちらのサイトを一部引用させていただきました。GASの良い点として、ライブラリなどを共有・使用できるのが良い点ですよね^^
4. トリガーの設定
-
次に毎朝定期的に実行してくれるようトリガーを設定しなければいけません。
-
左のタブからトリガーを選択
-
トリガーを追加し、時間型を選択
-
指定したい時間帯に設定し、登録
GUIで操作できて便利ですね〜
これにて完成です!
お疲れ様でした!
5. おまけ
実際にグループに送られてくるラインはこんな感じです。
応答型もできるので、他にも機能面アップグレードできそうですね。
友人も大満足で^^
※ 電灯が占い師botです。
6. 参考文献