Skip to content

Instantly share code, notes, and snippets.

@m4p

m4p/ampel.js

Last active Nov 20, 2020
Embed
What would you like to do?
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.basic_reproduction_number);
vStack.addSpacer();
addDataView(vStack, apiResponse.indicators.incidence_new_infections);
widget.addSpacer();
addDataView(widget, apiResponse.indicators.icu_occupancy_rate);
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.basic_reproduction_number.shortDescription = "R-Wert";
json.indicators.incidence_new_infections.shortDescription = "Inzidenz";
json.indicators.icu_occupancy_rate.shortDescription = "ITS-Belegung";
json.indicators.basic_reproduction_number.footnote = "(4 Tage)";
json.indicators.incidence_new_infections.footnote = "(7 Tage)";
json.indicators.icu_occupancy_rate.footnote = "";
json.indicators.basic_reproduction_number.stringValue = json.indicators.basic_reproduction_number.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() + "%";
return json;
}
function colorForString(colorString) {
if (colorString == "red") {
return Color.red();
}
if (colorString == "yellow") {
return Color.yellow();
}
return Color.green();
}
@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Nov 6, 2020

Wo bekomme ich Daten für mein Landkreis her?

@m4p

This comment has been minimized.

Copy link
Owner Author

@m4p m4p commented Nov 6, 2020

Ich denke da müsstest du dir deinen eigenen Scraper schreiben. Die Daten selbst gibt es beim RKI (siehe zum Beispiel hier) und beim DIVI, für die Intensivbettenbelegung.

@Macbalko

This comment has been minimized.

Copy link

@Macbalko Macbalko commented Nov 20, 2020

Was ist ein Scraper und mit den Daten kann ich leider nix anfangen, sry

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.