teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

プログラム内容の修正

2021/01/09 02:01

投稿

NKKSM
NKKSM

スコア0

title CHANGED
File without changes
body CHANGED
@@ -54,13 +54,13 @@
54
54
 
55
55
  /* 友達追加されたらユーザーIDを登録する */
56
56
  function follow(e) {
57
- var spreadsheet = SpreadsheetApp.openById('1KYouLNOTvri4hmIUTerTQm5rfNCWp_8SzeJ5UljdczU'); //スプレッドシートの指定
57
+ var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み'); //スプレッドシートの指定
58
58
  var sheet = spreadsheet.getActiveSheet(); //シートを取得する
59
59
  sheet.appendRow([e.source.userId]); //ユーザーIDをシートに追加する
60
60
  }
61
61
  /* アンフォローされたら削除する */
62
62
  function unFollow(e){
63
- var spreadsheet = SpreadsheetApp.openById('1KYouLNOTvri4hmIUTerTQm5rfNCWp_8SzeJ5UljdczU');
63
+ var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み');
64
64
  var sheet = spreadsheet.getActiveSheet();
65
65
  var result = findRow(sheet, e.source.userId, 1);
66
66
  if(result > 0){
@@ -105,7 +105,7 @@
105
105
 
106
106
  //スプレッドシートからユーザーを配列で取得してメッセージを送信
107
107
  function push(message) {
108
- var spreadsheet = SpreadsheetApp.openById('SpreadsheetのIDを指定'); //スプレッドシートを取得
108
+ var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み'); //スプレッドシートを取得
109
109
  var sheet = spreadsheet.getActiveSheet(); //シートを取得
110
110
  var data = sheet.getDataRange().getValues(); //シートに記載されている値を全て取得
111
111
  var userlist = []; //型を整えるためにuserlistを作成し値を詰める

1

プログラム内容の追加

2021/01/09 02:01

投稿

NKKSM
NKKSM

スコア0

title CHANGED
File without changes
body CHANGED
@@ -12,10 +12,15 @@
12
12
  ### 該当のソースコード
13
13
 
14
14
  ```Python
15
- ```
16
15
  url = "https://script.google.com/macros/s/AKfycbx3zWRGcvUi0qs8vtiIbZ8e3ZTh2jghCfzt3cFfrawG1XHAcQ/exec?message=exit"
17
16
  result = requests.get(url)
18
17
  ```
18
+ Getリクエストを受け取った時のGAS側のコードは以下の通りです.
19
+ ```
20
+ function doGet(e) {
21
+ push(e.parameter.message)
22
+ }
23
+ ```
19
24
 
20
25
  ### 試したこと
21
26
  ?以降を削除し,元のURLでリクエストを送ろうとしました.
@@ -27,4 +32,107 @@
27
32
 
28
33
  urllib.requestのほうを用いても,500 HTTP errorが返ってきました.
29
34
 
30
- 各モジュールを最新版にアップデート,PC自体の再起動なども行いましたが結果は変わりませんでした.
35
+ 各モジュールを最新版にアップデート,PC自体の再起動なども行いましたが結果は変わりませんでした.
36
+ ###参考までにGAS側のプログラム
37
+ https://www.takeiho.com/line-bot-push
38
+ こちらのサイトを参考にさせていただきました.
39
+ ```
40
+ var channel_access_token = "{正しいアクセストークンを入力しています}"
41
+ // ボットにメッセージ送信/フォロー/アンフォローした時の処理
42
+ function doPost(e) {
43
+ var events = JSON.parse(e.postData.contents).events;
44
+ events.forEach(function(event) {
45
+ if(event.type == "message") {
46
+ reply(event);
47
+ } else if(event.type == "follow") {
48
+ follow(event);
49
+ } else if(event.type == "unfollow") {
50
+ unFollow(event);
51
+ }
52
+ });
53
+ }
54
+
55
+ /* 友達追加されたらユーザーIDを登録する */
56
+ function follow(e) {
57
+ var spreadsheet = SpreadsheetApp.openById('1KYouLNOTvri4hmIUTerTQm5rfNCWp_8SzeJ5UljdczU'); //スプレッドシートの指定
58
+ var sheet = spreadsheet.getActiveSheet(); //シートを取得する
59
+ sheet.appendRow([e.source.userId]); //ユーザーIDをシートに追加する
60
+ }
61
+ /* アンフォローされたら削除する */
62
+ function unFollow(e){
63
+ var spreadsheet = SpreadsheetApp.openById('1KYouLNOTvri4hmIUTerTQm5rfNCWp_8SzeJ5UljdczU');
64
+ var sheet = spreadsheet.getActiveSheet();
65
+ var result = findRow(sheet, e.source.userId, 1);
66
+ if(result > 0){
67
+ sheet.deleteRows(result);
68
+ }
69
+ }
70
+
71
+ function findRow(sheet,val,col){
72
+ var data = sheet.getDataRange().getValues();
73
+ for(var i=0; i < data.length; i++){
74
+ if(data[i][col-1] === val){
75
+ return i+1;
76
+ }
77
+ }
78
+ return 0;
79
+ }
80
+
81
+ // 入力されたメッセージをおうむ返し
82
+ function reply(e) {
83
+ //返信先のデータ及び返信メッセージの指定
84
+ var message = {
85
+ "replyToken" : e.replyToken,
86
+ "messages" : [
87
+ {
88
+ "type" : "text",
89
+ "text" : ((e.message.type=="text") ? e.message.text : "Text以外は返せません・・・")
90
+ }
91
+ ]
92
+ };
93
+
94
+ //情報を詰めて、エンドポイントを蹴飛ばす
95
+ var replyData = {
96
+ "method" : "post",
97
+ "headers" : {
98
+ "Content-Type" : "application/json",
99
+ "Authorization" : "Bearer " + channel_access_token
100
+ },
101
+ "payload" : JSON.stringify(message)
102
+ };
103
+ UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", replyData);
104
+ }
105
+
106
+ //スプレッドシートからユーザーを配列で取得してメッセージを送信
107
+ function push(message) {
108
+ var spreadsheet = SpreadsheetApp.openById('SpreadsheetのIDを指定'); //スプレッドシートを取得
109
+ var sheet = spreadsheet.getActiveSheet(); //シートを取得
110
+ var data = sheet.getDataRange().getValues(); //シートに記載されている値を全て取得
111
+ var userlist = []; //型を整えるためにuserlistを作成し値を詰める
112
+ for(var i=0; i < data.length; i++){
113
+ userlist.push(data[i][0]);
114
+ }
115
+ var postData = {
116
+ "to" : userlist, //ここに取得したユーザーIDの配列を指定する
117
+ "messages" : [
118
+ {
119
+ "type" : "text",
120
+ "text" : message
121
+ }
122
+ ]
123
+ };
124
+ var options_push = {
125
+ "method" : "post",
126
+ "headers" : {
127
+ "Content-Type" : "application/json",
128
+ "Authorization" : "Bearer " + channel_access_token
129
+ },
130
+ "payload" : JSON.stringify(postData)
131
+ };
132
+ UrlFetchApp.fetch("https://api.line.me/v2/bot/message/multicast", options_push);
133
+ }
134
+ //ボットの友達にPush通知する処理
135
+ function doGet(e) {
136
+ push(e.parameter.message)
137
+ }
138
+ ```