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

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

ただいまの
回答率

90.84%

  • Google Apps Script

    665questions

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

google apps scriptでスプレッドシートに出力ができない。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 111

kiccuss

score 2

 前提・実現したいこと

Google apps scriptと以下のサイトから引用したyahoo検索プログラムを使用し、指定した単語を検索しスプレットシートに記述するプログラムを書こうと思っております。

サイト
GASでYahooニュースのスクレイピング
https://www.wassyoi-hack.com/dev/gas/scraping-yahoo

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

var Range=sheet.getRange(2,2,text.length,text.length).setValues(text);
の部分で

1 は無効な範囲です。2 にする必要があります。(行 84、ファイル「コード」)


と出ています。

 該当のソースコード

// 最新ニュースかどうかの判断に必要
var date = new Date();
var values = [];

function myFunction() {

var rowValues = ['学校'];

// スプレッドシートに登録したキーワードでYahooニュースを検索、LINEへ送る、のループ
rowValues.forEach( function searchWord( word ) {

// キーワードが日本語を含んだりするときのためのURLエンコード
var encoded = encodeURIComponent(word);
var text = [[""]];
text += '\n' + text + word + '\n';

// 検索のURL
var url = 'https://news.yahoo.co.jp/search/'
+ '?ei=UTF-8&aq=-1&ai=0FhK6io5Rl.OgYUBY1xjLA&ts=2425&p='
+ encoded + '&meta=vc%3D&fr=sfp_as';

// 取得したHTMLから欲しい部分を抜き出す作業
// 上記URLのページを取得し、htmlをテキストで抜き出す 
var html = UrlFetchApp.fetch(url).getContentText();

// 検索結果に出ている各記事のテキスト取得
var doc = Parser.data(html)
.from('<div id="contents" role="main">')
.to('<hr class="separation">')
.build();

// 記事へのリンク取得

var as = Parser.data(doc)
.from('<a href="')
.to('"')
.iterate()

// 広告は除外
as = as.filter(function(v){
return (v.indexOf("https://headlines.yahoo.co.jp/") !== -1);
});

// 記事名取得

var names = Parser.data(doc)
.from('<p class="a">')
.to("</p>")
.iterate()

// 検索結果に表示されている記事のリード文章取得
var descs = Parser.data(doc)
.from('<span class="ct1">')
.to("</span>")
.iterate()

// 日付取得
var dueDate = Parser.data(doc)
.from('<span class="d">')
.to("</span>")
.iterate()

// 今日の日付を基に、最新のニュースのみ取り出す処理
/* for(i=0;i<as.length;++i){
if (dueDate[i].indexOf((date.getMonth() +1 ) + "月" + date.getDate() + "日") 
!= -1 || dueDate[i].indexOf((date.getMonth() +1 ) 
+ "月" + (date.getDate() -1 ) + "日") != -1) {
var values = [[values + (i+1)], [as[i]],[names[i]],[descs[i]]];

var sheet=SpreadsheetApp.getActiveSheet();
var Range=sheet.getRange(4,4,4,4).setValues(values);

} //if文の終了
else{
values = ["なし"];
}
} //for文の終了*/

var text = [[as],[names]];
Logger.log(text);        
var sheet=SpreadsheetApp.getActiveSheet();
var Range=sheet.getRange(2,2,text.length,text.length).setValues(text);

});
}

 試したこと

配列にする等は実行しました。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

サンプルで修正したGASを書いてみました。
出力形式を2パターン書いてみましたので、コメントアウトを外せば動く..と思います。。

// 最新ニュースかどうかの判断に必要
var date = new Date();
var values = [];

function myFunction() {

  var rowValues = ['学校'];

  // スプレッドシートに登録したキーワードでYahooニュースを検索、LINEへ送る、のループ
  rowValues.forEach( function searchWord( word ) {

    // キーワードが日本語を含んだりするときのためのURLエンコード
    var encoded = encodeURIComponent(word);
    var text = [[""]];
    text += '\n' + text + word + '\n';

    // 検索のURL
    var url = 'https://news.yahoo.co.jp/search/'
    + '?ei=UTF-8&aq=-1&ai=0FhK6io5Rl.OgYUBY1xjLA&ts=2425&p='
    + encoded + '&meta=vc%3D&fr=sfp_as';

    // 取得したHTMLから欲しい部分を抜き出す作業
    // 上記URLのページを取得し、htmlをテキストで抜き出す 
    var html = UrlFetchApp.fetch(url).getContentText();

    // 検索結果に出ている各記事のテキスト取得
    var doc = Parser.data(html)
    .from('<div id="contents" role="main">')
    .to('<hr class="separation">')
    .build();

    // 記事へのリンク取得

    var as = Parser.data(doc)
    .from('<a href="')
    .to('"')
    .iterate()

    // 広告は除外
    as = as.filter(function(v){
      return (v.indexOf("https://headlines.yahoo.co.jp/") !== -1);
    });

    // 記事名取得

    var names = Parser.data(doc)
    .from('<p class="a">')
    .to("</p>")
    .iterate()

    // 検索結果に表示されている記事のリード文章取得
    var descs = Parser.data(doc)
    .from('<span class="ct1">')
    .to("</span>")
    .iterate()

    // 日付取得
    var dueDate = Parser.data(doc)
    .from('<span class="d">')
    .to("</span>")
    .iterate()

    // 今日の日付を基に、最新のニュースのみ取り出す処理
    /* for(i=0;i<as.length;++i){
    if (dueDate[i].indexOf((date.getMonth() +1 ) + "月" + date.getDate() + "日") 
    != -1 || dueDate[i].indexOf((date.getMonth() +1 ) 
    + "月" + (date.getDate() -1 ) + "日") != -1) {
    var values = [[values + (i+1)], [as[i]],[names[i]],[descs[i]]];

    var sheet=SpreadsheetApp.getActiveSheet();
    var Range=sheet.getRange(4,4,4,4).setValues(values);

    } //if文の終了
    else{
    values = ["なし"];
    }
    } //for文の終了*/


    var sheet=SpreadsheetApp.getActiveSheet();     
    /////////////////////////////////
    // ここからコードを書き換えています。

    /**
     * 2行目にURL,3行目に記事本文を出力したい場合
     */
    var text = [as, names]; 
    sheet.getRange(2, 2, text.length, as.length).setValues(text);

    /**
     * B列にURL,C列に記事本文を出力したい場合
     */
    //var values = [];
    //for(var i = 0; i < as.length; i++) {
    //  values.push([as[i], names[i]]);
    //}
    //sheet.getRange(2, 2, as.length, 2).setValues(values);

  });
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/13 10:36

    動きました!
    ありがとうございました!

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Google Apps Script

    665questions

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