Находим актуальную версию Flashphoner WebSDK 2.0

, Михаил

Сложно найти в этом огромном списке актуальную версию сборки. Теперь с помощью небольшого парсера получаем свежую дату и название файла для скачивания.

Результат можно посмотреть тут


<?php 

    public function getListUpdates() {
	        $html file_get_contents('https://flashphoner.com/downloads/builds/flashphoner_client/wcs_api-2.0/');
	        $build [];
	        $doc = new DOMDocument();
	        $doc->loadHTML($html);
	        $xpath = new DOMXpath($doc);
	        $xPathText $xpath->query('//table//tr');
	        foreach ($xPathText as $row) {
		            $a $xpath->query('.//td[2]/a'$row);
		            $date $xpath->query('.//td[3]'$row);
		            if (trim($a->item(0)->nodeValue) != "Parent Directory" && trim($date->item(0)->nodeValue) != "") {
			                $build[trim($date->item(0)->nodeValue)] = trim($a->item(0)->nodeValue);
			            }
		        }
	        uksort($build"cmpDate");
	        reset($build);
	        return ["date" => key($build), "file" => current($build)];
	    }

?>

И функция для сравнения двух дат


<?php 
function cmpDate($a$b) {
	    $cA strtotime($a);
	    $cB strtotime($b);
	    if ($cA == $cB) {
		        return 0;
		    } else {
		        return ($cA $cB) ? : -1;
		    }
	}
?>

Потом скачиваем и распаковываем наш архив, выбираем файлы для обновления - копируем в рабочую папку.


<?php 

        file_put_contents($this->updateFilefile_get_contents($this->urlUpdate $this->freshBuild['file']));
        // Распаковываем обновления
        exec("tar -zxvf {$this->updateFile} -C {$this->archive_dir}");
        // Определяем набор файлов для обновления
        $findFirst glob($this->archive_dir "/*"GLOB_ONLYDIR);
        reset($findFirst);
        $unpackedDir current($findFirst);
        $filesUpdate = [
            "$unpackedDir/examples/demo/dependencies/websocket-player/video-worker2.js" => "$this->pathToUpdate/video-worker2.js",
            "$unpackedDir/examples/demo/dependencies/websocket-player/WSReceiver2.js" => "$this->pathToUpdate/WSReceiver2.js",
            "$unpackedDir/examples/demo/dependencies/js/utils.js" => "$this->pathToUpdate/utils.js",
            "$unpackedDir/media-provider.swf" => "$this->pathToUpdate/media-provider.swf",
            "$unpackedDir/flashphoner.min.js" => "$this->pathToUpdate/flashphoner.min.js",
            "$unpackedDir/flashphoner.js" => "$this->pathToUpdate/flashphoner.js",
             // С player.js осторожнее, т.к. в нём изменения, потом сравниваем в редакторе
            "$unpackedDir/examples/demo/streaming/embed_player/player.js" => "$this->pathToUpdate/player.upd.js",
        ];
        // Копируем обновлённые файлы
        foreach ($filesUpdate as $fileFrom => $fileTo) {
	            copy($fileFrom$fileTo);
	        }

?>