summaryrefslogtreecommitdiffstats
path: root/skripti/t2izpadi.php
blob: 6230fdd13b45d64adc758744a56718424835d9ce (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/php
<?php
$hrstart = hrtime(TRUE);
if (!empty($_REQUEST["src"])) {
	header("Content-Type: text/plain");
	die(file_get_contents($_SERVER["SCRIPT_FILENAME"]));
}
$d = file_get_contents("https://www.t-2.net/delovanje-sistema");
$x = new DOMDocument();
$x->loadHTML($d);
$izpadi = [];
foreach ($x->getElementsByTagName("div") as $div) {
	if ($div->getAttribute("class") == "system-msg-single") {
		$naslov = $div->getElementsByTagName("h2")[0]->nodeValue;
		$kraj = NULL;
		$besedilo = "";
		foreach ($div->getElementsByTagName("p") as $p) {
			if ($p->getAttribute("class") == "system-msg-kraj") {
				$kraj = $p->nodeValue;
			} else {
				if ($besedilo && trim($p->nodeValue))
					$besedilo .= PHP_EOL;
				$besedilo .= trim($p->nodeValue);
			}
		}
		if (explode(": ", $kraj)[0] == "Kraj")
			$kraj = explode(": ", $kraj)[1];
		$kraji = explode(", ", $kraj);
		$napovedan = NULL;
		if (str_contains(strtolower($naslov), "napovedan"))
			$napovedan = TRUE;
		if (str_contains(strtolower($naslov), "nenapovedan"))
			$napovedan = FALSE;
		$od = explode(" do ", explode(" od ", $naslov)[1])[0];
		$do = explode(" do ", $naslov)[1];
		$od = DateTimeImmutable::createFromFormat("d. m. Y H:i", $od, new DateTimeZone("Europe/Ljubljana"));
		$do = DateTimeImmutable::createFromFormat("d. m. Y H:i", $do, new DateTimeZone("Europe/Ljubljana"));
		$izpadi[] = ["napovedan" => $napovedan, "naslov" => $naslov, "kraji" => $kraji, "kraj" => $kraj, "besedilo" => $besedilo, "od" => $od->format("c"), "do" => $do->format("c"), "odunix" => intval($od->format("U")), "dounix" => intval($do->format("U")), "hash" => hash("sha256", hash("sha256", $naslov, TRUE) . hash("sha256", $kraj, TRUE) . hash("sha256", $besedilo, TRUE), FALSE)];
	}
}
$db = new PDO("sqlite:t2izpadi.sqlite3", null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
if (!$db) {
	http_response_code(503);
	error_log("Ne morem odpreti podatnovne zbirke!");
	exit(1);
}
$db->query("create table if not exists izpadi (hash TEXT PRIMARY KEY UNIQUE NOT NULL, napovedan INTEGER, naslov TEXT NOT NULL, od TEXT NOT NULL, do TEXT NOT NULL, kraj TEXT, besedilo TEXT NOT NULL, first default CURRENT_TIMESTAMP, last default CURRENT_TIMESTAMP, lost)");
$db->query("create table if not exists poizvedbe (datum default CURRENT_TIMESTAMP, objavljenih INTEGER NOT NULL, zakasnitev INTEGER NOT NULL)");
$stored_hashes = [];
$found_hashes = [];
$stmt = $db->query("select hash from izpadi where lost IS NULL;");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
	$stored_hashes[] = $row["hash"];
$stmt = $db->prepare("insert into izpadi (hash, napovedan, naslov, od, do, kraj, besedilo) values (:hash, :napovedan, :naslov, :od, :do, :kraj, :besedilo) ON CONFLICT(hash) DO UPDATE SET last=CURRENT_TIMESTAMP");
foreach ($izpadi as $izpad) {
	$hash = hex2bin($izpad["hash"]);
	$found_hashes[] = $hash;
	$stmt->bindParam(":hash", $hash);
	$stmt->bindParam(":napovedan", $izpad["napovedan"]);
	$stmt->bindParam(":naslov", $izpad["naslov"]);
	$stmt->bindParam(":od", $izpad["od"]);
	$stmt->bindParam(":do", $izpad["do"]);
	$stmt->bindParam(":kraj", $izpad["kraj"]);
	$stmt->bindParam(":besedilo", $izpad["besedilo"]);
	$stmt->execute();
}
$lost_hashes = array_diff($stored_hashes, $found_hashes);
$test = array_diff($found_hashes, $stored_hashes);
foreach ($izpadi as $izpad) {
	if (in_array(hex2bin($izpad["hash"]), $test))
		var_dump($izpad);
}
if (sizeof($found_hashes) /* mogoče je website crknil in nismo dobili nobenih obvestil, v tem primeru ne štejemo obvestil kot izgubljenih */) {
	$stmt = $db->prepare("update izpadi set lost=CURRENT_TIMESTAMP where hash=:lost_hash");
	foreach ($lost_hashes as $lost_hash) {
		$stmt->bindParam(":lost_hash", $lost_hash);
		$stmt->execute();
	}
}
$db->query("insert into poizvedbe (datum, objavljenih, zakasnitev) VALUES (CURRENT_TIMESTAMP, " . sizeof($izpadi) . ", " . hrtime(TRUE)-$hrstart . ")");