YahooNewsのNewsタイトル(8件)と、そのURLのクレイピングをしています。(Cheerio使用)
Console.logでは、8件分のNewsとURLが表示されますが、Googleスプレッドシートには、8番目のNewsタイトルとそのURLだけが、8行分表示されます。どうしたらいいでしょうか?
試したこと
setValue(title)、setValue(link)→ setValue(title[i])、setValue(link[i])に変更。
→ 8番目のNewsタイトルとURLの、各8番目の文字だけ、8行分表示されます。
jQuery
1function myFunction() { 2 const html = UrlFetchApp.fetch('https://www.yahoo.co.jp').getContentText('UTF-8'); 3 const $ = Cheerio.load(html); 4 const _li = $('main section ul').eq(0).find('li'); 5 6// ニュースを表示 7_li.map(function(i) { 8 const title = _li.eq(i).text(); 9 console.log(title); 10 const link = _li.eq(i).find('a').attr()['href']; 11 console.log(link); 12 13 const spreadsheet = SpreadsheetApp.openById(" "); 14 const sheet = spreadsheet.getSheetByName('newsLink'); 15 sheet.getRange(1,1,i + 1,1).setValue(title); 16 sheet.getRange(1,2,i + 1,1).setValue(link); 17}); 18}
titleとlinkの中身に問題がないなら原因は一つですよね
getRangeの使い方をもう一度調べてみては?
投稿頂き有難うございます。
色々試したのですが(getRange(1,1,i+1,1) → getRange(1,1,_li.length,_li[0].length)、map→for、setValue→setValues等)、色々エラーが出て解決できなかったため、classを使用する事にしました。
また後ほどよく調べてみようと思います。
動くようになったようですが一応補足
最初のコードはgetRangeで範囲選択をしています
最初の行からそのループで本来書き込むはずだった行まで選択しsetValueしているので、ループの最後の周ですべての行が同じ値に書き換わります。
有難うございます。
色々調べてみます。
下記で解決しました。
sheet.getRange(i + 1,1).setValue(titles);
sheet.getRange(i + 1,2).setValue(links);
(でもgetRangeの設定の少しの違いで、なぜ色々表示が違うのかよくわかっておらず、後日別の質問をする予定です---。)
アドバイスを頂き有難うございました。
回答1件
あなたの回答
tips
プレビュー