Skip to content

Instantly share code, notes, and snippets.

@klaus-schuster
Forked from rphl/incidence.js
Last active May 17, 2022 10:41
Show Gist options
  • Save klaus-schuster/0537cd7f491a67ce61fe9064c4b4e932 to your computer and use it in GitHub Desktop.
Save klaus-schuster/0537cd7f491a67ce61fe9064c4b4e932 to your computer and use it in GitHub Desktop.
COVID-19 Inzidenz-Widget für iOS für HAMBURG (nutzt die Daten der HH-Website und nicht die des RKI)
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: deep-blue; icon-glyph: grimace;
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// Corona Zahlen Hamburg | https://www.hamburg.de/corona-zahlen
// Credits:
// kevinkub https://gist.github.com/kevinkub/46caebfebc7e26be63403a7f0587f664
// rphl https://gist.github.com/rphl/0491c5f9cb345bf831248732374c4ef5
// eqsOne https://talk.automators.fm/t/widget-examples/7994/379
let widget = new ListWidget()
widget.setPadding(8, 16, 16, 16)
const spc = 3
let hourNow = new Date().getHours()
//Define nighttime (19h - 7h) for styling changes
var nightTime = (hourNow >= 19 || hourNow < 7)
//Title text
let titleTxt = widget.addText("🦠 Hamburg")
titleTxt.font= Font.boldSystemFont(17)
titleTxt.leftAlignText()
widget.addSpacer(spc*2)
//Value text
let vlFnt = Font.semiboldSystemFont(20)
//Subtitle text
let ptFnt = Font.systemFont(8)
let ptCol
//Backgrund- & text colors
if (nightTime) {
//titleTxt.textColor = Color.lightGray()
//ptCol = Color.gray()
const gradient = new LinearGradient()
gradient.locations = [0, 1]
gradient.colors = [
new Color("192331"),
new Color("222222")
]
//widget.backgroundGradient = gradient
}
else {
//titleTxt.textColor = Color.darkGray()
//ptCol = Color.darkGray()
}
await loadSite()
if (!config.runsInWidget) widget.presentSmall()
Script.setWidget(widget)
Script.complete()
async function loadSite() {
let url='https://www.hamburg.de/corona-zahlen'
let wbv = new WebView()
await wbv.loadURL(url)
//javasript to grab data from the website
let jsc = `
var arr = new Array()
var incr = document
.getElementsByClassName("cv_chart cv_color_seven")[0]
.getElementsByTagName("span")[0]
.innerText
arr.push(incr)
var sevend = document
.getElementsByClassName("cv_side_teaser")[0]
.getElementsByClassName("teaser-text c_chartheadline ")[0]
.getElementsByTagName("strong")[0]
.innerText
arr.push(sevend)
var updated = document
.getElementsByClassName("cv_side_teaser")[0]
.getElementsByClassName("teaser-text c_chartheadline ")[0]
.getElementsByTagName("strong")[1]
.innerText
.replace("(","")
.replace(")","")
arr.push(updated)
JSON.stringify(arr)
`
//Run the javascript
let jsn = await wbv.evaluateJavaScript(jsc)
//Parse the grabbed values into a variable
let val = JSON.parse(jsn)
//Assign the parts to single variables
let incr = val[0]
let sevend = val[1]
let updated = val[2]
//Neuinfektionen
if (incr != null) {
let tx2 = widget.addText(incr)
tx2.leftAlignText()
tx2.font = vlFnt
}
let tx1 = widget.addText("Neuinfektionen")
tx1.textColor = ptCol
tx1.font= ptFnt
tx1.leftAlignText()
widget.addSpacer(spc)
//7 Tage Inz.
if (sevend != null) {
let tx4 = widget.addText(sevend)
tx4.leftAlignText()
tx4.font = vlFnt
if (parseFloat(sevend) >= 50) {
tx4.textColor = Color.red()
} else if (parseFloat(sevend) >= 35) {
tx4.textColor = Color.orange()
} else {
tx4.textColor = Color.green()
}
}
let tx3 = widget.addText("7-Tage Inzidenz")
tx3.textColor = ptCol
tx3.font= ptFnt
tx3.leftAlignText()
widget.addSpacer(spc*4)
// UPDATED
let today = new Date()
let updated_date = new Date()
updated_date.setYear(parseInt(updated.substr(6, 4)))
updated_date.setMonth(parseInt(updated.substr(3, 2))-1)
updated_date.setDate(parseInt(updated.substr(0, 2)))
let tx5 = widget.addText(updated)
tx5.font = Font.systemFont(14)
tx5.rightAlignText()
if (sameDate(today,updated_date)) {
tx5.textColor = Color.green()
} else {
tx5.textColor = Color.red()
}
let tx6 = widget.addText("Datenstand Website")
tx6.textColor = ptCol
tx6.font= ptFnt
tx6.rightAlignText()
}
function sameDate(date1, date2) {
return date1.getDate() == date2.getDate() &&
date1.getMonth() == date2.getMonth() &&
date1.getFullYear() == date2.getFullYear();
}
@klaus-schuster
Copy link
Author

Hallo,
kann man die Zahlen von dieser Seite auch als Widget darstellen?
https://www.lahn-dill-kreis.de/buergerservice/gesundheitsamt/hygiene-infektion/lahn-dill-kreisdecoronavirus/
Die, die unter der Rubrik "Fallzahlen im Lahn-Dill-Kreis" in der Mitte der Seite stehen.
Also das Datum, die aktiven Corona-Fälle, die betreuten Kontaktpersonen und vor allem die 7-Tage-Inzidenz.

Diese Zahlen sind für meinen Bereich aktueller wie die ses RKI.

Klar, man muss den source code der Seite Zerlegen und hoffen, dass die Seite täglich gleich aufgebaut ist. (Also der Text sich nicht ändert.) Die Hamurger Seite generiert sich wahrscheinlich auf Grund von Daten selber, Deine sieht aus als würde jemand täglich den Text updaten. Aber wenn die Sätze immer gleich bleiben kann man natürlich die Zahlen darin suchen. Bei mir oben passiert das zwischen Zeile 68 und 88. Dort werden die 3 Werte gesucht und zur Ausgabe abgespeichert

@hal0003
Copy link

hal0003 commented Oct 25, 2020

Vielen herzlichen Dank für die Antwort. :)
Ich glaube auch, das die Seite händisch gepflegt wird.
Ich beobachte die Seite aber jetztz schon monatelang. Die betreffenden Sätze bleiben aber immer gleich.
Leider kann ich kein Javascript. Die einzelnen Sequenzen im Code der Seite habe ich gefunden.
Jetzt schaue ich mir mal dein Script an und versuche zu verstehen, wie das geht.

@klaus-schuster
Copy link
Author

klaus-schuster commented Oct 25, 2020

@hamburgaltona
Copy link

Hi Klaus, wie bekomme ich die Inzidenz aus meinem Bezirk mitangezeigt? Hamburg zeigt die Werte in einer Tabelle mit an. Kannst du das auch einbauen?

@hal0003
Copy link

hal0003 commented Oct 25, 2020

Glück gehabt, da hatte ich gerade richtig Lust zu :-)

https://gist.github.com/kevinkub/46caebfebc7e26be63403a7f0587f664#gistcomment-3503239

WOW! Vielen herzlichen Dank! :))
Wo so ein Dankeschön ja gar nicht ausreicht. Du bist mein Held!!!
Klasse!

@jpht80
Copy link

jpht80 commented Oct 25, 2020

Leider kann ich nicht programmieren. Aber es ist klasse was hier alles geht; was du kannst. Die fertigen Scripte benutzen kann ich. Also das abändern für meinen Ort. Aber leider keine ganzen erstellen. Daher meine Frage, ob du mir eins für Niedersachsen machen kannst. Mit aktuellen Zahlen die nicht vom RKI stammen. Am liebsten eins wo ich den Ort selber per Parameter wählen kann.
Vielleicht geht es mit Daten von dieser Seite:
https://www.niedersachsen.de/Coronavirus/aktuelle_lage_in_niedersachsen/

Genauer gesagt für Osnabrück Stadt und Landkreis.
Das wäre echt nett. :-)

@xturn2u
Copy link

xturn2u commented Oct 25, 2020

Hallo, ich finde das Script echt toll. Schade ist nur, dass es nur für Hamburg gemacht wurde. Ich verstehe, dass die Basis eines Datenabzugs eine gute Webseite ist. Ich habe mich deshalb auf die Suche gemacht eine Seite zu finden, die möglicherweise eine allgemeine Datenquelle sein kann.
Hier bin ich fündig geworden. https://covid.9digits.de/lockdown/89233 --> als Beispiel für den Landkreis Neu-Ulm. Einfach die PLZ eingeben und die Daten werden geladen. Vielleicht wäre es ja möglich diese Seite zu verwenden.
Danke für die evtl. Erstellung für Neu-Ulm oder alle Anderen.

@klaus-schuster
Copy link
Author

klaus-schuster commented Oct 25, 2020

Hallo, ich finde das Script echt toll. Schade ist nur, dass es nur für Hamburg gemacht wurde. Ich verstehe, dass die Basis eines Datenabzugs eine gute Webseite ist. Ich habe mich deshalb auf die Suche gemacht eine Seite zu finden, die möglicherweise eine allgemeine Datenquelle sein kann.
Hier bin ich fündig geworden. https://covid.9digits.de/lockdown/89233 --> als Beispiel für den Landkreis Neu-Ulm. Einfach die PLZ eingeben und die Daten werden geladen. Vielleicht wäre es ja möglich diese Seite zu verwenden.
Danke für die evtl. Erstellung für Neu-Ulm oder alle Anderen.

sind die daten denn aktueller, als die vom RKI ? sonst kannst du für neu-ulm ja auch das rki script nehmen?

https://gist.github.com/rphl/0491c5f9cb345bf831248732374c4ef5

oder

https://gist.github.com/kevinkub/46caebfebc7e26be63403a7f0587f664

@caliban73
Copy link

Hallo Klaus, ja, wie es scheint sind die Daten tatsächlich aktueller. Würde sich also lohnen.

@basso314
Copy link

basso314 commented Oct 30, 2020

Hallo caliban73, hallo Klaus,

sorry, dass ich mich einmische, aber da die Daten von covid.9digits.de/lockdown auch für meinen Landkreis sehr aktuell und damit viel aktueller als die RKI-Daten sind, habe ich mich mal daran versucht. @klaus-schuster: ich habe deine Vorlage mal aufgenommen und angepasst.
In der Zeile 23 muss nur der Landkreisname eingetragen werden und in Zeile 59 die PLZ.
Die Anzahl der Personen in Quarantäne ist die aktuell zusätzlich in Quarantäne befindlichen Personen.

https://gist.github.com/basso314/c8adb9c4248c9afb058c6dfce99c4437

@klaus-schuster
Copy link
Author

super!

@caliban73
Copy link

Hallo caliban73, hallo Klaus,

sorry, dass ich mich einmische, aber da die Daten von covid.9digits.de/lockdown auch für meinen Landkreis sehr aktuell und damit viel aktueller als die RKI-Daten sind, habe ich mich mal daran versucht. @klaus-schuster: ich habe deine Vorlage mal aufgenommen und angepasst.
In der Zeile 23 muss nur der Landkreisname eingetragen werden und in Zeile 59 die PLZ.
Die Anzahl der Personen in Quarantäne ist die aktuell zusätzlich in Quarantäne befindlichen Personen.

https://gist.github.com/basso314/c8adb9c4248c9afb058c6dfce99c4437

Sehr gut. Danke.

@bondskin
Copy link

Hat noch jemand unter ios15 das Problem, dass das Widget nicht mehr funktioniert?

@basso314
Copy link

Ja, hier ebenso... wie ich auf reddit gelesen habe, liegt es daran, dass die WebView.GetHtml-Methode unter ios15 nicht mehr funktioniert.
Ich warte daher auf ein Update der Scriptable-App und benutze bis dahin ein Widget, das nur die API vom RKI abfragt, das funktioniert noch.

https://www.reddit.com/r/Scriptable/comments/pht7xy/webviewgethtml_doesnt_work_on_ios_15_beta/

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