Skip to content

Instantly share code, notes, and snippets.

@arturgrigor
Created September 23, 2018 13:36
Show Gist options
  • Save arturgrigor/dac8607f1d306401437068cc2f8ffafa to your computer and use it in GitHub Desktop.
Save arturgrigor/dac8607f1d306401437068cc2f8ffafa to your computer and use it in GitHub Desktop.
Shows the latest Monkey User comic in Siri using Scriptable
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: teal; icon-glyph: magic;
// Loads the latest Monkey User comic and shows it.
let rssTag = "rss"
let channelTag = "channel"
let itemTag = "item"
let titleTag = "title"
let descriptionTag = "description"
let url = "http://monkeyuser.com/feed.xml"
let req = new Request(url)
let xml = await req.loadString()
let parser = new XMLParser(xml)
var isRSSTagOpen = false
var isChannelTagOpen = false
var isItemTagOpen = false
var isTitleTagOpen = false
var isDescriptionTagOpen = false
var titleDetected = false
var descriptionDetected = false
var title = ""
var description = ""
parser.didStartElement = function(str) {
switch (str) {
case rssTag:
isRSSTagOpen = true
break
case channelTag:
isChannelTagOpen = true
break
case itemTag:
isItemTagOpen = true
break
case titleTag:
isTitleTagOpen = true
break
case descriptionTag:
isDescriptionTagOpen = true
break
}
}
parser.didEndElement = function(str) {
switch (str) {
case rssTag:
isRSSTagOpen = false
break
case channelTag:
isChannelTagOpen = false
break
case itemTag:
isItemTagOpen = false
break
case titleTag:
isTitleTagOpen = false
titleDetected = true
break
case descriptionTag:
isDescriptionTagOpen = false
descriptionDetected = true
break
}
}
parser.foundCharacters = function (str) {
if (titleDetected && descriptionDetected) { return }
if (isRSSTagOpen && isChannelTagOpen && isItemTagOpen && isTitleTagOpen) {
title += str
} else if (isRSSTagOpen && isChannelTagOpen && isItemTagOpen && isDescriptionTagOpen) {
description += str
}
}
parser.parse()
console.log(title)
console.log(description)
let matches = description.match(/src="([^"]*)"/)
url = matches[1]
console.log(url)
req = new Request(url)
let img = await req.loadImage()
QuickLook.present(img)
if (config.runsWithSiri) {
Speech.speak(title)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment