Skip to content

Instantly share code, notes, and snippets.

@m4p
Last active November 11, 2022 16:43
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save m4p/20cc77b6d9f1f422b75bc3ab6eed0ff3 to your computer and use it in GitHub Desktop.
Save m4p/20cc77b6d9f1f422b75bc3ab6eed0ff3 to your computer and use it in GitHub Desktop.
Corona Ampel Berlin Widget für Scriptable.app
// Corona Ampel Berlin Widget
//
// Copyright (C) 2020 by map <mail@map.wtf>
//
// Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
// IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
// OF THIS SOFTWARE.
let widget = new ListWidget();
let padding = 22;
widget.setPadding(padding, padding, padding, padding);
widget.url = "https://www.berlin.de/corona/lagebericht/desktop/corona.html";
let apiResponse = await loadItems();
let header = widget.addText("🚦Covid-19 Berlin".toUpperCase());
header.font = Font.mediumSystemFont(10);
widget.addSpacer(16);
let vStack = widget.addStack();
vStack.layoutHorizontally();
addDataView(vStack, apiResponse.indicators.incidence_new_infections);
vStack.addSpacer();
addDataView(vStack, apiResponse.indicators.incidence_hospitalisation);
widget.addSpacer();
let vStack2 = widget.addStack();
vStack2.layoutHorizontally();
addDataView(vStack2, apiResponse.indicators.icu_occupancy_rate);
vStack2.addSpacer();
addDataView(vStack2, apiResponse.vaccination.percentage_two_doses_display);
Script.setWidget(widget);
Script.complete();
widget.presentSmall();
function addDataView(widget, data) {
let viewStack = widget.addStack();
viewStack.layoutVertically();
let label = viewStack.addText(data.shortDescription);
label.font = Font.mediumSystemFont(12);
if (data.footnote != "") {
let footnote = viewStack.addText(data.footnote);
footnote.font = Font.mediumSystemFont(6);
}
let value = viewStack.addText(data.stringValue);
value.font = Font.mediumSystemFont(20);
value.textColor = colorForString(data.color);
}
async function loadItems() {
let url =
"https://raw.githubusercontent.com/knudmoeller/berlin_corona_cases/master/data/target/berlin_corona_traffic_light.latest.json";
let req = new Request(url);
let json = await req.loadJSON();
json.indicators.incidence_hospitalisation.shortDescription = "Hospital";
json.indicators.incidence_new_infections.shortDescription = "Inzidenz";
json.indicators.icu_occupancy_rate.shortDescription = "ITS";
json.indicators.incidence_hospitalisation.footnote = "(7 Tage)";
json.indicators.incidence_new_infections.footnote = "(7 Tage)";
json.indicators.icu_occupancy_rate.footnote = "(in %)";
json.indicators.incidence_hospitalisation.stringValue = json.indicators.incidence_hospitalisation.value.toString();
json.indicators.incidence_new_infections.stringValue = json.indicators.incidence_new_infections.value.toString();
json.indicators.icu_occupancy_rate.stringValue =
json.indicators.icu_occupancy_rate.value.toString();
json.vaccination["percentage_two_doses_display"] = {}
json.vaccination.percentage_two_doses_display.shortDescription = "Geimpft";
json.vaccination.percentage_two_doses_display.footnote = "(in %)";
json.vaccination.percentage_two_doses_display.stringValue = json.vaccination.percentage_two_doses.toString();
json.vaccination.percentage_two_doses_display.color = "blue";
return json;
}
function colorForString(colorString) {
if (colorString == "red") {
return Color.red();
}
if (colorString == "yellow") {
return Color.yellow();
}
if (colorString == "blue") {
return Color.blue();
}
return Color.green();
}
@SimonHoenscheid
Copy link

Es sieht für mich so aus als wären die gelieferten Daten falsch. Das Widget zeigt bei mir aktuell eine Inzidenz von 44,1, die Webseite jedoch 50,3

@m4p
Copy link
Author

m4p commented Aug 13, 2021

@SimonHoenscheid
Copy link

Danke!

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