日本語URLをUrlFetchApp.fetchするとエラーになる

1,899 views
Skip to first unread message

mura mura

unread,
Apr 17, 2018, 7:54:05 PM4/17/18
to Google Apps API Japan
UrlFetchApp.fetchする際のパラメータに、日本語が含まれるURL文字列を指定した場合
「無効な引数」というエラーが表示されます。

以前はgoo.glのURL短縮APIを利用して、短縮させたURLを利用することで回避できて
いましたが、上記サービス終了によりこの手法も使えなくなってしまいました。

【まとめ】
日本語が含まれるURL文字列をUrlFetchApp.fetchの引数に指定した時
・そのままのURLでは「無効な引数」というエラーが表示される
goo.glのURL短縮は使えなくなった
・encodeURIを利用してURLエンコードしてもエラーが出る

これ以外になにか良い方法をご存知のかたがいらっしゃいましたらご教授いただけますと幸いです。
よろしくお願いします。

なかひこ

unread,
May 3, 2018, 9:50:15 AM5/3/18
to Google Apps API Japan

以下のソースコードは,動くことを確認しました.
日本語URLの中でも大丈夫なものとそうでないものがあるのでしょうか?

function myFunction() {
  var resp = UrlFetchApp.fetch("http://総務省.jp/");
  var text = resp.getContentText();
  Logger.log(text);
}




2018年4月18日水曜日 8時54分05秒 UTC+9 mura mura:

mura mura

unread,
May 5, 2018, 8:23:19 PM5/5/18
to Google Apps API Japan
http://総務省.jp/ を読み込んだ場合は問題ないのですが、
chromeのアドレスバーでコピーしたURLエンコード済のアドレスをURLエンコードして読み込ませるとエラーになりましたので、
chromeからコピーする際に「ttp://総務省.jp/」のように、hを外してURLエンコードさせずにコピーすることで解決しました。


2018年5月3日木曜日 22時50分15秒 UTC+9 なかひこ:

郡司裕之

unread,
May 5, 2018, 10:12:43 PM5/5/18
to google-app...@googlegroups.com
日本語URLでも、ピニュコード変換されてるものでも、普通に読み込めましたが。。


2018年5月6日(日) 9:23 mura mura <a99922...@gmail.com>:
--
このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
https://groups.google.com/group/google-apps-api-japan からこのグループにアクセスしてください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/google-apps-api-japan/a0e1f888-559c-42b4-aa9a-71ccf286795a%40googlegroups.com にアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

mura mura

unread,
May 6, 2018, 7:09:33 PM5/6/18
to Google Apps API Japan
ご確認ありがとうございます。

具体的にはこのURLがダメでした。

お時間のある時にご確認いただけましたら幸いです。

2018年5月6日日曜日 11時12分43秒 UTC+9 hiro:
日本語URLでも、ピニュコード変換されてるものでも、普通に読み込めましたが。。


このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。

なかひこ

unread,
May 7, 2018, 4:02:25 AM5/7/18
to Google Apps API Japan

これは,このURLだからこそ起こる問題です.(日本語特有の問題でもないです)

URLは { は %7B に, } は %7D にエンコードする必要があります.
URL内にそれらが含まれているので,エラーが出るというわけです.

解決策として,以下のような実装が挙げられます.

function myFunction() {
  var base_url = 'https://www.balenciaga.com/jp/メンズ/スニーカー#';
  var q = '{"ytosQuery":"true","department":"mshssnkrs","gender":"U","season":"A,P,E","yurirulename":"searchwithdepartmentgallery","agerange":"adult","page":"1","productsPerPage":"24","suggestion":"false","facetsvalue":[],"totalPages":"1","totalItems":"24","partialLoadedItems":"24","itemsToLoadOnNextPage":"0","departments":[{"id":"mshssnkrs","page":1}]}'  
  var resp = UrlFetchApp.fetch(base_url + encodeURIComponent(q));
  var text = resp.getContentText();
  Logger.log(text);
}

ポイントとしては
  • encodeURIComponentを使用して,波括弧含めた記号をエンコードする必要がある
  • しかし,「#」以前はエンコードしない(スラッシュ等もエンコードされてしまうため)
です.

これで解決しそうでしょうか?


2018年5月7日月曜日 8時09分33秒 UTC+9 mura mura:

mura mura

unread,
May 7, 2018, 4:16:52 AM5/7/18
to Google Apps API Japan
ありがとうございます!

var text = resp.getContentText();
Logger.log(text);


お教えいただきました実装も参考にさせていただきます。
お忙しいところありがとうございました。


2018年5月7日月曜日 17時02分25秒 UTC+9 なかひこ:
Reply all
Reply to author
Forward
0 new messages