Skip to content

Instantly share code, notes, and snippets.

@moxmlb
Last active January 26, 2022 07:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moxmlb/e5c084801c5a211219f0c7082afb5a66 to your computer and use it in GitHub Desktop.
Save moxmlb/e5c084801c5a211219f0c7082afb5a66 to your computer and use it in GitHub Desktop.
COVID-19 Inzidenz-Widget für iOS innerhalb des Kreises Recklinghausen
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: orange; icon-glyph: home;
/* verfügbare Städte
castrop-rauxel
datteln
dorsten
gladbeck
haltern am see
herten
marl
oer-erkenschwick
recklinghausen
waltropp
*/
let city
let widgetInputRaw = args.widgetParameter;
let widgetInput = null
if(widgetInputRaw !== null) {
city = widgetInputRaw.toString()
}
if(city == null) {
city = "recklinghausen"
}
else {
city = city.toLowerCase()
}
let link = "https://www.kreis-re.de/dok/geoatlas/FME/CoStat/repGesKra.html"
let table = new UITable()
const webview = new WebView()
const result = await getHTMLCode()
const widget = new ListWidget()
let date
let kreisIncidence
let header
var cityValues = []
prepareData()
await createWidget()
if (!config.runsInWidget) {
await widget.presentSmall()
}
Script.setWidget(widget)
Script.complete()
async function getHTMLCode() {
await webview.loadURL(link)
let code = webview.getHTML()
return code
}
async function createWidget() {
widget.url = link
let headers = header.split(';')
var headerRow = new UITableRow()
headerRow.isHeader = true
for(var h = 0; h < headers.length; h++) {
let cell = UITableCell.text(headers[h], '')
headerRow.addCell(cell)
}
table.addRow(headerRow)
for(var c = 1; c < cityValues.length; c++) {
let values = cityValues[c].split(';')
var row = new UITableRow()
for(var v = 0; v < values.length; v++) {
let cell = UITableCell.text(values[v])
row.addCell(cell)
}
table.addRow(row)
}
let cityName
let incidence = "0"
let kIncidence = "0"
switch (city) {
case 'castrop-rauxel':
cityName = 'Castrop-Rauxel'
break
case 'datteln':
cityName = 'Datteln'
break
case 'dorsten':
cityName = 'Dorsten'
break
case 'gladbeck':
cityName = 'Gladbeck'
break
case 'haltern am see':
cityName = 'Haltern am See'
break
case 'herten':
cityName = 'Herten'
break
case 'marl':
cityName = 'Marl'
break
case 'oer-erkenschwick':
cityName = 'Oer-Erkenschwick'
break
case 'recklinghausen':
cityName = 'Recklinghausen'
break
case 'waltropp':
cityName = 'Waltropp'
break
default:
cityName = 'Recklinghausen'
}
for(var cv = 0; cv < cityValues.length; cv++) {
if(cityValues[cv].includes(cityName)) {
incidence = cityValues[cv].split(';')[3]
kIncidence = kreisIncidence
break
}
}
widget.setPadding(0, 0, 0, 0)
let textStack = widget.addStack()
textStack.setPadding(10, 10, 10, 10)
textStack.layoutVertically()
textStack.topAlignContent()
let wheader = textStack.addText("🦠 Inzidenz".toUpperCase())
wheader.font = Font.mediumSystemFont(13)
textStack.addSpacer()
let refreshDate = new Date(Date.now() + 60*60*1000)
widget.refreshAfterDate = refreshDate
let incidenceStack = textStack.addStack()
let valueStack = incidenceStack.addStack()
incidenceStack.layoutVertically()
incidenceStack.setPadding(0, 5, 20, 0)
let incidenceValueLabel = valueStack.addText(incidence)
incidenceValueLabel.font = Font.boldSystemFont(22)
incidenceValueLabel.textColor = parseInt(incidence) >= 100 ? new Color("9e000a") : parseInt(incidence) >= 50 ? Color.red() : parseInt(incidence) >= 35 ? Color.yellow() : Color.green();
incidenceStack.addText(cityName)
valueStack.addSpacer(10)
let kreisStack = valueStack.addStack()
let kreisText = kreisStack.addText(kIncidence + "\n" + "RE")
kreisStack.backgroundColor = new Color('888888', .5)
kreisStack.cornerRadius = 4
kreisStack.setPadding(2, 4, 2, 4)
kreisText.font = Font.mediumSystemFont(10)
kreisText.textColor = Color.white()
valueStack.addSpacer()
let dateStack = textStack.addStack()
dateStack.setPadding(10, 10, 0, 10)
let lastStand = dateStack.addText("Stand:" + date)
lastStand.font = Font.mediumSystemFont(8)
dateStack.layoutVertically()
//table.present()
}
function prepareData() {
var string = result
let divs = string.split("<div")
for(var i = 0; i < divs.length-1; i++) {
if (divs[i].includes("Stand")) {
var infos = divs[i].split("Stand")
var kreisValue = infos[0]
kreisValue = kreisValue.split("7-Tage-Inzidenz&nbsp;")[1].replace('</strong> (', '')
kreisIncidence = kreisValue
var stand = infos[1].replaceAll('&nbsp;', " ")
stand = stand.split(")")[0]
date = stand
}
else if (divs[i].includes("table")) {
let rows = divs[i].split("<tr>")
for (var r = 1; r < rows.length; r++) {
if (rows[r].includes('<th') && rows[r].includes('</th>')) {
rows[r] = rows[r].replaceAll('<th style="border:0; color:#fff; vertical-align: middle">','').replaceAll('</tr>','').replaceAll('</thead>','').replaceAll('<tbody>','').replaceAll('-<br>','-').replaceAll('<br>',' #').replaceAll('</th>',';').replaceAll(' ;', ';').replaceAll('\n','').replaceAll(' ','').replaceAll('#',' ')
header = rows[r]
}
else {
rows[r] = rows[r].replaceAll('<td style="border:0"><a href="DiagGesKra-Castrop-Rauxel.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Datteln.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Dorsten.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Gladbeck.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Haltern_am_See.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Herten.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Marl.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Oer-Erkenschwick.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Recklinghausen.html" target="_blank">','').replaceAll('<td style="border:0"><a href="DiagGesKra-Waltrop.html" target="_blank">','').replaceAll('<td style="border:0">','').replaceAll('</tr>','').replaceAll('</tbody>','').replaceAll('</table>','').replaceAll('</a>','').replaceAll('\n', '').replaceAll(' ','').replaceAll('HalternamSee', 'Haltern am See').replaceAll('</td>',';')
}
if(cityValues.length == 0) {
cityValues = [rows[r]]
}
else {
cityValues.push(rows[r])
}
}
}
}
}
@moxmlb
Copy link
Author

moxmlb commented Jan 13, 2021

Intro

Das Widget wurde auf Basis des COVID-19 Inzidenz-Widget von kevinkub erstellt.

Dieses Widget wurde speziell für den Kreis Recklinghausen angepasst. Es ruft die aktuellen Zahlen von der Corona Webseite des Kreises Recklinghausen ab und bereitet diese Daten für das Widget auf.

Das Widget zeigt den aktuellen 7-Tage-Inzidenz Wert der angegebenen Stadt und daneben den Wert für den gesamten Kreis Recklinghausen.

Vorraussetzungen

  • iPhone oder iPad mit mindestens iOS 14
  • Installierte Scriptable App Version 1.5 oder neuer
  • Parameter

Folgende Städtenamen können als Parameter im Widget hinterlegt werden, als Standardwert wird der Wert von Recklinghausen verwendet.
castrop-rauxel
datteln
dorsten
gladbeck
haltern am see
herten
marl
oer-erkenschwick
recklinghausen
waltropp

Installation

  • Kopiere den Code oben
  • Gehe zur Scriptable App und erstelle ein neues Skript
  • Füge den kopierten Code ein
  • Speicher das Skript mit dem "Done" Button
  • Gehe zu deinem iOS Home Bildschirm und halte solange den Bildschirm gedrückt, bis du Apps verschieben oder löschen kannst
  • Drücke das "+" Symbol in der oberen linken Ecke und scrolle herunter zu Scriptable. Wähle die Widget Größe aus (empfohlen: small) und drücke "Widget hinzufügen"
  • Drücke auf das Widget um in die Einstellungen zu gelangen (Alternativ: drücke und halte das Widget gedrückt um in den Bearbeiten Modus zu gelangen)
  • Unter "Script" wähle das gerade erstellte Skript aus und gib bei "Parameter" einen der oben genannten Städte ein
    Bildschirmfoto 2021-01-13 um 16 51 36

Haftungsausschluss

Dies ist ein Spaß Projekt, welches von mir erstellt wurde. Es wurde auf Basis des COVID-19 Inzidenz-Widget von kevinkub erstellt.

Ergebnis

Bildschirmfoto 2021-01-13 um 16 54 55

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment