[GAS] ATOMを読み取ってGoogle Spreadsheetに書き込む
残念なことに、dlvr.itの無料プランが無くなると言うことで、ブログの記事をXにフィードするには自前で何とかするしかなくなりましたね。
そんなわけで、GASを初めてX APIを調べ始めたわけです。
で、一応、Xへの投稿ができることは分かったので、次はブログの記事の確認方法を調べていきます。
そもそもdlvr.itを設定するにあたって、ブログのAtomは調べてあったので、そのAtomを拾って解析すれば良いよね、と考えました。
拾ったAtomは保存することになります。保存先は何かと考えれば、まあ、Google Spreadsheetですよね。
なので、まずは、新しいGoogle Spreadsheetを作ります。
Googleドライブの画面で、ファイルの表示されているところで右クリックし、でてきたメニューから「Googleスプレッドシート」を選択。
その画面で、「拡張機能」→「App Script」を選んで、Google App Scriptの画面を出します。
そこで、コード.gsの中身を以下で置き換えます。
function fetchAtomFeedTsuretsu() {
// AtomフィードのURL
const url = 'https://tsuretsu.blogspot.com/feeds/posts/default';
// ネームスペース
const ns = XmlService.getNamespace('http://www.w3.org/2005/Atom');
const ns_media = XmlService.getNamespace('http://search.yahoo.com/mrss/');
// Atomフィードを取得
let response = UrlFetchApp.fetch(url);
let xml = response.getContentText();
// XMLデータをパース
let document = XmlService.parse(xml);
let root = document.getRootElement();
// エントリーを取得
let entries = root.getChildren('entry', ns);
// スプレッドシートに書き込むための準備
let data = [];
// 各エントリーのタイトルとリンクを取得
for (let entry of entries) {
// タイトルを取得
let title = entry.getChildText('title', ns);
// URLを取得
let href = '';
for (let link of entry.getChildren('link', ns)) {
let rel = link.getAttribute('rel');
if (rel && rel.getValue() === 'alternate') {
href = link.getAttribute('href').getValue();
break; // 最初の rel="alternate" のリンクのみ取得
}
}
// Thumbnailを取得
let thumbnail = entry.getChild('thumbnail', ns_media);
let thumbnail_url = '';
if (thumbnail) {
thumbnail_url = thumbnail.getAttribute('url').getValue();
}
// タイトルとリンクをデータに追加
data.push([title, href, thumbnail_url]);
}
// スプレッドシートにデータを書き込む(追記する)
if (data.length > 0) {
// スプレッドシートを取得 (シート名を指定)
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
// スプレッドシートの最終行の下に書く
sheet.getRange(sheet.getLastRow() + 1, 1, data.length, 3).setValues(data);
}
}
保存すると「デバッグ」の右側のプルダウンで、fetchAtomFeedTsuretsu が選択されていると思います。
それを確認したら「実行」を押して、権限を確認すれば実行開始、そして終了。
それで、Googleスプレッドシートの方の画面に切り替えれば「シート1」に実行結果が書き込まれていると思います。
と言うことで、Atomの読み込みができるようになりました。


