#!/bin/sh

URL="https://www.infoclimat.fr/climatologie-mensuelle/07147/@mois@/@an@/villacoublay-velizy.html"
URL="https://www.infoclimat.fr/climatologie-mensuelle/ME113/@mois@/@an@/-mae-lycee-parc-de-vilgenis-massy.html"

recup()
{
	local an="$1" mois="$2"
	local format="jour\"/$mois/$an\""
	case "$3" in iso) format="\"$an-$mois-\"jour" ;; esac
	case $mois in
		1|01) moisA=janvier ;;
		2|02) moisA=fevrier ;;
		3|03) moisA=mars ;;
		4|04) moisA=avril ;;
		5|05) moisA=mai ;;
		6|06) moisA=juin ;;
		7|07) moisA=juillet ;;
		8|08) moisA=aout ;;
		9|09) moisA=septembre ;;
		10) moisA=octobre ;;
		11) moisA=novembre ;;
		12) moisA=decembre ;;
	esac
	local url="`echo "$URL" | sed -e "s/@mois@/$moisA/g" -e "s/@an@/$an/g"`"
	curl -s "$url" | awk '
function n(){
	sub(/^[^>]*>/, "");
	sub(/<.*/, "");
	sub(/\./, ",");
}
/<span class=.climday.>/{
	n();
	jour = $0;
	if(length(jour) == 1)
		jour = "0"jour;
	trouve = 0;
}
jour&&/<\/tr>/{ jour = ""; }
jour&&/<span class="named-units"/{
	n();
	t[++trouve] = $0;
	if(trouve == 2)
	{
		print '"$format"'" "t[1]" "t[2]" "((t[1] + t[2]) / 2);
		jour = "";
	}
}'
}

# Sort les températures moyennes pour une liste de dates fournies en entrée.
# Si une date est suivie d'un trou, la moyenne donnée comprendra le trou
# (ex.: si l'on demande les moyennes pour le 6, le 8, et le 9 du mois, seront renvoyées pour le 6 la moyenne du 6 ET du 7, tandis que le 8 et le 9 auront juste la moyenne propre au jour).
pourListe()
{
	local t=/tmp/temp.temp.$$
	# La liste de dates à récupérer est mise au propre.
	sed -E -e 's#^([0-3]?[0-9])/([0-1][0-9])/(20)?([0-9][0-9]).*#20\4-\2-\1#' -e 's#-([0-9])$#-0\1#' > $t.afaire
	{
		# On récupère les températures (mois par mois):
		cut -d - -f 1,2 < $t.afaire | sort -u | tr - ' ' \
		| while read an mois
		do
			recup $an $mois iso
		done \
		| awk '{print $1" "$4}'
		# Et on y entremêle les dates souhaitées:
		cat $t.afaire
	} \
	| sort | awk '
function aff(dern)
{
	if(njours > 0)
	{
		val = dern ? jourmeme : cumul / njours;
		# Arrondi au dixième.
		frac = val % 0.1;
		val += (frac >= 0.049 ? 0.1 : (frac <= -0.049 ? -0.1 : 0)) - frac;
	}
	else
		val = "";
	while(--nocc >= 0)
		print dcherchee" "val;
}
/^[^ ]+$/{
	if(dcherchee == $1)
	{
		++nocc;
		next;
	}
	aff();
	
	dcherchee = $1;
	nocc = 1;
	cumul = 0;
	njours = 0;
	next;
}
dcherchee{
	if(!njours) jourmeme = $2;
	cumul += $2;
	++njours;
}
END{ aff(1); }'
}

case "$1" in
	-)
		pourListe
		;;
	*)
recup "$@"
		;;
esac
