前提・実現したいこと
GASを使ってRSSを取得したのですが、10件取得になってしまいます。
1件だけ取得するにはどうすればよいか、アドバイスよろしくお願いします。
(コードは他の方が制作したものを参考にさせていただいています。)
該当のソースコード
javascript
1function fetchTodayPosts(feedUrl) { 2 var feedUrl = "http://umamusu.blog.jp/index.rdf"; 3 var response = UrlFetchApp.fetch(feedUrl); 4 var rssXML = response.getContentText(); 5 var document = XmlService.parse(rssXML); 6 var root = document.getRootElement(); 7 var ns_rss = XmlService.getNamespace('http://purl.org/rss/1.0/'); 8 var ns_dc = XmlService.getNamespace('dc', 'http://purl.org/dc/elements/1.1/'); 9 var ns_atom = XmlService.getNamespace('http://www.w3.org/2005/Atom'); 10 var ns_rdf = XmlService.getNamespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); 11 var rootTagName = root.getName().toLowerCase(); 12 var entries = []; 13 // 記事のリストを取得 14 switch (rootTagName) { 15 case 'rdf': // 1.0 16 entries = root.getChildren('item', ns_rss); 17 break; 18 case 'feed': // atom 19 entries = root.getChildren('entry', ns_atom); 20 break; 21 case 'rss': // 2.0 22 entries = root.getChild('channel').getChildren('item'); 23 break; 24 default: 25 return false; 26 } 27 return entries.map(function(entry, index) { 28 var title; 29 var link; 30 var pubDate; 31 switch (rootTagName) { 32 case 'rdf': // 1.0 33 title = entry.getChild('title', ns_rss).getText(); 34 link = entry.getChild('link', ns_rss).getText(); 35 pubDate = entry.getChild('date', ns_dc).getText(); 36 break; 37 case 'feed': // atom 38 title = entry.getChild('title', ns_atom).getText(); 39 link = entry.getChild('link', ns_atom).getAttribute('href').getValue(); 40 pubDate = entry.getChild('published', ns_atom).getText(); // 普段はこっちの方を利用する 41 // pubDate = entry.getChild('updated', ns_atom).getText(); // 今回はQiita用にupdatedを利用する 42 break; 43 case 'rss': // 2.0 44 title = entry.getChild('title').getText(); 45 link = entry.getChild('link').getText(); 46 pubDate = entry.getChild('pubDate').getText(); 47 break; 48 } 49 Logger.log(title); 50 Logger.log(link); 51 Logger.log(pubDate); 52 53 return ''; 54 }).filter(function(item) { 55 return item !== ''; 56 }); 57 58} 59
### 追記 feedUrlのURLを入れ替えながら最新記事のタイトル、URL、日付を取得したい。
今の状態だと、1つのRSSにつき10件取得してしまう。
最新のもののみがほしい。
javascript
1function fetchTodayPosts(feedUrl) { 2 3//スプレッドシートB列に記載されているRSSのURLを取得する。 4 var sheets = SpreadsheetApp.getActive().getSheetByName("blog_rss2"); 5 for (let i = 1; i < sheets.getLastRow()+1; i++){ 6 var rss_url = sheets.getRange(i, 2).getValues(); 7 8 9 var feedUrl = rss_url; 10 var response = UrlFetchApp.fetch(feedUrl); 11 var rssXML = response.getContentText(); 12 var document = XmlService.parse(rssXML); 13 var root = document.getRootElement(); 14 var ns_rss = XmlService.getNamespace('http://purl.org/rss/1.0/'); 15 var ns_dc = XmlService.getNamespace('dc', 'http://purl.org/dc/elements/1.1/'); 16 var ns_atom = XmlService.getNamespace('http://www.w3.org/2005/Atom'); 17 var ns_rdf = XmlService.getNamespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); 18 var rootTagName = root.getName().toLowerCase(); 19 var entries = []; 20 // 記事のリストを取得 21 switch (rootTagName) { 22 case 'rdf': // 1.0 23 entries = root.getChildren('item', ns_rss); 24 break; 25 case 'feed': // atom 26 entries = root.getChildren('entry', ns_atom); 27 break; 28 case 'rss': // 2.0 29 entries = root.getChild('channel').getChildren('item'); 30 break; 31 default: 32 return false; 33 } 34 entries= entries.map(function(entry, index) { 35 var title; 36 var link; 37 var pubDate; 38 switch (rootTagName) { 39 case 'rdf': // 1.0 40 title = entry.getChild('title', ns_rss).getText(); 41 link = entry.getChild('link', ns_rss).getText(); 42 pubDate = entry.getChild('date', ns_dc).getText(); 43 break; 44 case 'feed': // atom 45 title = entry.getChild('title', ns_atom).getText(); 46 link = entry.getChild('link', ns_atom).getAttribute('href').getValue(); 47 pubDate = entry.getChild('published', ns_atom).getText(); // 普段はこっちの方を利用する 48 // pubDate = entry.getChild('updated', ns_atom).getText(); // 今回はQiita用にupdatedを利用する 49 break; 50 case 'rss': // 2.0 51 title = entry.getChild('title').getText(); 52 link = entry.getChild('link').getText(); 53 pubDate = entry.getChild('pubDate').getText(); 54 break; 55 } 56 return {'title':title,'link':link,'pubDate':pubDate}; 57 }).sort(function(a,b){ 58 aV=a['pubDate'] 59 bV=b['pubDate'] 60 if (aV< bV) { 61 return -1; 62 } 63 if (aV > bV) { 64 return 1; 65 } 66 return 0; 67 }); 68 69 for (const entrie of entries){ 70 console.log(entrie['title']); 71 console.log(entrie['link']); 72 console.log(entrie['pubDate']); 73 74 }; 75 } 76} 77
追記2 下記を実行するとスプレッドシートB列に記述したRSSのURLを取得できる。これを応用して feedUrlを変えながら最新記事のみの情報を取得しようとしたが失敗。1つのRSSにつき10件ずつ、計50件取得されてしまう。
function aaaaa(){ var sheets = SpreadsheetApp.getActive().getSheetByName("blog_rss2"); for (let i = 1; i < sheets.getLastRow()+1; i++){ var rss_url = sheets.getRange(i, 2).getValues(); Logger.log(rss_url); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/20 00:26
2021/03/20 02:40
2021/03/20 04:04
2021/03/20 04:36 編集
2021/03/20 04:34 編集
2021/03/20 04:49 編集
2021/03/20 05:50
2021/03/20 06:04
2021/03/20 06:15
2021/03/20 06:55
2021/03/20 06:59
2021/03/20 07:11