GoogleAppsScript
ATOM
RSS
spreadsheet

GASでrssやatom(Google News)を読み込む

More than 1 year has passed since last update.

RSS

var rss = XmlService.getNamespace('http://purl.org/rss/1.0/')
var dc = XmlService.getNamespace('dc', 'http://purl.org/dc/elements/1.1/')

function readRss(url) {
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('シート1')

  // フィードを取得
  var response = UrlFetchApp.fetch(url).getContentText()

  // XMLをパース
  var xml = XmlService.parse(response)
  var root = xml.getRootElement()
  var items = root.getChildren('item', rss)

  // 読み込んだデータをスプレッドシートに出力
  sheet.clear()
  for (var i = 0; i < items.length; i++) {
    var title = items[i].getChild('title', rss).getText()
    var link = items[i].getChild('link', rss).getText()
    var date = Utilities.formatDate(new Date(items[i].getChild('date', dc).getText()), 'Asia/Tokyo', 'yyyy/MM/dd')

    sheet.getRange(i + 1, 1).setValue(title)
    sheet.getRange(i + 1, 2).setValue(link)
    sheet.getRange(i + 1, 3).setValue(date)
  }
}

※SHEET_IDにはスプレッドシートのIDをつかってください。

atom

ここではGoogle Newsを例にとります。

function getATOM(query) {
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('シート2')

  var feedURL= 'https://news.google.com/news/?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom&num=30&q=' + query

  var xml = UrlFetchApp.fetch(feedURL).getContentText()
  var document = XmlService.parse(xml)
  var root = document.getRootElement()
  var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom')

  var entries = root.getChildren('entry', atom)
  sheet.clear()
  for (var i = 0; i < entries.length; i++) {
    var title = entries[i].getChild('title', atom).getText()
    var link = entries[i].getChild('link', atom).getAttribute('href').getValue()
    var updated = entries[i].getChild('updated', atom).getText()
    var date = Utilities.formatDate(new Date(updated), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm')

    sheet.getRange(i + 1, 1).setValue(title)
    sheet.getRange(i + 1, 2).setValue(link)
    sheet.getRange(i + 1, 3).setValue(date)

    // 画像があれば抽出
    var content = entries[i].getChild('content', atom).getText()
    var start = content.indexOf('img src="')
    if (start >= 0) {
      var end = content.indexOf('"', start + 9)
      var imageUrl = content.substring(start + 9, end)
      sheet.getRange(i + 1, 4).setValue('https:' + imageUrl)
    }
  }
}