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

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

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

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

Q&A

解決済

1回答

3059閲覧

GASでUrlFetchApp.fetch()を使ってtitleのみ取得したい

14koukimura08

総合スコア13

Google Apps Script

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

0グッド

1クリップ

投稿2019/01/04 02:54

前提・実現したいこと

  • SpreadsheetのA列に入力された文章からURLをC列にセットする。
  • A列の文章からURLが取得できた場合、HTTPResponseから<title>のみ取得し、B列にセットする。

悩んでいること

  • <title>のみ取得し、B列にセットできず、困っています。

該当のソースコード

function onEdit(e){ var range = e.range; if(range.getColumn() == 1){ // A列が変更された時に実行される getUrlInLineA(range); } } function getUrlInLineA(range) { var url_reg = /http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=]*)?/; try{ // 変更されたA列カラムの値を取得 var message = range.getValue(); // URLの正規表現にマッチした値を取得 var url = message.match(url_reg)[0]; if(url){ // C列に取得したURLをセットする range.offset(0, 2).setValue(url); getTitle(range, url); } }catch(e){ return ""; } } function getTitle(range, url) { var my_reg = /<title[\s\S]*?>([\s\S]*?)</title>/i; var response = UrlFetchApp.fetch(url); var match = my_reg.exec(response.getContentText()); if (match) { var title = match[1]; // <title>の中身だけ取得 title = title.replace(/(^\s+)|(\s+$)/g, ""); // B列に値をセットする range.offset(0, 1).setValue(title); } }

試したこと

  • ソースコード3行目のtry直後でBrowser.msgBox(url);を実行し、想定されたurlが取得できていることが確認しております。
  • ソースコード4行目直後でBrowser.msgBox(url);を実行するとポップアップが表示されませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

UrlFetchApp.fetch() simply does not work in onEdit trigger

Simple triggers like onOpen or onEdit are not able to do anything that requires authorization like sending mails because they run silently and anonymously. This is all explained in the documentation .

You should simply rename your onEdit function to something else - SpecialOnEdit for example ? - and create an installable trigger (documentation) from the script editor menu (ressources/triggers/create a new trigger...)

onEdit上だとUrlFetchApp.fetch()は上手く動作しないみたいですよ。


追記
以下の操作で動作するようになりました。
1)関数名変更
onEdit(e) → SpecialOnEdit(e)
2)トリガー作成
スクリプトエディタ→編集→現在のプロジェクトトリガー→トリガーの追加(画面右下)→
実行する関数を選択:SpecialOnEdit
イベントのソース:スプレッドシート
イベントの種類:編集時
→保存

投稿2019/01/04 04:53

編集2019/01/04 05:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

14koukimura08

2019/01/04 05:15 編集

ありがとうございます。 SpecialOnEdit()のようにrenameしても動作せず、 triggerに追加したところ、「undefined のメソッド「getColumn」を呼び出せません。」というerrorになり、失敗してしまいました。 他に方法はございますでしょうか?
14koukimura08

2019/01/04 05:14 編集

>追記 >以下の操作で動作するようになりました。 >1)関数名変更 >onEdit → SpecialOnEdit >2)トリガー作成 >スクリプトエディタ→編集→現在のプロジェクトトリガー→トリガーの追加(画面右下)→ >実行する関数を選択:SpecialOnEdit >イベントのソース:スプレッドシート >イベントの種類:編集時 >→保存 こちらで無事動作しました。 - onEdit上だとUrlFetchApp.fetch()は上手く動作しないこと - renameしてtriggerに設定すれば動作すること 上記について、ありがとうございました!!
退会済みユーザー

退会済みユーザー

2019/01/04 05:17

SpecialOnEdit()ではなくSpecialOnEdit(e)ですね 回答欄も修正します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問