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

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

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

Open XMLは、マイクロソフト社が開発したオープンなXMLベースのオフィススイート用のファイル形式です。従来のバイナリ形式のフォーマットに代わって、XMLを用いた規格を標準ファイル形式として採用しています。

Google Apps Script

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

Q&A

解決済

1回答

971閲覧

GASでGoogleサジェストの一括取得をしたい

yama-moto

総合スコア11

Open XML

Open XMLは、マイクロソフト社が開発したオープンなXMLベースのオフィススイート用のファイル形式です。従来のバイナリ形式のフォーマットに代わって、XMLを用いた規格を標準ファイル形式として採用しています。

Google Apps Script

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

0グッド

1クリップ

投稿2019/05/11 05:42

前提・実現したいこと

素人からの質問です。
Google Apps Scriptを用いてGoogleサジェストのA~Z、あ〜んを一括取得して
Googleスプレッドシートに取得したいです。

しかし、GoogleサジェストがIMPORTXMLだからかうまくいきません。
Youtubeでのサジェスト一括取得はこちらのコードでできました。

IMPORTXML("http://www.google.com/complete/search?hl=ja&output=toolbar&q="A1,"//suggestion/@data")

発生している問題・エラーメッセージ

SyntaxError: Unexpected token: <(行 8、ファイル「Google Suggest」)

該当のソースコード

//サジェスト取得 function Google(){ var ss = SpreadsheetApp.getActive().getSheetByName('test'); var kw = ss.getRange("A1").getValue(); var word = ss.getRange("A2").getValue(); var url = "http://www.google.com/complete/search?hl=ja&output=toolbar&q="+kw +word ;"//suggestion/@data" ; var res = UrlFetchApp.fetch(url).getContentText(); var jsonData = JSON.parse( res )[1]; var y = jsonData; var j=1; var c=1; for(var i in y ){ ss.getRange(c, 3).setValue(y[i]); c++; } }

試したこと

var url = "http://www.google.com/complete/search?hl=ja&output=toolbar&q="+kw +word ;"//suggestion/@data" ;

ここをいろいろ変えて試していますが、うまくいきません。。。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

今の場合、var url = "http://www.google.com/complete/search?hl=ja&output=toolbar&q="+kw +word ;のURLからUrlFetchApp.fetch(url).getContentText()を使って返される結果はJSONではなくXMLです。これにより、質問で示されるようなエラーが発生します。そこで、取得した値をXMLとして処理します。これに対する修正箇所は次の通りです。下記の場所を変更してみてください。

From

javascript

1var jsonData = JSON.parse( res )[1]; 2var y = jsonData; 3var j=1; 4var c=1; 5for(var i in y ){ 6 ss.getRange(c, 3).setValue(y[i]); 7 c++; 8}

To

javascript

1var values = XmlService.parse(res).getRootElement().getChildren("CompleteSuggestion").map(function(e) {return [e.getChild("suggestion").getAttribute("data").getValue()]}); 2ss.getRange(1, 3, values.length, values[0].length).setValues(values);

注意

  • ss.getRange(c, 3).setValue(y[i]);からC列の1行目から結果を表示したいと思われましたので、修正したスクリプトではそれに合わせています。

参考

投稿2019/05/11 09:05

kisojin

総合スコア899

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

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

yama-moto

2019/05/11 10:30

土日にもかかわらず、ご回答いただきありがとうございます! 試してみましたが、下記のエラーが出てしまいます。 また結果表示の修正までしていただきありがとうございます!!! > Content is not allowed in prolog. ググって色々と試してみましたが、イマイチ最適な方法が見当たらずエラーが出てしまっています。 こちらはどうやって解決すればいいかわかりますでしょうか?
yama-moto

2019/05/11 11:56 編集

すいません、こちらの入力ミスのようでした、度々失礼しました
kisojin

2019/05/15 01:51

無事解決したとのこと、安心しました。ご連絡有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問