Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A Scriptable widget that shows the amount of people who have received the corona vaccination in Germany
const cacheMinutes = 60 // 60 min
const today = new Date();
let result
let widget = new ListWidget()
widget.setPadding(10, 15, 10, 10)
await getNumbers()
await createWidget()
Script.setWidget(widget)
Script.complete()
if (config.runsInApp) {
widget.presentSmall()
}
async function createWidget() {
let param
let bundesland
if (config.runsInApp) {
param = 'BY';
}
else {
param = args.widgetParameter;
}
switch (param) {
case 'BW':
bundesland = 'Baden-W\u00fcrttemberg';
break;
case 'BY':
bundesland = 'Bayern';
break;
case 'BE':
bundesland = 'Berlin';
break;
case 'BB':
bundesland = 'Brandenburg';
break;
case 'HB':
bundesland = 'Bremen';
break;
case 'HH':
bundesland = 'Hamburg';
break;
case 'HE':
bundesland = 'Hessen';
break;
case 'MV':
bundesland = 'Mecklenburg-Vorpommern';
break;
case 'NI':
bundesland = 'Niedersachsen';
break;
case 'NRW':
bundesland = 'Nordrhein-Westfalen';
break;
case 'RP':
bundesland = 'Rheinland-Pfalz';
break;
case 'SL':
bundesland = 'Saarland';
break;
case 'SN':
bundesland = 'Sachsen';
break;
case 'ST':
bundesland = 'Sachsen-Anhalt';
break;
case 'SH':
bundesland = 'Schleswig-Holstein';
break;
case 'TH':
bundesland = 'Th\u00fcringen';
break;
default:
bundesland = 'default';
}
if (bundesland === 'default') {
throw new Error('Kein gültiges Bundesland.')
}
const upperStack = widget.addStack()
upperStack.layoutHorizontally()
let staticText0 = upperStack.addText("💉 Impfungen DE");
staticText0.font = Font.semiboldRoundedSystemFont(14);
widget.addSpacer(5)
let amountText0 = widget.addText(result.sum_vaccine_doses.toLocaleString() + " (" + (result.sum_vaccine_doses/result.total*100/2).toFixed(2) + "%)")
amountText0.font = Font.boldSystemFont(12)
amountText0.textColor = new Color("#00a86b");
widget.addSpacer(1)
let amountText = widget.addText("❶ " + result.vaccinated.toLocaleString() + " (" + (result.vaccinated/result.total*100).toFixed(2) + "%)")
amountText.font = Font.boldSystemFont(10)
widget.addSpacer(1)
let amountText1 = widget.addText("❷ " + result['2nd_vaccination'].vaccinated.toLocaleString() + " (" + (result['2nd_vaccination'].vaccinated/result.total*100).toFixed(2) + "%)")
amountText1.font = Font.boldSystemFont(10)
widget.addSpacer(5)
let staticText2 = widget.addText("💉 Impfungen " + param)
staticText2.font = Font.semiboldRoundedSystemFont(14);
widget.addSpacer(2)
let sum_vaccine_doses_bl = result.states[bundesland].vaccinated + result.states[bundesland]['2nd_vaccination'].vaccinated
let amountText2= widget.addText(sum_vaccine_doses_bl.toLocaleString() + " (" + (sum_vaccine_doses_bl/result.states[bundesland].total*100/2).toFixed(2) + "%)")
amountText2.font = Font.boldSystemFont(12)
amountText2.textColor = new Color("#00a86b");
widget.addSpacer(1)
let amountText3 = widget.addText("❶ " + result.states[bundesland].vaccinated.toLocaleString() + " (" + (result.states[bundesland].vaccinated/result.states[bundesland].total*100).toFixed(2) + "%)")
amountText3.font = Font.boldSystemFont(10)
widget.addSpacer(1)
let amountText4 = widget.addText("❷ " + result.states[bundesland]['2nd_vaccination'].vaccinated.toLocaleString() + " (" + (result.states[bundesland]['2nd_vaccination'].vaccinated/result.states[bundesland].total*100).toFixed(2) + "%)")
amountText4.font = Font.boldSystemFont(10)
widget.addSpacer(5)
const lastUpdateDate = new Date(result.lastUpdate)
let day = lastUpdateDate.getDate()
let month = lastUpdateDate.getMonth() + 1
let year = lastUpdateDate.getFullYear()
if (day<10)
{
day = "0" + day
}
if (month<10)
{
month = "0" + month
}
let lastUpdatedText = widget.addText("Stand: " + day + "." + month + "." + year)
lastUpdatedText.textColor = Color.gray()
lastUpdatedText.font = Font.mediumSystemFont(10)
}
async function getNumbers() {
// Set up the file manager.
const files = FileManager.local()
// Set up cache
const cachePath = files.joinPath(files.cacheDirectory(), "api-cache-covid-vaccine-numbers") // ggfs. namen anpassen
const cacheExists = files.fileExists(cachePath)
const cacheDate = cacheExists ? files.modificationDate(cachePath) : 0
// Get Data
try {
// If cache exists and it's been less than 60 minutes since last request, use cached data.
if (cacheExists && (today.getTime() - cacheDate.getTime()) < (cacheMinutes * 60 * 1000)) {
console.log("Get from Cache")
result = JSON.parse(files.readString(cachePath))
} else {
console.log("Get from API")
const req2 = new Request('https://rki-vaccination-data.vercel.app/api')
result = await req2.loadJSON()
console.log("Write Data to Cache")
try {
files.writeString(cachePath, JSON.stringify(result))
} catch (e) {
console.log("Creating Cache failed!")
console.log(e)
}
}
} catch (e) {
console.error(e)
if (cacheExists) {
console.log("Get from Cache")
result = JSON.parse(files.readString(cachePath))
} else {
console.log("No fallback to cache possible. Due to missing cache.")
}
}
console.log(result.vaccinated) // Gesamtzahl an Impfungen
}
//
// Pleas copy everything until the end
//
@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Dec 31, 2020

Update Revision 12:

Über den Widget Parameter kann das Bundesland nun via Kürzel angegeben werden:
BW
BY
BE
BB
HB
HH
HE
MV
NI
NRW
RP
SL
SN
ST
SH
TH

IMG_0556

Generelle Änderungen zum Fork:

  • Aktuelles Datum entfernt
  • Anzahl Impfungen für einzelnes Bundesland ergänzt
  • Prozentuale Anzeige für DE und BY aus API ausgelesen und angezeigt
  • Datumsanzeige auf Deutsches Format umgestellt

image

@Dimakap

This comment has been minimized.

Copy link

@Dimakap Dimakap commented Dec 31, 2020

Hallo. Gibt es eine Möglichkeit Nordrhein-Westfalen statt Bayern anzeigen zu lassen?

Danke

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Dec 31, 2020

Hallo. Gibt es eine Möglichkeit Nordrhein-Westfalen statt Bayern anzeigen zu lassen?

Danke

Na klar. Einfach folgende Anpassungen vornehmen:

Zeile 36 (angezeigter Text):
let staticText2 = widget.addText("Impfungen BY:")
->
let staticText2 = widget.addText("Impfungen NRW:")

Zeile 39 (API Abfrage):
let amountText2 = widget.addText(result.states.Bayern.vaccinated.toLocaleString() + " (" + result.states.Bayern.quote + "%)")
->
let amountText2 = widget.addText(result.states.Nordrhein-Westfalen.vaccinated.toLocaleString() + " (" + result.states.Nordrhein-Westfalen.quote + "%)")

@Dimakap

This comment has been minimized.

Copy link

@Dimakap Dimakap commented Dec 31, 2020

Dankeschön und guten Rutsch ins neue Jahr.

@dengelsig

This comment has been minimized.

Copy link

@dengelsig dengelsig commented Dec 31, 2020

Cooles Widget! Wenn ich Baden-Württemberg einfüge bekomme ich leider die Meldung: ReferenceError can‘t find Variable Württemberg. Kannst du mir hier weiterhelfen?

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Dec 31, 2020

Cooles Widget! Wenn ich Baden-Württemberg einfüge bekomme ich leider die Meldung: ReferenceError can‘t find Variable Württemberg. Kannst du mir hier weiterhelfen?

Mit folgender Schreibweise funktioniert es:
let amountText2 = widget.addText(result.states["Baden-W\u00fcrttemberg"].vaccinated.toLocaleString() + " (" + result.states.Bayern.quote + "%)")

@dengelsig

This comment has been minimized.

Copy link

@dengelsig dengelsig commented Dec 31, 2020

Funktioniert! Vielen Dank!

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Dec 31, 2020

Klasse!! Funktioniert Super, Gespannt was man noch so alles damit machen kann

@McMacke

This comment has been minimized.

Copy link

@McMacke McMacke commented Dec 31, 2020

Super Tool!
Ich habe es six „Berlin“ und „BE“ geändert.
Zieht sich das Tool die Einwohnerzahl von Berlin auch aus der API, um den prozentualen Impfanteil für Berlin korrekt auszugeben?

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Dec 31, 2020

Super Tool!
Ich habe es six „Berlin“ und „BE“ geändert.
Zieht sich das Tool die Einwohnerzahl von Berlin auch aus der API, um den prozentualen Impfanteil für Berlin korrekt auszugeben?

Ja genau, aus der API kommen für Berlin beispielsweise folgende Daten inkl. "total":
"Berlin": {"total": 3644826, "vaccinated": 6296, "quote": 0.17}

@McMacke

This comment has been minimized.

Copy link

@McMacke McMacke commented Dec 31, 2020

Super - aber das Widget zeigt 0,25%

@McMacke

This comment has been minimized.

Copy link

@McMacke McMacke commented Dec 31, 2020

…und dir Gesamtzahl im Widget lautet 9.084

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Dec 31, 2020

Die Zahlen wurden kurz nach dem Kommentar aktualisiert:
"Berlin": {"total": 3644826, "vaccinated": 9084, "quote": 0.25}

hier kannst du sie live auslesen: https://rki-vaccination-data.vercel.app/api

@McMacke

This comment has been minimized.

Copy link

@McMacke McMacke commented Dec 31, 2020

:) OK und vielen Dank für deine Mühe!

@Minsworld-de

This comment has been minimized.

Copy link

@Minsworld-de Minsworld-de commented Dec 31, 2020

Danke für die Mühen, wirklich toll!

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Dec 31, 2020

Mit der Revision 12 habe ich die vorerst letzte Funktion eingebaut, siehe obersten Kommentar von mir.

An der Stelle nochmal danke an Benny für die API Schnittstelle und hier nochmal der Hinweis auf sein Skript, welches ich nochmal übersichtlicher finde: https://widget-hub.app/widget/5fec48637b99ef0008e8a27d/number-of-covid-19-vaccinations

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Dec 31, 2020

Da gibt’s aber ein Problem mit dem Darkmode IPhone X Ios14.3

353DA398-131D-45EF-808F-A5EA3306731F

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Dec 31, 2020

Komisch, bei mir funktioniert es mit dem iPhone 12 Pro Max.
CB2DB1E6-FF60-4974-B79A-8A56CB75C00A

Aber damit müsstest du dich an den Autor wenden.

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Dec 31, 2020

„Updated „Jetzt geht’s auf einmal!!!!

@QWERTZ000

This comment has been minimized.

Copy link

@QWERTZ000 QWERTZ000 commented Dec 31, 2020

Da gibt’s aber ein Problem mit dem Darkmode IPhone X Ios14.3

353DA398-131D-45EF-808F-A5EA3306731F

Hallo,
habe das gleich Problem mit meinem iPhone 12 Pro. Trotz Update auf v.1.0.1.

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Jan 2, 2021

Könntest du den Kalender von Marco mit einbauen,dass wäre klasse. Sieht nämlich ganz gut aus. Den hat er vor 12h Aktualisiert

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 2, 2021

Könntest du den Kalender von Marco mit einbauen,dass wäre klasse. Sieht nämlich ganz gut aus. Den hat er vor 12h Aktualisiert

Das war einer der Gründe, weswegen ich einen Fork erstellt habe. Ich wollte den Kalender entfernen, da dieses Widget über die Impfungen Informieren soll. Den Kalender hat man sowieso meist auf dem Homescreen, deswegen finde ich ihn hier überflüssig. Du kannst es aber gerne bei dir lokal anpassen. Dafür einfach folgenden Code in Zeile 27 einfügen:

`
upperStack.addSpacer(12)

let calendarStack = upperStack.addStack()
calendarStack.layoutVertically()
calendarStack.addSpacer(4)
let dayNameText = calendarStack.addText(getWeekday(today).toUpperCase())
dayNameText.textColor = Color.red()
if (getWeekday(today) === "Donnerstag") {
    dayNameText.font = Font.boldSystemFont(8)
} else {
    dayNameText.font = Font.boldSystemFont(10)
}

let spacer = "   "
if (day < 10) {
    spacer = "    "
}
let dayText = calendarStack.addText(spacer + day)
dayText.font = Font.semiboldSystemFont(26)

let dateText = calendarStack.addText(getMonthName(today))
dateText.font = Font.boldSystemFont(11)

widget.addSpacer(8)

`

und folgenden Code in Zeile 114:

`
function getWeekday(date) {
var weekday = new Array(7);
weekday[0] = " Sonntag";
weekday[1] = " Montag";
weekday[2] = " Dienstag";
weekday[3] = "Mittwoch";
weekday[4] = "Donnerstag";
weekday[5] = " Freitag";
weekday[6] = " Samstag";

return weekday[date.getDay()];

}

function getMonthName(date) {
var monthName = new Array(12);
monthName[0] = " Januar";
monthName[1] = " Februar";
monthName[2] = " März";
monthName[3] = " April";
monthName[4] = " Mai";
monthName[5] = " Juni";
monthName[6] = " Juli";
monthName[7] = " August";
monthName[8] = "September";
monthName[9] = " Oktober";
monthName[10] = "November";
monthName[11] = "Dezember";

return monthName[date.getMonth()];

}
`

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Jan 2, 2021

83AB5CBC-1571-40E7-8591-429F9E05286F

Habe da wohl ein Fehler gemacht 🤔

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 2, 2021

83AB5CBC-1571-40E7-8591-429F9E05286F

Habe da wohl ein Fehler gemacht 🤔

Sorry, hatte eine Zeile vergessen, jetzt geht es, habe es überprüft:

5C4580DF-D732-4C30-835F-829F01AC655C

Hier der komplette Code zum Kopieren:

`const cacheMinutes = 60 // 60 min
const today = new Date();
let result
let widget = new ListWidget()
widget.setPadding(8, 8, 8, 8)

await getNumbers()
await createWidget()
Script.setWidget(widget)
Script.complete()

if (config.runsInApp) {
widget.presentSmall()
}

async function createWidget() {

let day = today.getDate().toString()

const upperStack = widget.addStack()
upperStack.layoutHorizontally()

let image = await getImage('vaccination-logo.png')

let logoImage = upperStack.addImage(image)
logoImage.imageSize = new Size(50, 50)

upperStack.addSpacer(12)

let calendarStack = upperStack.addStack()
calendarStack.layoutVertically()
calendarStack.addSpacer(4)
let dayNameText = calendarStack.addText(getWeekday(today).toUpperCase())
dayNameText.textColor = Color.red()
if (getWeekday(today) === "Donnerstag") {
    dayNameText.font = Font.boldSystemFont(8)
} else {
    dayNameText.font = Font.boldSystemFont(10)
}

let spacer = "   "
if (day < 10) {
    spacer = "    "
}
let dayText = calendarStack.addText(spacer + day)
dayText.font = Font.semiboldSystemFont(26)

let dateText = calendarStack.addText(getMonthName(today))
dateText.font = Font.boldSystemFont(11)

widget.addSpacer(8)

result.vaccinated

const param = args.widgetParameter;
let bundesland

switch (param) {
case 'BW':
bundesland = 'Baden-W\u00fcrttemberg';
break;
case 'BY':
bundesland = 'Bayern';
break;
case 'BE':
bundesland = 'Berlin';
break;
case 'BB':
bundesland = 'Brandenburg';
break;
case 'HB':
bundesland = 'Bremen';
break;
case 'HH':
bundesland = 'Hamburg';
break;
case 'HE':
bundesland = 'Hessen';
break;
case 'MV':
bundesland = 'Mecklenburg-Vorpommern';
break;
case 'NI':
bundesland = 'Niedersachsen';
break;
case 'NRW':
bundesland = 'Nordrhein-Westfalen';
break;
case 'RP':
bundesland = 'Rheinland-Pfalz';
break;
case 'SL':
bundesland = 'Saarland';
break;
case 'SN':
bundesland = 'Sachsen';
break;
case 'ST':
bundesland = 'Sachsen-Anhalt';
break;
case 'SH':
bundesland = 'Schleswig-Holstein';
break;
case 'TH':
bundesland = 'Th\u00fcringen';
break;
default:
bundesland = 'default';
}

if (bundesland === 'default') {
throw new Error('Kein gültiges Bundesland.')
}

let staticText = widget.addText("Impfungen DE:")
staticText.font = Font.boldSystemFont(11)

let amountText = widget.addText(result.vaccinated.toLocaleString() + " (" + result.quote + "%)")
amountText.font = Font.boldSystemFont(16)
widget.addSpacer(5)

let staticText2 = widget.addText("Impfungen " + param + ":")
staticText2.font = Font.boldSystemFont(11)

let amountText2 = widget.addText(result.states[bundesland].vaccinated.toLocaleString() + " (" + result.states[bundesland].quote + "%)")
amountText2.font = Font.boldSystemFont(16)
widget.addSpacer(5)

const lastUpdateDate = new Date(result.lastUpdate)
const day2 = lastUpdateDate.getDate()
const month = lastUpdateDate.getMonth() + 1
const year = lastUpdateDate.getFullYear()
let lastUpdatedText = widget.addText("Stand: " + day2 + "." + month + "." + year)
lastUpdatedText.textColor = Color.gray()
lastUpdatedText.font = Font.mediumSystemFont(10)

}

function getWeekday(date) {
var weekday = new Array(7);
weekday[0] = " Sonntag";
weekday[1] = " Montag";
weekday[2] = " Dienstag";
weekday[3] = "Mittwoch";
weekday[4] = "Donnerstag";
weekday[5] = " Freitag";
weekday[6] = " Samstag";

return weekday[date.getDay()];

}

function getMonthName(date) {
var monthName = new Array(12);
monthName[0] = " Januar";
monthName[1] = " Februar";
monthName[2] = " März";
monthName[3] = " April";
monthName[4] = " Mai";
monthName[5] = " Juni";
monthName[6] = " Juli";
monthName[7] = " August";
monthName[8] = "September";
monthName[9] = " Oktober";
monthName[10] = "November";
monthName[11] = "Dezember";

return monthName[date.getMonth()];

}

// get images from iCloud or download them once
async function getImage(image) {
let fm = FileManager.local()
let dir = fm.documentsDirectory()
let path = fm.joinPath(dir, image)
if (fm.fileExists(path)) {
return fm.readImage(path)
} else {
// download once
let imageUrl
switch (image) {
case 'vaccination-logo.png':
imageUrl = "https://cdn2.iconfinder.com/data/icons/corona-virus-covid-19-14/512/9_Flu_protection_vaccine_virus-512.png"
break
default:
console.log(Sorry, couldn't find ${image}.);
}
let req = new Request(imageUrl)
let loadedImage = await req.loadImage()
fm.writeImage(path, loadedImage)
return loadedImage
}
}

async function getNumbers() {
// Set up the file manager.
const files = FileManager.local()

// Set up cache
const cachePath = files.joinPath(files.cacheDirectory(), "api-cache-covid-vaccine-numbers") // ggfs. namen anpassen
const cacheExists = files.fileExists(cachePath)
const cacheDate = cacheExists ? files.modificationDate(cachePath) : 0

// Get Data
try {
// If cache exists and it's been less than 60 minutes since last request, use cached data.
if (cacheExists && (today.getTime() - cacheDate.getTime()) < (cacheMinutes * 60 * 1000)) {
console.log("Get from Cache")
result = JSON.parse(files.readString(cachePath))
} else {
console.log("Get from API")
const req2 = new Request('https://rki-vaccination-data.vercel.app/api')
result = await req2.loadJSON()
console.log("Write Data to Cache")
try {
files.writeString(cachePath, JSON.stringify(result))
} catch (e) {
console.log("Creating Cache failed!")
console.log(e)
}
}
} catch (e) {
console.error(e)
if (cacheExists) {
console.log("Get from Cache")
result = JSON.parse(files.readString(cachePath))
} else {
console.log("No fallback to cache possible. Due to missing cache.")
}
}
console.log(result.vaccinated) // Gesamtzahl an Impfungen
}

//
// Pleas copy everything until the end
//
`

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Jan 2, 2021

184:4287: ReferenceError: Can't find variable: image

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 2, 2021

184:4287: ReferenceError: Can't find variable: image

Das liegt leider an dem Code Modul, welches die Formatierung ändert hier im Kommentar. In der Klammer müssen die `` jeweils am Anfang und Ende stehen. Quasi so:

108E5A3B-7B1B-4731-A8BB-E7441ECD244E

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Jan 2, 2021

2021-01-02 16:53:08: Error on line 3: SyntaxError: Unexpected identifier 'Lassen'

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 2, 2021

2021-01-02 16:53:08: Error on line 3: SyntaxError: Unexpected identifier 'Lassen'

Dann erstelle bitte einen eigenen Fork, ich beende das hier von meiner Seite.

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Jan 2, 2021

Danke für deine Unterstützung!!

@cl4udiu5

This comment has been minimized.

Copy link

@cl4udiu5 cl4udiu5 commented Jan 3, 2021

@thorstenleidl
Danke für den coolen Fork. Ich weiß, du hast die Arbeit am Widget beendet. Eine Sache ist mir aber eben bei mir aufgefallen.
Und zwar ist die Schrift zu groß und es wird Text abgeschnitten. Könntest du das noch evtl. bitte Variable gestalten.
4C7E15A8-F75E-43AC-8819-371C5322FF4C

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 3, 2021

@thorstenleidl
Danke für den coolen Fork. Ich weiß, du hast die Arbeit am Widget beendet. Eine Sache ist mir aber eben bei mir aufgefallen.
Und zwar ist die Schrift zu groß und es wird Text abgeschnitten. Könntest du das noch evtl. bitte Variable gestalten.
4C7E15A8-F75E-43AC-8819-371C5322FF4C

Hi,
es wäre immer praktisch wenn du dazu schreibst welches iPhone davon betroffen ist, da ich es bei mir auf einer Max Variante getestet habe. Du kannst dir in Zeile 95 und Zeile 102 die Schriftgröße von den Impfungen und der Prozentangabe anpassen:

amountText.font = Font.boldSystemFont(16) amountText2.font = Font.boldSystemFont(16)

Aktuell steht diese auf 16, vll testest du mal 14.

@cl4udiu5

This comment has been minimized.

Copy link

@cl4udiu5 cl4udiu5 commented Jan 3, 2021

@thorstenleidl
Danke für den coolen Fork. Ich weiß, du hast die Arbeit am Widget beendet. Eine Sache ist mir aber eben bei mir aufgefallen.
Und zwar ist die Schrift zu groß und es wird Text abgeschnitten. Könntest du das noch evtl. bitte Variable gestalten.
4C7E15A8-F75E-43AC-8819-371C5322FF4C

Hi,
es wäre immer praktisch wenn du dazu schreibst welches iPhone davon betroffen ist, da ich es bei mir auf einer Max Variante getestet habe. Du kannst dir in Zeile 95 und Zeile 102 die Schriftgröße von den Impfungen und der Prozentangabe anpassen:

amountText.font = Font.boldSystemFont(16) amountText2.font = Font.boldSystemFont(16)

Aktuell steht diese auf 16, vll testest du mal 14.

Ich nutze ein iPhone 12 Pro.
Mit deinem Tipp hat es funktioniert. Danke.

@jnhllTM4

This comment has been minimized.

Copy link

@jnhllTM4 jnhllTM4 commented Jan 5, 2021

Hi, eine Frage: ich muss bei Parameter doch einfach nur das Bundesland-Kürzel eingeben, oder? Bekomme immer diese Fehlermeldung:

2021-01-05 22:32:22: Get from Cache
2021-01-05 22:32:22: 316962
2021-01-05 22:32:22: Sorry, no Parameter found.
2021-01-05 22:32:22: Error on line 92:19: Kein gültiges Bundesland.

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 5, 2021

Hi, eine Frage: ich muss bei Parameter doch einfach nur das Bundesland-Kürzel eingeben, oder? Bekomme immer diese Fehlermeldung:

2021-01-05 22:32:22: Get from Cache
2021-01-05 22:32:22: 316962
2021-01-05 22:32:22: Sorry, no Parameter found.
2021-01-05 22:32:22: Error on line 92:19: Kein gültiges Bundesland.

Ja richtig, kannst du ein Screenshot von deinen Widget Einstellungen schicken? (Wie in meinem obersten Kommentar)

@jnhllTM4

This comment has been minimized.

Copy link

@jnhllTM4 jnhllTM4 commented Jan 5, 2021

Du meinst das hier?

88E4EA4F-69C0-4C20-96D3-CCC7C5A85A28

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 6, 2021

Du meinst das hier?

88E4EA4F-69C0-4C20-96D3-CCC7C5A85A28

Ja genau, danke. NRW funktioniert bei mir auch. Könntest du das Skript nochmal komplett neu rein kopieren? Und könntest du prüfen, dass bei dem Kürzel kein Leerzeichen dabei ist?

@jnhllTM4

This comment has been minimized.

Copy link

@jnhllTM4 jnhllTM4 commented Jan 6, 2021

Ja genau, danke. NRW funktioniert bei mir auch. Könntest du das Skript nochmal komplett neu rein kopieren? Und könntest du prüfen, dass bei dem Kürzel kein Leerzeichen dabei ist?

Habe ich gemacht, leider ohne Erfolg. Ich erhalte außerdem noch diese Fehlermeldung.

3C0C9412-EB7E-4702-8064-21F1B3B736F9

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 6, 2021

Ja genau, danke. NRW funktioniert bei mir auch. Könntest du das Skript nochmal komplett neu rein kopieren? Und könntest du prüfen, dass bei dem Kürzel kein Leerzeichen dabei ist?

Habe ich gemacht, leider ohne Erfolg. Ich erhalte außerdem noch diese Fehlermeldung.

3C0C9412-EB7E-4702-8064-21F1B3B736F9

Okay, das ist merkwürdig, die Meldung hatte ich bei mir bisher noch nie und in Zeile 19 stand bei Revision 12 eigentlich gar kein Code. Ich könnte mir aber den Hintergrund vorstellen. Lokal bei mir hatte ich noch ein paar kleine Änderungen erstellt, welche ich soeben als Revision 13 hochgeladen habe. Könntest du das bisherige Skript und das Widget löschen und anschließend mit dem neuen Code beides neu erstellen?

@jnhllTM4

This comment has been minimized.

Copy link

@jnhllTM4 jnhllTM4 commented Jan 6, 2021

Könntest du das bisherige Skript und das Widget löschen und anschließend mit dem neuen Code beides neu erstellen?

Funktioniert! Vielen Dank! Tolles Script! :-)

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 6, 2021

Könntest du das bisherige Skript und das Widget löschen und anschließend mit dem neuen Code beides neu erstellen?

Funktioniert! Vielen Dank! Tolles Script! :-)

Freut mich zu hören, ich hab es ja nur geforkt ;)

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 14, 2021

Revision 14:

  • Impfquote durch 2 geteilt, damit 2 Impfungen pro Person berücksichtigt werden, da diese von den RKI Daten bisher nicht ganz heraus zu lesen war
@grisu112

This comment has been minimized.

Copy link

@grisu112 grisu112 commented Jan 23, 2021

Hallo, mir gefällt diese Variante sehr gut. Mich persönlich interessiert allerdings nur die 2. Impfung, da nur das eine wirkliche Aussagekraft hat wie ich finde. Aber das muss ja jeder selber wissen. Nun werden ja (zu mindestens teilweise) auch Daten zur zweiten Impfung in der API geliefert. Als ich das umstellen wollte sind mir einige Unregelmäsigkeiten aufgefallen.
Zum einen hatte ich mich gewundert warum das Widget die Gesamtzahl nicht mehr zuverlässig aktualisiert.
Du nutzt aktuell die Variable "vaccinated". Die beinhaltet aber nur die 1. Impfung. Es gibt jetzt noch "sum_vaccine_doses" in dem auch die Zweitimpfungen enthalten sind. Außerdem gibt es unter "2nd_vaccination" jetzt Werte für die 2. Impfung. Hinzu kommt, das sich der Wert "quote" nur auf "vaccinated" bezieht, also auf die Erstimpfung. Im letzten Update hattest du den Wert einfach durch zwei geteilt, was somit leider nicht passt. Selbst wenn sich das auf die Gesamtimpfungen bezieht wäre das ja auch keine sichere Quote, weil man nicht weis wieviele davon Erst- oder Zweitimpfungen sind.

Ich finde da ist aktuell noch ziemlich Chaos und es fehlen auch noch Werte. Daher hab ich das jetzt für mich erstmal wie folgt gelöst. (Wie eingangs erwähnt nur noch bezogen auf 2. Impfung). Anzeige der Werte aus der API für die Zweitimpfung, Und eigene Errechnung der Quote, weil diese aktuell noch nicht geliefert wird. Vielleicht kann das noch jemand gebrauchen:

Zeile 89:
let staticText = widget.addText("Impfungen DE:")
ersetz durch:
let staticText = widget.addText("2. Impfung DE:")

Zeile 96:
let staticText2 = widget.addText("Impfungen " + param + ":")
ersetzt durch:
let staticText2 = widget.addText("2. Impfung " + param + ":")

Zeile 92:
let amountText = widget.addText(result.vaccinated.toLocaleString() + " (" + (result.quote / 2).toFixed(2) + "%)")
ersetzt durch:
let amountText = widget.addText(result["2nd_vaccination"].vaccinated.toLocaleString() + " (" + (result["2nd_vaccination"].vaccinated / result.total * 100 ).toFixed(2) + "%)")

Zeile 99:
let amountText2 = widget.addText(result.states[bundesland].vaccinated.toLocaleString() + " (" + (result.states[bundesland].quote / 2).toFixed(2) + "%)")
Ersetzt durch:
let amountText2 = widget.addText(result.states[bundesland]["2nd_vaccination"].vaccinated.toLocaleString() + " (" + (result.states[bundesland]["2nd_vaccination"].vaccinated / result.states[bundesland].total * 100).toFixed(2) + "%)")

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 23, 2021

Hallo, mir gefällt diese Variante sehr gut. Mich persönlich interessiert allerdings nur die 2. Impfung, da nur das eine wirkliche Aussagekraft hat wie ich finde. Aber das muss ja jeder selber wissen. Nun werden ja (zu mindestens teilweise) auch Daten zur zweiten Impfung in der API geliefert. Als ich das umstellen wollte sind mir einige Unregelmäsigkeiten aufgefallen.
Zum einen hatte ich mich gewundert warum das Widget die Gesamtzahl nicht mehr zuverlässig aktualisiert.
Du nutzt aktuell die Variable "vaccinated". Die beinhaltet aber nur die 1. Impfung. Es gibt jetzt noch "sum_vaccine_doses" in dem auch die Zweitimpfungen enthalten sind. Außerdem gibt es unter "2nd_vaccination" jetzt Werte für die 2. Impfung. Hinzu kommt, das sich der Wert "quote" nur auf "vaccinated" bezieht, also auf die Erstimpfung. Im letzten Update hattest du den Wert einfach durch zwei geteilt, was somit leider nicht passt. Selbst wenn sich das auf die Gesamtimpfungen bezieht wäre das ja auch keine sichere Quote, weil man nicht weis wieviele davon Erst- oder Zweitimpfungen sind.

Ich finde da ist aktuell noch ziemlich Chaos und es fehlen auch noch Werte. Daher hab ich das jetzt für mich erstmal wie folgt gelöst. (Wie eingangs erwähnt nur noch bezogen auf 2. Impfung). Anzeige der Werte aus der API für die Zweitimpfung, Und eigene Errechnung der Quote, weil diese aktuell noch nicht geliefert wird. Vielleicht kann das noch jemand gebrauchen:

Zeile 89:
let staticText = widget.addText("Impfungen DE:")
ersetz durch:
let staticText = widget.addText("2. Impfung DE:")

Zeile 96:
let staticText2 = widget.addText("Impfungen " + param + ":")
ersetzt durch:
let staticText2 = widget.addText("2. Impfung " + param + ":")

Zeile 92:
let amountText = widget.addText(result.vaccinated.toLocaleString() + " (" + (result.quote / 2).toFixed(2) + "%)")
ersetzt durch:
let amountText = widget.addText(result["2nd_vaccination"].vaccinated.toLocaleString() + " (" + (result["2nd_vaccination"].vaccinated / result.total * 100 ).toFixed(2) + "%)")

Zeile 99:
let amountText2 = widget.addText(result.states[bundesland].vaccinated.toLocaleString() + " (" + (result.states[bundesland].quote / 2).toFixed(2) + "%)")
Ersetzt durch:
let amountText2 = widget.addText(result.states[bundesland]["2nd_vaccination"].vaccinated.toLocaleString() + " (" + (result.states[bundesland]["2nd_vaccination"].vaccinated / result.states[bundesland].total * 100).toFixed(2) + "%)")

Hi,
ist mir alles bewusst, anfangs waren die Daten noch nicht vorhanden und ich habe aktuell kaum Zeit das umzubauen. Werde es so bald wie möglich nachholen ;)

@thorstenleidl

This comment has been minimized.

Copy link
Owner Author

@thorstenleidl thorstenleidl commented Jan 23, 2021

Da die Datenbasis überarbeitet wurde habe ich diese in Rev16 im Widget angepasst und leicht umgebaut:

FFF109D4-E560-4D8B-852F-4FA591F45342

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