# - awk
# - hxpipe (packaged in html-xml-utils on Debian and Ubuntu)
+# 2020-03-16 morning-afternoon
+#URI='https://health.ny.gov/diseases/communicable/coronavirus/'
+#TARGET_PATH='/html/body/div/div/div/div/div/div/table/tr/td'
+#DEFAULT_LOCATION='New York City:'
+
+# 2020-03-16 late evening 22:30
+#URI='https://health.ny.gov/diseases/communicable/coronavirus/'
+#TARGET_PATH='/html/body/div/div/div/div/div/div/tr/td'
+#DEFAULT_LOCATION='New York City:'
+
+# 2020-03-17 late afternoon 16:35
+URI='https://coronavirus.health.ny.gov/county-county-breakdown-positive-cases'
+TARGET_PATH='/html/body/div/div/main/div/div/div/div/div/div/div/div/table/tbody/tr/td'
+DEFAULT_LOCATION='New York City'
+
VALID_LOCATIONS='
Albany
+ Allegany
Broome
+ Clinton
Delaware
Dutchess
Erie
Monroe
Montgomery
Nassau
+ New York City
+ Onondaga
+ Ontario
Orange
Putnam
+ Rensselaer
Rockland
Saratoga
Schenectady
Suffolk
+ Sullivan
Tioga
Tompkins
Ulster
Westchester
- New York State (Outside of NYC)
- New York City:
- Total Positive Cases (Statewide)
+ Wyoming
'
-DEFAULT_LOCATION='New York City:'
usage() {
- printf "Usage: %s [LOCATION]\n" "$0"
+ printf "Usage: %s [OPTION | LOCATION]\n" "$0"
printf '\n'
+ printf 'OPTION = -h | --all \n'
printf 'LOCATION ='
printf '%s\n' "$VALID_LOCATIONS"
printf "Default LOCATION:\n %s\n" "$DEFAULT_LOCATION"
case "$1" in
'-h') usage;;
- '' ) location="$DEFAULT_LOCATION";;
- * ) location="$1";;
+ '--all') opt_all=1;;
+ '' ) target_location="$DEFAULT_LOCATION";;
+ * ) target_location="$1";;
esac
-curl 'https://health.ny.gov/diseases/communicable/coronavirus/' \
+curl "$URI" \
| hxpipe \
-| awk -v location="$location" '
- BEGIN {
- # 2020-03-16 morning-afternoon
- #target_path = "/html/body/div/div/div/div/div/div/table/tr/td"
-
- # 2020-03-16 late evening 22:30
- target_path = "/html/body/div/div/div/div/div/div/tr/td"
- }
-
+| awk \
+ -v target_location="$target_location" \
+ -v target_path="$TARGET_PATH" \
+ -v opt_all="$opt_all" \
+ '
/^[\(\)]/ {
update_node()
next
XmlPayload = substr($0, 2, length($0))
}
- XmlPath == target_path && XmlPayload == location {
- found = 1;
+ XmlPath == target_path && !location {
+ location = XmlPayload;
next
}
- XmlPath == target_path && found {
- print XmlPayload;
- found = 0;
+ XmlPath == target_path && location {
+ case_counts[location] = XmlPayload;
+ location = "";
next;
}
+ END {
+ if (opt_all) {
+ for (location in case_counts)
+ printf("%d|%s\n", case_counts[location], location)
+ } else {
+ printf("%d\n", case_counts[target_location])
+ }
+ }
+
function path_to_string(path, depth, p, i) {
p = ""
for (i = 1; i <= depth; i++) {
sub("^" $1 s $2 s, "", val)
_hxpipe_curr_attrs[key] = val
}
- '
+ ' \
+| column -ts\| \
+| sort -n -k 1