質問編集履歴

1

コードの追加

2021/03/20 05:47

投稿

spa
spa

スコア52

test CHANGED
File without changes
test CHANGED
@@ -142,8 +142,198 @@
142
142
 
143
143
 
144
144
 
145
+ **### 追記** feedUrlのURLを入れ替えながら最新記事のタイトル、URL、日付を取得したい。
146
+
147
+ 今の状態だと、1つのRSSにつき10件取得してしまう。
148
+
149
+ 最新のもののみがほしい。
150
+
151
+
152
+
153
+ ```javascript
154
+
155
+ function fetchTodayPosts(feedUrl) {
156
+
157
+
158
+
159
+ //スプレッドシートB列に記載されているRSSのURLを取得する。
160
+
161
+ var sheets = SpreadsheetApp.getActive().getSheetByName("blog_rss2");
162
+
163
+ for (let i = 1; i < sheets.getLastRow()+1; i++){
164
+
165
+ var rss_url = sheets.getRange(i, 2).getValues();
166
+
167
+
168
+
169
+
170
+
171
+ var feedUrl = rss_url;
172
+
173
+ var response = UrlFetchApp.fetch(feedUrl);
174
+
175
+ var rssXML = response.getContentText();
176
+
177
+ var document = XmlService.parse(rssXML);
178
+
179
+ var root = document.getRootElement();
180
+
181
+ var ns_rss = XmlService.getNamespace('http://purl.org/rss/1.0/');
182
+
183
+ var ns_dc = XmlService.getNamespace('dc', 'http://purl.org/dc/elements/1.1/');
184
+
185
+ var ns_atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
186
+
187
+ var ns_rdf = XmlService.getNamespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
188
+
189
+ var rootTagName = root.getName().toLowerCase();
190
+
191
+ var entries = [];
192
+
145
- ### 補足情報(FW/ツールバージョンなど)
193
+ // 記事リストを取得
194
+
146
-
195
+ switch (rootTagName) {
196
+
147
-
197
+ case 'rdf': // 1.0
198
+
148
-
199
+ entries = root.getChildren('item', ns_rss);
200
+
201
+ break;
202
+
203
+ case 'feed': // atom
204
+
205
+ entries = root.getChildren('entry', ns_atom);
206
+
207
+ break;
208
+
209
+ case 'rss': // 2.0
210
+
211
+ entries = root.getChild('channel').getChildren('item');
212
+
213
+ break;
214
+
215
+ default:
216
+
217
+ return false;
218
+
219
+ }
220
+
221
+ entries= entries.map(function(entry, index) {
222
+
223
+ var title;
224
+
225
+ var link;
226
+
227
+ var pubDate;
228
+
229
+ switch (rootTagName) {
230
+
231
+ case 'rdf': // 1.0
232
+
233
+ title = entry.getChild('title', ns_rss).getText();
234
+
235
+ link = entry.getChild('link', ns_rss).getText();
236
+
237
+ pubDate = entry.getChild('date', ns_dc).getText();
238
+
239
+ break;
240
+
241
+ case 'feed': // atom
242
+
243
+ title = entry.getChild('title', ns_atom).getText();
244
+
245
+ link = entry.getChild('link', ns_atom).getAttribute('href').getValue();
246
+
247
+ pubDate = entry.getChild('published', ns_atom).getText(); // 普段はこっちの方を利用する
248
+
249
+ // pubDate = entry.getChild('updated', ns_atom).getText(); // 今回はQiita用にupdatedを利用する
250
+
251
+ break;
252
+
253
+ case 'rss': // 2.0
254
+
255
+ title = entry.getChild('title').getText();
256
+
257
+ link = entry.getChild('link').getText();
258
+
259
+ pubDate = entry.getChild('pubDate').getText();
260
+
261
+ break;
262
+
263
+ }
264
+
265
+ return {'title':title,'link':link,'pubDate':pubDate};
266
+
267
+ }).sort(function(a,b){
268
+
269
+ aV=a['pubDate']
270
+
271
+ bV=b['pubDate']
272
+
273
+ if (aV< bV) {
274
+
275
+ return -1;
276
+
277
+ }
278
+
279
+ if (aV > bV) {
280
+
281
+ return 1;
282
+
283
+ }
284
+
285
+ return 0;
286
+
287
+ });
288
+
289
+
290
+
291
+ for (const entrie of entries){
292
+
293
+ console.log(entrie['title']);
294
+
295
+ console.log(entrie['link']);
296
+
297
+ console.log(entrie['pubDate']);
298
+
299
+
300
+
301
+ };
302
+
303
+ }
304
+
305
+ }
306
+
307
+
308
+
309
+ ```
310
+
311
+
312
+
313
+ ![イメージ説明](53a6e1c6230aefd4850e8c1c3283f65c.png)
314
+
315
+
316
+
317
+ **追記2** 下記を実行するとスプレッドシートB列に記述したRSSのURLを取得できる。これを応用して feedUrlを変えながら最新記事のみの情報を取得しようとしたが失敗。1つのRSSにつき10件ずつ、計50件取得されてしまう。
318
+
319
+ ```ここに言語を入力
320
+
321
+ function aaaaa(){
322
+
323
+ var sheets = SpreadsheetApp.getActive().getSheetByName("blog_rss2");
324
+
325
+ for (let i = 1; i < sheets.getLastRow()+1; i++){
326
+
327
+ var rss_url = sheets.getRange(i, 2).getValues();
328
+
149
- ここにより詳細な情報を記載してください。
329
+ Logger.log(rss_url);
330
+
331
+ }
332
+
333
+
334
+
335
+ }
336
+
337
+ ```
338
+
339
+ ![イメージ説明](a877c60764c0456087f60a113bfddb16.png)