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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Google Apps Script

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

Q&A

解決済

1回答

541閲覧

GoogleAppsScriptにおいて'&'を含んだ文字列の構成ができない

br3-kyokyo

総合スコア7

Google Apps Script

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

0グッド

1クリップ

投稿2019/01/29 01:16

編集2019/01/29 01:30

GoogleAppsScriptで'&'を含んだ文字列を文字列連結により構成しようとすると'&'以降が消滅してしまい困っています。
たとえば
var hoge = "ho" + "&ge";
などとするとhogeの中身は
"ho"
になってしまうという具合です。

複数のクエリを持ったGETリクエスト文字列を構成したいのですが、他の方法などはあるのでしょうか。
プログラムは以下に掲載します。

//slackからPOSTリクエストを受信 function doPost(e) { //リクエストをパースしてJSONに var params = JSON.parse(e.postData.getDataAsString()); //tokenをチェックしてだめなら弾く var recv_token = params.token; if(tokens().VERIFY_SLACK_TOKEN !== recv_token){ return; } //@ワイじゃなければ弾く //JSONから各種情報を取得 var teamid = params.team_id; var chid = params.event.channel; var userid = params.event.user; var text = params.event.text; //チーム名を取得 var res_team = UrlFetchApp.fetch("https://slack.com/api/team.info?token=" + tokens().SLACK_TOKEN).getContentText(); var params_team = JSON.parse(res_team); var teamName = params_team.team.name; //チャンネル名を取得 //↓↓↓問題の行その1↓↓↓ var res_ch = UrlFetchApp.fetch("https://slack.com/api/channels.info?token=" + tokens().SLACK_TOKEN + "&channel=" + chid).getContentText(); var params_ch = JSON.parse(res_ch); var chName = params_ch.channel.name; //ユーザー名を取得 //↓↓↓問題の行その2↓↓↓ var res_user = UrlFetchApp.fetch("https://slack.com/api/users.info?token=" + tokens().SLACK_TOKEN + "&user=" + userid).getContentText(); var params_user = JSON.parse(res_user); var userName = params_user.user.real_name; //LINEに送信する文面を構成 var msg = "\nWorkspase: "+teamName+"\nChannel: "+chName+"\nUser: "+userName+ "\n----------\n"+text; //LINEnotifyへ送信 sendtoLINE(msg); } function sendtoLINE(message) { var op = { "method" : "post", "payload": "message=" + message, "headers":{"Authorization" : "Bearer " + tokens().LINETOKEN} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op); }

よろしくお願いします。

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

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

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

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

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

macaron_xxx

2019/01/29 02:48

私、正常に取得できたのですが、チャンネルがプライベートチャンネルだと、この状態では取得できないです。 チャンネルがプライベートチャンネルということはないですか?
guest

回答1

0

ベストアンサー

↓こういうことをすれば分かりますが、消えません。

javascript

1function q171459() { 2 const url = "https://httpbin.org/anything/a=b&c=d"; 3 Logger.log(UrlFetchApp.fetch(url)); 4}

投稿2019/01/29 01:23

papinianus

総合スコア12705

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

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

br3-kyokyo

2019/01/29 01:40

すみません、例を少し変えさせていただきました… papinianus様の例も試させていただきましたが、やはり&以下は消えてしまいました 文字列の確認の仕方ですが、確認が難しいのでLINEnotifyに送信して文字列を確認している状況です、これがなにか影響しているのかもしれません
papinianus

2019/01/29 01:55

> papinianus様の例も試させていただきましたが、やはり&以下は消えてしまいました Logger.logに出力されたjsonのurl部分から落ちているということでしょうか? この例にあるロガーで消えているならどうやったって消えると思います。 同じ名前の関数・変数が定義されているとか、&が全角であるとか、ですかね。回答に貼ったコードをコピペして消えるならおお手上げです
papinianus

2019/01/29 01:57

最終的にLineやslackをつかいたいとしても、&が消えるのでは話にならないので、まず消えないところから検証する意図で回答・説明を行っております。
br3-kyokyo

2019/01/29 02:10 編集

すみません、コピペして確かめたところ、問題なく&含め返ってきていることを確認しました。 ` const url = "https://httpbin.org/anything/a=b" + "&c=d";` としても問題なく返ってきていたので問題は文字列連結以外にあるようでした。
papinianus

2019/01/29 02:14

では、次の段階として、質問者様のコードの問題の行の手前で一旦urlを組み立てます const slackUrl = "https://slack.com/api/channels.info?token=" + tokens().SLACK_TOKEN + "&channel=" + chid"; Logger.log(slackUrl); const res = UrlFetchApp.fetch(slackUrl); Logger.log(res); こういう感じで、どこで消えるかきえてないか、また消えてなければ正しい結果が返っているか、が分かるはず
br3-kyokyo

2019/01/29 02:50

どうも、書き方の問題ではなく、トークンあたりのパーミッション系の問題だということがわかりました… この調子で調べていけばなんとかなりそうです、ご教授いただきありがとうございました!
br3-kyokyo

2019/01/29 02:51

結果はきれいに戻ってくるのですが、ワークスペースを変えると値が戻ってこないようです。
papinianus

2019/01/29 02:53 編集

それこそtokenの権限を確認するしかないのでは。
br3-kyokyo

2019/01/30 23:15

結局、OAuthがうまくいっていないという話でした。 再勉強して出直してきます、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問