В настоящее время я работаю над проектом, чтобы получить ссылки на скачивание видео Vimeo. Как вы знаете, Vimeo, как и YouTube, не поддерживает функцию прямой загрузки через API остальных. Поскольку я знаю, что Vimeo предоставляет ссылки CDN на ссылку ресурса их проигрывателя для встраивания по адресу https://player.vimeo.com/video/{videoId}, я создал простую функцию DomDocument для доступа к конкретному JavaScript, который содержит необходимые ссылки для загрузки. Вот мой код:
// Define the Vimeo ID
$vimeoVideoId = htmlspecialchars((int) $_GET["id"]);
// Create new DomDocument Object.
$vimeoObject = new DOMDocument();
// Load the HTML Vimeo Embed Url
$vimeoObject->loadHTMLFile("https://player.vimeo.com/video/" . $vimeoVideoId);
// Create new XPath Dom Object
$xpathObject = new DOMXPath($vimeoObject);
// Get all JavaScript Elements without src="" attributes of the Vimeo Embed URL
Webpage
$getJavaScript = $xpathObject->query('//body//script[not(@src)]');
// Convert DomObject to Array with the help of iterator_to_array() Function.
$createArrayFromGetJavaScript = iterator_to_array($getJavaScript);
// Get rid of the first Array Part because the relevant content is in the
second Array Part
$array_shift = array_shift($createArrayFromGetJavaScript);
// Output the JavaScript Content with Vimeo CDN Video Files
echo $createArrayFromGetJavaScript[0]->nodeValue;
Теперь, когда вы более внимательно посмотрите на сгенерированный вывод, вы увидите, что вся необходимая информация обернута в допустимый JSON, и этот действительный JSON является значением переменной r.
Допустимый JSON внутри переменной r - снимок экрана, который я имею в виду
Теперь мой вопрос. Приведенный выше код работает как надо, но как мне получить доступ к содержимому этой конкретной переменной? Потому что, когда я могу получить весь элемент JSON, я могу перебрать его через json_decode($json, true);
в PHP. Есть ли способ сделать это. Я думал о чем-то вроде regex
с preg_match
или preg_match_all
. Но я пока не знаю, как создать эту строку регулярного выражения или как вывести соответствующий контент. Хороший ресурс для начинающих также помог бы, потому что тогда я также могу кое-что узнать для будущих проектов. Я уже исследовал на этом немецком веб-сайте здесь: https://www.php -einfach.de / php-tutorial / regulaere-ausdruecke / Но здесь я могу только найти, если утверждения, которые говорят, хорошо, то, что вы ищете for находится в вашей строке, но нет примера, как его скачать. Я попробовал это с помощью echo preg_match (...); Но это только вывод 1. Так что было бы здорово, если бы вы могли немного помочь мне с этой проблемой.
Спасибо заранее.
Пол
Update
Я пробовал этот код здесь, но теперь он ничего не выводит:
<?
header("Content-type: text/plain");
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Define the Vimeo ID
$vimeoVideoId = htmlspecialchars((int) $_GET["id"]);
// Create new DomDocument Object.
$vimeoObject = new DOMDocument();
// Load the HTML Vimeo Embed Url
$vimeoObject->loadHTMLFile("https://player.vimeo.com/video/" . $vimeoVideoId);
// Create new XPath Dom Object
$xpathObject = new DOMXPath($vimeoObject);
// Get all JavaScript Elements without src="" attributes of the Vimeo Embed URL Webpage
$getJavaScript = $xpathObject->query('//body//script[not(@src)]');
// Convert DomObject to Array with the help of iterator_to_array() Function.
$createArrayFromGetJavaScript = iterator_to_array($getJavaScript);
// Get rid of the first Array Part because the relevant content is in the second Array Part
$array_shift = array_shift($createArrayFromGetJavaScript);
preg_match("/var r = ({.+})/", $createArrayFromGetJavaScript[0]->nodeValue, $extracted_json);
// $extracted_json now contains the json as a string.
$json = json_decode($extracted_json[1], true);
// $json now contains the json parsed as an object.
print_r($json);
?>
Вместо этого отображаются следующие ошибки:
Warning: DOMDocument::loadHTMLFile(): Unexpected end tag : iframe in
https://player.vimeo.com/video/287117046, line: 1 in index.php on line 12
Warning: DOMDocument::loadHTMLFile(): Unexpected end tag : div in
https://player.vimeo.com/video/287117046, line: 1 in index.php on line 12
Notice: Undefined offset: 1 in index.php on line 28