Last active
January 26, 2022 07:23
-
-
Save moxmlb/e5c084801c5a211219f0c7082afb5a66 to your computer and use it in GitHub Desktop.
COVID-19 Inzidenz-Widget für iOS innerhalb des Kreises Recklinghausen
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 ")[1].replace('</strong> (', '') | |
kreisIncidence = kreisValue | |
var stand = infos[1].replaceAll(' ', " ") | |
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]) | |
} | |
} | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
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
Haftungsausschluss
Dies ist ein Spaß Projekt, welches von mir erstellt wurde. Es wurde auf Basis des COVID-19 Inzidenz-Widget von kevinkub erstellt.
Ergebnis