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

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

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

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Google Apps Script

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1476閲覧

GASでネットワークカメラから静止画を取得したい

gatten1217

総合スコア59

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

Google Apps Script

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/11/17 06:50

編集2020/11/18 03:20

APIが公開されているQWatchというネットワークカメラからGASを使ってLINEBotに静止画を送信する試みです。

APIの仕様は以下の通り

Authority: ユーザーまたは管理者(admin)
Method: GET
URL: /snapshot.jpg
Parameter: なし

<使用例>
コマンド
curl --digest -o test.jpg -u <UserName>:<Password> http://<IPAddress>:<HttpPort>/snapshot.jpg
戻り値
HTTP/1.1 200 OK<CRLF>
Content-Type: image/jpeg<CRLF>
Content-Length: <body length><CRLF>
Date: <Date><CRLF>
<CRLF>
<Image Data>

GASで書いたコードが以下のとおりです。

google

1 2function getDataFromCamera(){ 3 const auth_data = Utilities.base64Encode(`${"ユーザー"}:${"パスワード"}`); 4 var options = { 5 "headers": {"Authorization" : `Basic ${auth_data}`} 6 } 7 8 const response = UrlFetchApp.fetch("http://IPアドレス:ポート/snapshot.jpg",options); 9 Logger.log(response) 10 11} 12

コードを実行すると、以下のエラーメッセージが表示されます。

無効なリクエスト: http://IPアドレス:ポート/snapshot.jpg(行 7、ファイル「カメラ」)

APIの仕様にはパラメータ不要と書いてあるのですが、ベーシック認証を突破するのに必要なんじゃないかと思って書いたのがこのコードなのですが、何か根本的に見落としているような気もして、質問させていただきました。
ご教示のほど、お願いいたします。

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

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

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

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

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

tetsunosuke

2020/11/17 07:20

明確な回答ではないのでコメントにとどめます 仕様書落としていませんが、QWatchはダイジェスト認証という記載があります。 ベーシック認証ではないです。 curl でも --digestしていますよね となると、こちらのコメントあたりに参考になる方法があるのでは。 https://teratail.com/questions/43162
gatten1217

2020/11/18 03:22

完全に思い込みでベーシック認証だと思ってました!なんでや・・・ ありがとうございます!やってみます!
guest

回答1

0

ベストアンサー

http://192.168.*.*:*****/snapshot.jpg

IPアドレスがローカルネットワークですね。
GASはGoogleのサーバーで実行されるため、このAPIを実行するためにはグローバルIPを指定する必要があります。

投稿2020/11/17 07:20

編集2020/11/19 00:33
macaron_xxx

総合スコア3191

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

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

gatten1217

2020/11/18 03:24

IP載せるつもりなかったのですが、結果的に良いアドバイスをいただけました!ありがとうございます! もし可能でしたらIPのところとポート番号の部分を修正していただけますでしょうか?申し訳ありません!
macaron_xxx

2020/11/19 00:34

修正しましたが、ローカルIPなので漏れてもさほど問題ない&編集履歴から見ることができます。 どうしても困るのであれば、質問を削除したほうがよいです。
gatten1217

2020/11/20 05:43

そうですね。ありがとうございました! アドバイスを受けてやってみたのですが、IPの部分はローカルIPで問題なかったようです。説明書によると外部からアクセスするにはポート開放で対応するみたいです 勉強になりました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問