質問するログイン新規登録

質問編集履歴

1

コードの追加

2021/03/20 05:47

投稿

spa
spa

スコア52

title CHANGED
File without changes
body CHANGED
@@ -70,6 +70,101 @@
70
70
 
71
71
 
72
72
 
73
+ **### 追記** feedUrlのURLを入れ替えながら最新記事のタイトル、URL、日付を取得したい。
73
- ### 補足情報(FW/ツールバージョンなど)
74
+ 状態だと、1つのRSSにつき10件取得してしまう。
75
+ 最新のもののみがほしい。
74
76
 
77
+ ```javascript
78
+ function fetchTodayPosts(feedUrl) {
79
+
80
+ //スプレッドシートB列に記載されているRSSのURLを取得する。
81
+ var sheets = SpreadsheetApp.getActive().getSheetByName("blog_rss2");
82
+ for (let i = 1; i < sheets.getLastRow()+1; i++){
83
+ var rss_url = sheets.getRange(i, 2).getValues();
84
+
85
+
86
+ var feedUrl = rss_url;
87
+ var response = UrlFetchApp.fetch(feedUrl);
88
+ var rssXML = response.getContentText();
89
+ var document = XmlService.parse(rssXML);
90
+ var root = document.getRootElement();
91
+ var ns_rss = XmlService.getNamespace('http://purl.org/rss/1.0/');
92
+ var ns_dc = XmlService.getNamespace('dc', 'http://purl.org/dc/elements/1.1/');
93
+ var ns_atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
94
+ var ns_rdf = XmlService.getNamespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
95
+ var rootTagName = root.getName().toLowerCase();
96
+ var entries = [];
75
- ここにより詳細な情報を載してください。
97
+ // 事のリストを取得
98
+ switch (rootTagName) {
99
+ case 'rdf': // 1.0
100
+ entries = root.getChildren('item', ns_rss);
101
+ break;
102
+ case 'feed': // atom
103
+ entries = root.getChildren('entry', ns_atom);
104
+ break;
105
+ case 'rss': // 2.0
106
+ entries = root.getChild('channel').getChildren('item');
107
+ break;
108
+ default:
109
+ return false;
110
+ }
111
+ entries= entries.map(function(entry, index) {
112
+ var title;
113
+ var link;
114
+ var pubDate;
115
+ switch (rootTagName) {
116
+ case 'rdf': // 1.0
117
+ title = entry.getChild('title', ns_rss).getText();
118
+ link = entry.getChild('link', ns_rss).getText();
119
+ pubDate = entry.getChild('date', ns_dc).getText();
120
+ break;
121
+ case 'feed': // atom
122
+ title = entry.getChild('title', ns_atom).getText();
123
+ link = entry.getChild('link', ns_atom).getAttribute('href').getValue();
124
+ pubDate = entry.getChild('published', ns_atom).getText(); // 普段はこっちの方を利用する
125
+ // pubDate = entry.getChild('updated', ns_atom).getText(); // 今回はQiita用にupdatedを利用する
126
+ break;
127
+ case 'rss': // 2.0
128
+ title = entry.getChild('title').getText();
129
+ link = entry.getChild('link').getText();
130
+ pubDate = entry.getChild('pubDate').getText();
131
+ break;
132
+ }
133
+ return {'title':title,'link':link,'pubDate':pubDate};
134
+ }).sort(function(a,b){
135
+ aV=a['pubDate']
136
+ bV=b['pubDate']
137
+ if (aV< bV) {
138
+ return -1;
139
+ }
140
+ if (aV > bV) {
141
+ return 1;
142
+ }
143
+ return 0;
144
+ });
145
+
146
+ for (const entrie of entries){
147
+ console.log(entrie['title']);
148
+ console.log(entrie['link']);
149
+ console.log(entrie['pubDate']);
150
+
151
+ };
152
+ }
153
+ }
154
+
155
+ ```
156
+
157
+ ![イメージ説明](53a6e1c6230aefd4850e8c1c3283f65c.png)
158
+
159
+ **追記2** 下記を実行するとスプレッドシートB列に記述したRSSのURLを取得できる。これを応用して feedUrlを変えながら最新記事のみの情報を取得しようとしたが失敗。1つのRSSにつき10件ずつ、計50件取得されてしまう。
160
+ ```ここに言語を入力
161
+ function aaaaa(){
162
+ var sheets = SpreadsheetApp.getActive().getSheetByName("blog_rss2");
163
+ for (let i = 1; i < sheets.getLastRow()+1; i++){
164
+ var rss_url = sheets.getRange(i, 2).getValues();
165
+ Logger.log(rss_url);
166
+ }
167
+
168
+ }
169
+ ```
170
+ ![イメージ説明](a877c60764c0456087f60a113bfddb16.png)