はじめに
複数のプラットフォームから記事一覧を取得したい!
なるべく処理を共通化したい!
RSS1.0 / RSS2.0 / Atom
こちらの記事がとても参考になります。
記事情報の取得(Feed)のための仕組みは3種類あるようです。
仕組み | 採用プラットフォーム | タイトルの取得方法 |
---|---|---|
RSS1.0 | ||
RSS2.0 | Zenn / しずかなインターネット / note | channel > item > title |
Atom | Qiita / Github(コミット情報) | entry > title |
同じ仕組みを採用している場合、処理を共通化することができます。
共通化した処理
プラットフォームごとのURLを受け取り、共通化された処理を行います。
返り値は{title:string, link:string, published:date}
です。
仕組みによりますが、以下の要素も取得可能です。
-
description
:書き出し等 -
enclosure
:見出し画像 -
author
:著者 -
updated
:更新日時
RSS2.0の場合(GAS)
const getRss2 = (url) => {
// RSSフィードを取得
const response = UrlFetchApp.fetch(url);
const xml = response.getContentText();
// XMLをパース
const document = XmlService.parse(xml);
const items = document.getRootElement().getChild('channel').getChildren('item');
// 連想配列のリストを作成
const feedData = items.map(item => {
const title = item.getChild('title').getText();
const link = item.getChild('link').getText();
const published = item.getChild('pubDate').getText();
return {
title: title,
link: link,
published: published
};
});
return feedData;
}
Atomの場合
const getAtom = (url) => {
const response = UrlFetchApp.fetch(url);
const xml = response.getContentText();
// XMLをパース
const document = XmlService.parse(xml);
const entries = document.getRootElement().getChildren('entry', XmlService.getNamespace('http://www.w3.org/2005/Atom'));
// 連想配列のリストを作成
const feedData = entries.map(entry => {
const title = entry.getChild('title', XmlService.getNamespace('http://www.w3.org/2005/Atom')).getText();
const link = entry.getChild('link', XmlService.getNamespace('http://www.w3.org/2005/Atom')).getAttribute('href').getValue();
const published = entry.getChild('published', XmlService.getNamespace('http://www.w3.org/2005/Atom')).getText();
return {
title: title,
link: link,
published: published
};
});
return feedData;
}
参考記事
各サイトのFeed URL
Feedの種類