質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1870閲覧

PythonからGoogleAppsScriptへのget送信におけるエラー

NKKSM

総合スコア0

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/08 11:51

編集2021/01/09 02:01

前提・実現したいこと

玄関にラズベリーパイとカメラを設置し,
機械学習を用いて,画像から顔を判定し,帰宅または外出したことをLINEに通知する.

発生している問題

GASにPythonkからGetリクエストを送信しようとすると

<Request[500]>

が返ってきます.

該当のソースコード

Python

1url = "https://script.google.com/macros/s/AKfycbx3zWRGcvUi0qs8vtiIbZ8e3ZTh2jghCfzt3cFfrawG1XHAcQ/exec?message=exit" 2result = requests.get(url)

Getリクエストを受け取った時のGAS側のコードは以下の通りです.

function doGet(e) { push(e.parameter.message) }

試したこと

?以降を削除し,元のURLでリクエストを送ろうとしました.

url = "https://script.google.com/macros/s/AKfycbx3zWRGcvUi0qs8vtiIbZ8e3ZTh2jghCfzt3cFfrawG1XHAcQ/exec" result = requests.get(url)

結果は変わらず.

urllib.requestのほうを用いても,500 HTTP errorが返ってきました.

各モジュールを最新版にアップデート,PC自体の再起動なども行いましたが結果は変わりませんでした.
###参考までにGAS側のプログラム
https://www.takeiho.com/line-bot-push
こちらのサイトを参考にさせていただきました.

var channel_access_token = "{正しいアクセストークンを入力しています}" // ボットにメッセージ送信/フォロー/アンフォローした時の処理 function doPost(e) { var events = JSON.parse(e.postData.contents).events; events.forEach(function(event) { if(event.type == "message") { reply(event); } else if(event.type == "follow") { follow(event); } else if(event.type == "unfollow") { unFollow(event); } }); } /* 友達追加されたらユーザーIDを登録する */ function follow(e) { var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み'); //スプレッドシートの指定 var sheet = spreadsheet.getActiveSheet(); //シートを取得する sheet.appendRow([e.source.userId]); //ユーザーIDをシートに追加する } /* アンフォローされたら削除する */ function unFollow(e){ var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み'); var sheet = spreadsheet.getActiveSheet(); var result = findRow(sheet, e.source.userId, 1); if(result > 0){ sheet.deleteRows(result); } } function findRow(sheet,val,col){ var data = sheet.getDataRange().getValues(); for(var i=0; i < data.length; i++){ if(data[i][col-1] === val){ return i+1; } } return 0; } // 入力されたメッセージをおうむ返し function reply(e) { //返信先のデータ及び返信メッセージの指定 var message = { "replyToken" : e.replyToken, "messages" : [ { "type" : "text", "text" : ((e.message.type=="text") ? e.message.text : "Text以外は返せません・・・") } ] }; //情報を詰めて、エンドポイントを蹴飛ばす var replyData = { "method" : "post", "headers" : { "Content-Type" : "application/json", "Authorization" : "Bearer " + channel_access_token }, "payload" : JSON.stringify(message) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", replyData); } //スプレッドシートからユーザーを配列で取得してメッセージを送信 function push(message) { var spreadsheet = SpreadsheetApp.openById('正しいSpreadsheetのIDを入力済み'); //スプレッドシートを取得 var sheet = spreadsheet.getActiveSheet(); //シートを取得 var data = sheet.getDataRange().getValues(); //シートに記載されている値を全て取得 var userlist = []; //型を整えるためにuserlistを作成し値を詰める for(var i=0; i < data.length; i++){ userlist.push(data[i][0]); } var postData = { "to" : userlist, //ここに取得したユーザーIDの配列を指定する "messages" : [ { "type" : "text", "text" : message } ] }; var options_push = { "method" : "post", "headers" : { "Content-Type" : "application/json", "Authorization" : "Bearer " + channel_access_token }, "payload" : JSON.stringify(postData) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/multicast", options_push); } //ボットの友達にPush通知する処理 function doGet(e) { push(e.parameter.message) }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

スプレッドシートのIDを入力する場所が,一か所未入力でした.
ここで質問する内容でもなかったです,,,
大変失礼いたしました,,,

投稿2021/01/09 02:09

NKKSM

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HTTPステータス500 は Internal Server Error なので、GAS側で何かエラーが発生しているのでしょう。そのため Python 側のコードだけ提示しても原因解決にはつながらないかと思います。

ただ URL から想像するに GAS は LINE Messaging API または Notify API 使ってメッセージを投げているだけのように見えます。Python 側から LINE の API を呼べば GAS は不要かもしれません。

投稿2021/01/08 23:56

draq

総合スコア2577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NKKSM

2021/01/09 01:44 編集

回答ありがとうございます。 GAS側のプログラムも載せてみます. Python側から行った際,うまくいかないことが多く,GASに移行しました. アドバイスありがとうございますm(-_-)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問