Le matin, quand je prends le petit déjeuner, je regarde à travers Yandex, le temps presque tous les jours et je ressens périodiquement un sentiment de déjà-vu, mais seulement l'inverse. Vous regardez - une température pour le week-end est indiquée, et le lendemain vous regardez - déjà les autres indicateurs de température sont promis. Lentement, vous commencez à douter de votre mémoire (30 ans - c'est déjà la quatrième douzaine qui a commencé). Mais afin de ne pas complètement perdre courage, j'ai décidé de vérifier dans quelle mesure les prévisions sont corrélées avec la température réelle.
La ligne bleue représente la température réelle. La zone orange est la gamme de prédictions.

La source de l'image .
Quelques détails techniques
Tout d'abord, j'ai installé un script dans les couronnes qui enregistre la page Yandex.Weather toutes les heures sous forme de fichier html et l'a laissé fonctionner pendant un certain temps.
curl https://yandex.ru/pogoda/novosibirsk > test/`date +%Y-%m-%d-%H-%M`
php , , json , , , . :
function parseFile($day) {
global $mega, $csv, $realT;
$predicts = [];
$html = file_get_html(__DIR__ . '/test/' . $day);
foreach($html->find('.forecast-brief_cols_10') as $element) {
foreach ($element->find('.forecast-brief__item-temp-day') as $s) {
$predicts[] = str_replace('−', '-', $s->plaintext);
}
}
$dayDate = date_create_from_format("Y-m-d-H-i", $day);
$dayDateString = date_format($dayDate, 'Y-m-d H:i:s');
$dayArr = explode('-', $day);
if ($dayArr[3] == 14) {
foreach($html->find('.current-weather__thermometer_type_now') as $s) {
$realT[] = [
intval(date_format($dayDate, 'U') . '000'),
intval(str_replace('−', '-', $s->plaintext))
];
}
}
for ($i = 1; $i < count($predicts); $i++) {
$nextDay = date('Y-m-d', strtotime('+' . $i . ' day', strtotime($dayDateString)));
$nextDayArr = explode('-', $nextDay);
$line = [
'Y' => $dayArr[0],
'm' => $dayArr[1],
'd' => $dayArr[2],
'H' => $dayArr[3],
'i' => $dayArr[4],
'_m' => $nextDayArr[1],
'_d' => $nextDayArr[2],
'_C' => $predicts[$i]
];
$mega[] = $line;
$csv .= join(';', array_values($line)) . "\n";
}
}

, , . .
:


, .