Я пытаюсь загрузить исходный HTML-код удаленной страницы в строку в PHP, используя это потрясающее музыкальное видео Galantis. https://www.youtube.com/watch?v=5XR7naZ_zZA В качестве примера.
Затем я хочу найти конкретный идентификатор div «action-panel-details» внутри исходного кода и подтвердить, когда он был найден. С помощью приведенного ниже кода вся страница просто загружается на страницу, которую я запускаю на моем сервере.
Это возможно даже с file_get_contents ()? Это код, который загружает страницу, видео и все:
<?php
$str = file_get_contents('https://www.youtube.com/watch?v=5XR7naZ_zZA');
if(preg_match("~action-panel-details~", $str)){
echo "it's there";
}
?>
Я попытался использовать simplexml_load_file () также и в конечном итоге с этой ошибкой:
Warning: simplexml_load_string(): Entity: line 1: parser error : xmlParseEntityRef: no name in /page.php on line 5
Warning: simplexml_load_string(): ndow, document);</script><script>var ytcfg = {d: function() {return (window.yt & in /page.php on line 5
Warning: simplexml_load_string(): ^ in /page.php on line 5
Warning: simplexml_load_string(): Entity: line 1: parser error : xmlParseEntityRef: no name in /page.php on line 5
Это код, который производит это:
<?php
$str = file_get_contents('https://www.youtube.com/watch?v=5XR7naZ_zZA');
$str = simplexml_load_string($str);
if(preg_match("~watch-time-text~", $str)){
echo "it's there";
}
?>
Любая помощь с благодарностью.
Да, ты очень близко. По сути, просто удалите часть, в которой вы пытаетесь загрузить это в XML, поскольку код страницы — это HTML, а не XML.
$str = file_get_contents('https://www.youtube.com/watch?v=5XR7naZ_zZA');
if(preg_match("~watch-time-text~", $str)){
print "Match was found!";
}
else {
print "No match was found. :(";
}
Это будет отображать:
Match was found!
К сожалению, я не могу показать вам демо ideone.com
а также codepad.org
не позволяют мне использовать file_get_contents
, но это работает с моего собственного сервера.
Если вы столкнетесь с ситуациями, когда file_get_contents
не разрешено, как у меня, вы можете сделать, как сказал miglio, и использовать cURL для получения удаленного источника. Но в остальном тоже самое
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.youtube.com/watch?v=5XR7naZ_zZA');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$str = curl_exec($ch);
curl_close($ch);if(preg_match("~watch-time-text~", $str)){
print "Match was found!";
}
else {
print "No match was found. :(";
}
используя curl возможно:
//$url = 'https://www.youtube.com/';
$url = "https://www.youtube.com/watch?v=5XR7naZ_zZA";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$content = curl_exec($ch);
curl_close($ch);
if(preg_match("~watch-time-text~", $content)){
echo "it's there";
}else{
echo 'is another page';
}
print document code:
echo "<pre>".htmlentities($content)."<pre>";
//
match whit html code in 'watch-time-text':
<div id="action-panel-details" class="action-panel-content yt-uix-expander
yt-uix-expander-collapsed yt-card yt-card-has-padding">
<div id="watch-description" class="yt-uix-button-panel">
<div id="watch-description-content">
<div id="watch-description-clip"><span id="watch-description-badges"></span>
<div id="watch-uploader-info"><strong class="watch-time-text">