<?php
function normalize ($url) {
	foreach ([["me.neet.si", "studen.me"]] as $subst)
		$url = str_replace($subst[0], $subst[1], $url);
	$url = strtolower($url);
	$url = preg_replace(',\.$,', "", preg_replace(',/+$,', "", $url));
	foreach ([["kajtebri.ga", "lmao.si"], ["4a.si", "sijanec.eu"], ["computers.si", "ass.si"], ["zigakralj", "ziga"], ["s54unc", "vovk"], ["mjau", "skret"], ["ć", "c"], ["Å¡", "s"], ["http:", ""], ["//", ""], ["https:", ""], ["www.", ""], ["š", "s"], ["č", "c"], ["ž", "z"], ["ć", "c"], ["Š", "s"], ["Č", "c"], ["Ž", "z"], ["Ć", "c"]] as $subst)
		$url = str_replace($subst[0], $subst[1], $url);
	if (str_contains($url, "/")) {
		$url = explode("/", $url);
		$url = array_pop($url);
	} else {
		$url = explode(".", $url)[0];
	}
	return $url;
}
function get_string_between($str, $start, $end) {
	return explode($end, explode($start, $str)[1])[0];
}
function extract_ahrefs ($str) {
	$dom = new DOMDocument();
	$dom->loadHTML($str . " "); // ker "source must not be empty" alneki
	foreach ($dom->getElementsByTagName("a") as $a)
		$r[] = $a->getAttribute("href");
	return $r;
}
function query_sijanec () {
	return extract_ahrefs(get_string_between(file_get_contents("http://splet.sijanec.eu"), "<!--generacija-->", "<!--/generacija-->"));
	$r = [];
	foreach (explode("\n", explode("<!--/generacija-->", explode("<!--generacija-->", file_get_contents("http://splet.sijanec.eu."))[1])[0]) as $line) {
		if (str_contains("href", $line))
			$r[] = explode(">", explode("=", $line)[1])[0];
	}
	return $r;
}
function query_ass () {
	return extract_ahrefs(get_string_between(file_get_contents("http://ass.si."), "Meni priljubljeni so internavti:", "</ul>"));
	/* $r = [];
	foreach (explode("<li>", explode("</ul>", explode("Meni priljubljeni so internavti:", file_get_contents("http://ass.si."))[1])[0]) as $line) {
		if (str_contains("href", $line))
			$r[] = explode('"', explode('"', $line)[1])[0];
	}
	return $r; */
}
function query_aikenahac () {
	return extract_ahrefs(get_string_between(file_get_contents("https://aikenahac.com"), "Kolegi z medmrežja", "</ul>"));
	$r = [];
	foreach (explode('<a ', explode("</ul>", explode("Friends on the net", file_get_contents("https://aikenahac.com"))[1])[0]) as $line) {
		if (str_contains("href", $line))
			$r[] = explode('"', explode('="', $line)[1])[0];
	}
	return $r;
}
function query_babnik () {
	return extract_ahrefs(get_string_between(file_get_contents("https://babnik.io"), "Shoutouts", "</ul>"));
	$r = [];
	foreach (explode("<a ", explode("</ul>", explode("Shoutouts", file_get_contents("https://babnik.io"))[1])[0]) as $line) {
		if (str_contains("href", $line))
			$r[] = explode('"', explode('="', $line)[1])[0];
	}
}
function query_fortuna () {
	return extract_ahrefs(get_string_between(file_get_contents("https://fortuna.wf"), "Kul ljudje z medmre", "</div>"));
	$r = [];
	foreach (explode("<a ", explode("</div>", explode("Kul ljudje z medmre", file_get_contents("https://fortuna.wf/"))[1])[0]) as $line) {
		if (str_contains("href", $line))
			$r[] = explode('"', explode('="', $line)[1])[0];
	}
	return $r;
}
function query_jakakovac () {
	$r = [];
	$dom = new DOMDocument();
	$dom->loadHTML(file_get_contents("https://www.jakakovac.si/"));
	foreach ($dom->getElementById('people')->getElementsByTagName("a") as $a)
		$r[] = $a->getAttribute("href");
	return $r;
}
function query_lukaverc () {
	return [];
}
function query_martin () {
	return [];
}
function query_nejckrasevec () {
	return [];
}
function query_oliwerix () {
	return [];
}
function query_robinhud () {
	return [];
}
function query_rstular () {
	return [];
}
function query_severkar () {
	return [];
}
function query_skret () {
	return extract_ahrefs(explode("</ul>", explode("kulske ljudi na", file_get_contents("https://skret.net"))[1])[0]);
}
function query_srcnik () {
	return extract_ahrefs(get_string_between(file_get_contents("http://srcnik.si."), "Prijatelji v mre", "</ul>"));
	// return extract_ahrefs(explode("</ul>", explode("Prijatelji v mre", file_get_contents("http://srcnik.si."))[0]));
}
function query_trussevich () {
	return [];
}
function query_vujic () {
	return [];
}
function query_ziga () {
	$a = get_string_between(file_get_contents("https://ziga.kralj.io"), "Znanci z medmr", "</ul>");
	$b = get_string_between(file_get_contents("https://ziga.kralj.io"), "Interweb associates", "</ul>");
	if ($a == "")
		return extract_ahrefs($b);
	return extract_ahrefs($a);
}
function query_studen () {
	return extract_ahrefs(get_string_between(file_get_contents("https://studen.me"), "Frens", "</ul>"));
}
function query_gapi () {
	return extract_ahrefs(get_string_between(file_get_contents("https://gapi.me"), "Cool People Network", "</ul>"));
}
function query_govekar () {
	return extract_ahrefs(get_string_between(file_get_contents("https://govekar.net"), "Zanimivi ljudje", "</ul>"));
}
function query_golobii () {
	return [];
}
function query_svenahac () {
	return [];
}
function query_timhrovat () {
	return [];
}
function query_perchperkins () {
	return [];
}
function query_asavkovic () {
	return extract_ahrefs(get_string_between(file_get_contents("https://www.asavkovic.xyz"), "Prijatelji z omre", "</center>"));
}
function query_jkob () {
	return [];
}
function query_azugicjehart () {
	return [];
}
function query_cernetic () {
	return extract_ahrefs(get_string_between(file_get_contents("https://cernetic.cc"), "Friends on the web", "</ul>"));
}
function query_thesuperlab () {
	return [];
}
function query_vovk () {
	return extract_ahrefs(get_string_between(file_get_contents("https://vovk.netlify.app"), "Cool People Network", "</ul>"));
}
function query_lea () {
	return [];
}
function query_hyperborea () {
	return [];
}
function query_kajtebri () {
	return [];
}
function query_sushy () {
	return [];
}
function query_lovro () {
	return [];
}
function query_bertoncelj () {
	return [];
}
function query_timthuma () {
	return [];
}
function query_blazdular () {
	return [];
}
function query_quartzy () {
	return [];
}
function query_markilovar () {
	return extract_ahrefs(get_string_between(file_get_contents("https://markilovar.com"), "Cool People", "</ul>"));
}
function query_cadez () {
	return extract_ahrefs(get_string_between(file_get_contents("https://cadez.eu"), "Friends on the web", "</ul>"));
}
function query_janez () {
	return [];
}
function query_majmohar () {
	return [];
}
function query_gribanica () {
	return [];
}
function query_dodoworks () {
	return [];
}
function query_skvarca () {
	return [];
}
function query_jonpecar () {
	return [];
}
function query_matija () {
	return [];
}
function query_testman () {
	return [];
}
function query_muhvic () {
	return extract_ahrefs(get_string_between(file_get_contents("https://muhvic.com"), '<div id="friends">', "</div>"));
}
function query_oprin () {
	return []; // website mu ni delal 2024-06-09
}
function query_crushedcookienut () {
	return extract_ahrefs(get_string_between(file_get_contents("https://crushedcookienut.github.io"), "LJUDJE, KI JIH POZNAM", "</ul>"));
}
function query_laurabavcon () {
	return extract_ahrefs(get_string_between(file_get_contents("https://laurabavcon.eu"), "LJUDJE, KI JIH POZNAM", "</ul>"));
}
function query_hugotrebse () {
	return [];
}
function query_lmao () {
	return extract_ahrefs(get_string_between(file_get_contents("http://lmao.si"), "prijetelji in ostale strani", "</div>"));
}
function query_makovec () {
	return [];
}
function get_graph () {
	$queue = ["sijanec"];
	$completed = [];
	$edges = [];
	$not_implemented = [];
	$errors = [];
	while (sizeof($queue) > 0) {
		$queue_copy = $queue;
		foreach ($queue_copy as $website) {
			$added = 0;
			$completed[] = $website;
			$queue = array_diff($queue, [$website]);
			foreach (("query_" . $website)() as $url) {
				$normed = normalize($url);
				if (function_exists("query_" . $normed)) {
					if (!in_array($normed, $completed))
						$queue[] = $normed;
					if (!in_array([$website, $normed], $edges))
						$edges[] = [$website, $normed];
					$added++;
				} else
					$not_implemented[$normed] = [$url, $website];
			}
			if ($added == 0)
				$errors[] = $website;
		}
	}
	return ["completed" => $completed, "edges" => $edges, "not_implemented" => $not_implemented, "errors" => $errors];
}
function edges_to_dot ($edges) {
	$r = "digraph D {\ngraph [overlap=false splines=true];\n";
	foreach ($edges as $edge)
		$r .= "\t" . $edge[0] . " -> " . $edge[1] . ";\n";
	$r .= "}\n";
	return $r;
}
ini_set('default_socket_timeout', 1);
header("X-Accel-Buffering: no");
ob_implicit_flush(true);
header("Content-Type: text/plain");
if (!empty($_REQUEST['src'])) {
	die(file_get_contents($_SERVER["SCRIPT_FILENAME"]));
}
$graph = get_graph();
echo "NAPAKE: \n";
var_dump($graph["errors"]);
echo "NOT IMPL:\n";
var_dump($graph["not_implemented"]);
file_put_contents("generacija.dot", edges_to_dot($graph["edges"]));
$gen = "dot";
foreach (["png", "pdf", "svg"] as $tip)
	echo `$gen -T$tip -o generacija.$tip generacija.dot 2>&1`;
echo "REGENERIRANO!";