La prima riga è quello di controllo degli errori di cURL e significa che non ci sono errori.
Il warning dice che non riconosce il tag "section" (non riconosce i nuovi tag di HTML5). Per risolvere modifica in questo modo:
Codice PHP:
if ($doc->loadHTML($html, LIBXML_NOWARNING)) {
Il notice e il fatal error sono dovuti al fatto che avevo sbagliato a scrivere il nome della variabile $doc e avevo scritto $dom. Per risolvere modifica in questo modo:
Citazione:string(0) ""
Warning: DOMDocument::loadHTML(): Tag section invalid in Entity, line: 37 in /home/jo1sy1qs/public_html/prova_video.php on line 25
Il video non è stato trovato
Citazione:string(0) ""
Warning: DOMDocument::loadHTML(): Tag section invalid in Entity, line: 37 in /home/jo1sy1qs/public_html/prova_video.php on line 25
string(3059) "
Please enable cookies.
Error 1008 Ray ID: 40e13941ab5c6b7f • 2018-04-19 17:52:13 UTC
Access denied
What happened?
The owner of this website (wstream.video) has banned your IP address (185.2.4.48).
Cloudflare Ray ID: 40e13941ab5c6b7f • Your IP: 185.2.4.48 • Performance & security by Cloudflare
Nel codice HTML che restituisce c'è scritto che è stato bannato l'IP del tuo server da Cloudflare e quindi non ti fa vedere il codice HTML effettivo del sito.
Potresti provare a modificare le opzioni in questo modo passandogli l'user agent del tuo browser.
Citazione:string(0) ""
Warning: DOMDocument::loadHTML(): Tag section invalid in Entity, line: 37 in /home/jo1sy1qs/public_html/prova_video.php on line 26
string(3059) "
Please enable cookies.
Error 1008 Ray ID: 40e852413f1006ee • 2018-04-20 14:32:37 UTC
Access denied
What happened?
The owner of this website (wstream.video) has banned your IP address (185.2.4.48).
Cloudflare Ray ID: 40e852413f1006ee • Your IP: 185.2.4.48 • Performance & security by Cloudflare
Sembrerebbe che ormai l'IP di quel server sia bannato. Dovresti fare la prova con un altro server (solo un tentativo, altrimenti bannano per quello) o aspettare qualche giorno sperando che l'IP venga tolto dal ban.
21/04/2018 16:47 (Questo messaggio è stato modificato l'ultima volta il: 21/04/2018 16:58 da Chandler.)
ho provato su un altro server e mi da questo errore (e sotto l'errore viene visualizzata la pagina wstream (ti allego screen per farti capire):
Citazione:string(0) "" Warning: DOMDocument::loadHTML(): Attribute id redefined in Entity, line: 95 in /htdocs/public/www/prova_video.php on line 26 Warning: DOMDocument::loadHTML(): Tag video invalid in Entity, line: 95 in /htdocs/public/www/prova_video.php on line 26 Warning: DOMDocument::loadHTML(): Tag source invalid in Entity, line: 96 in /htdocs/public/www/prova_video.php on line 26 Warning: DOMDocument::loadHTML(): Tag video invalid in Entity, line: 110 in /htdocs/public/www/prova_video.php on line 26 Warning: DOMDocument::loadHTML(): Tag source invalid in Entity, line: 111 in /htdocs/public/www/prova_video.php on line 26 Warning: DOMDocument::loadHTML(): Tag footer invalid in Entity, line: 116 in /htdocs/public/www/prova_video.php on line 26 Warning: DOMDocument::loadHTML(): ID container already defined in Entity, line: 117 in /htdocs/public/www/prova_video.php on line 26 string(5101) "
23/04/2018 14:08 (Questo messaggio è stato modificato l'ultima volta il: 23/04/2018 14:32 da Chandler.)
hai ragione, in fondo mi stampa il link del video!
Adesso vorrei capire però come fare con le altre pagine della stessa piattaforma, tipo questa! In questo caso il link (in realtà sono due di due risoluzioni diverse) si vede già nel codice senza premere play, solo che a differenza della home sembra sia in javascript, e si trova dentro lo script di type text/javascript:
Codice:
<script type='text/javascript'>var player = new Clappr.Player({
sources:
e qui ci sono i due link dei file dalle risoluzioni differenti)
Per questa tipologia di pagina come bisognerebbe sistemare il codice?
Ho visto che nel codice ci sono due dischiarazioni dei file MP4 e la seconda è quella che viene utilizzata effettivamente.
In questo caso si dovrebbe utilizzare un'espressione regolare, ma, appena faranno qualche piccola modifica al codice HTML, non sarà più valida.
Codice PHP:
// Verifico che il codice HTML sia stato recuperato correttamente if ($html !== false) { $m = array(); // Cerco tutti i "sources: [..]" if (preg_match_all('/sources:([\s]+?)\[([^\]]+)]/', $html, $m) { // Prendo l'ultimo elemento trovato con l'espressione regolare tra le stringhe trovate tra le due parentesi quadre $videos = explode(',', end($m[2]));
// Recupero il primo video eliminando spazi iniziali e finali e poi virgolette iniziali e finali $src = trim(trim($videos[0]), '"'); } }
23/04/2018 19:49 (Questo messaggio è stato modificato l'ultima volta il: 23/04/2018 20:04 da Chandler.)
questa parte la devo aggiungere al codice esistente, oppure deve sostituire tutta la parte del richiamo della libreria dom e della ricerca del tag video?
(l'ideale sarebbe far convivere entrambi i controlli, così lo script in un caso o nell'altro esporta il link del video)
Prima utilizzo il metodo per cercare i tag "video". Se non viene trovato nessun video, utilizza il metodo per cercare i "sources" della classe di JavaScript.
Codice PHP:
// Verifico che il codice HTML sia stato recuperato correttamente if ($html !== false) { // Utilizzo la libreria DOM di PHP per gestire il codice HTML $doc = new DOMDocument();
// Assegno il codice HTML alla classe e verifico che il codice HTML sia corretto if ($doc->loadHTML($html, LIBXML_NOWARNING)) { // Cerco tutti i tag "video" $videos = $doc->getElementsByTagName('video');
// Scorro i tag "video" foreach ($videos as $video) { // Scorro i tag figli foreach ($video->childNodes as $node) { // Cerco il tag "source" if ($node->nodeName == 'source') { // Verifico che il tag "source" abbia degli attributi if ($node->attributes) { // Estraggo il valore dell'attributo "src" dal tag "source" $src = $node->attributes->getNamedItem('src')->nodeValue; // Fermo il ciclo se è stato trovato il video if ($src) { break; } } } } // Fermo il ciclo se è stato trovato il video if ($src) { break; } } }
// Se non è stato trovato il video con il metodo precedente... if (!$src) { $m = array(); // Cerco tutti i "sources: [..]" if (preg_match_all('/sources:([\s]+?)\[([^\]]+)]/', $html, $m) { // Prendo l'ultimo elemento trovato con l'espressione regolare tra le stringhe trovate tra le due parentesi quadre $videos = explode(',', end($m[2]));
// Recupero il primo video eliminando spazi iniziali e finali e poi virgolette iniziali e finali $src = trim(trim($videos[0]), '"'); } } }
24/04/2018 18:50 (Questo messaggio è stato modificato l'ultima volta il: 24/04/2018 18:52 da Chandler.)
ok, effettivamente in questo modo mi visualizza un link (che però non corrisponde a nessuno dei due che vedo dal sorgente) e se effettivamente provo ad andare al link mi dice
Citazione:error_wrong_ip
mentre nei link che copio dal sorgente mi va al video senza problemi.
Inoltre refreshando la pagina dallo script mi da sempre un link differente, mentre se chiudo e riapro il sorgente i link sono gli stessi...
Se chiudi e riapri il sorgente, il codice è sempre lo stesso. Dovresti chiudere il sorgente, aggiornare la pagina e riaprire il sorgente.
Comunque credo che il problema sia dato dal fatto che quel sito genere un link al video per ogni indirizzo IP che lo visualizza e poi fa il controllo dell'indirizzo IP quando si guarda/scarica il video. In questo caso genera un link al video per l'indirizzo IP del server e, quando provi a vedere il video, ti dà errore perché il tuo IP è diverso da quello del server.
Citazione:string(58) "bind failed with errno 99: Cannot assign requested address" Il video non è stato trovato
resta il fatto che il sito che ti ho linkato quando ho riaperto questo post (dexi.io), fa esattamente quello che mi serve. Basta fare login con facebook, creare un nuovo robot, inserire il link della pagina e attendere qualche secondo finchè non visualizza il link corretto del video (col ip del browser evidentemente).
03/05/2018 20:56 (Questo messaggio è stato modificato l'ultima volta il: 09/05/2018 15:03 da Chandler.)
si, questo è chiaro, e mi sta pure bene! Però deve essere possibile ovviare il problema dell'indirizzo del server, rispetto all'indirizzo del browser... immaginati che questo script non stia necessariamente su un server ma incapsulato in una webapp che esporta il link del video in base al browser che utilizzano webapp/device .... non so se mi spiego
Se ipoteticamente lo script è in una webapp, non potrebbe utilizzare l'indirizzo del browser del device ed ottenere il link corretto?
Se si crea una pagina con all'interno un iframe con la pagina del video, non è possibile accedere ai dati della pagina inclusa perché si tratta di un dominio diverso (viene bloccato dal browser per evitare problemi di cross-site scripting).
con webapp intendo uno script in html5+php in grado di svolgere le operazioni che dicevo tramite il dispositivo mobile dal quale si utilizza (lo smartphone).
Es. io admin da un cms inserisco la pagina con iframe dentro allo script che dovrebbe estrapolare il video. Ma in realtà sarà l'utente, quando cliccherà sul nome di quel video, a sniffare realtime il video e a vederlo... dal suo browser e dispositivo...nn so se mi spiego...