Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
convertire media sn|ff3r in web script
#61
A quanto pare il problema è quello che hai scritto tu nel messaggio precedente. YouTube inizia a far scaricare il video MP4 solo dopo il play e quindi non è tra i file che vengono scaricati al caricamento della pagina.
Mattia!
Cita messaggio
#62
quindi secondo te come faccio a risolvere? Sicuramente c'è un modo, perché anche i più noti siti "raggruppatori" di streaming (cito cb01, piratesstr3aming e compagnia) penso che utilizzino questo stesso metodo...
Esiste un modo per simulare o proprio inviare il comando del play?
Cita messaggio
#63
Ho provato a fare una ricerca veloce e non sembra che sia possibile.
Inoltre tra gli standard Web supportati non ci sono i video, anche se a te non serve mostrare il video, ma solo saperne l'URL.
Mattia!
Cita messaggio
#64
quindi mi dovrei mettere i cuore in pace o continuare a cercare una soluzione differente?
Cita messaggio
#65
Visto che hai libertà d'azione sul server, potresti provare a cercare se esiste qualcosa per Node.js, ma non saprei aiutarti molto, perché non l'ho mai provato.
Mattia!
Cita messaggio
#66
Ciao Mattia,
mi suggeriscono che si dovrebbe scrivere codice in phanthomjs: Lui è in grado di triggerare il play
Occorre vedere che id ha il tasto play e performare il click programmaticamente.
Cita messaggio
#67
Il problema è che il video non è presente nel codice HTML, ma viene incluso dopo tramite JavaScript in base al browser (se supporta i video di HTML5 o Flash). PhantomJS, come ho scritto prima, non supporta i video e quindi non lo include.
Mattia!
Cita messaggio
#68
Buonasera Mattia,
riapro la questione in quanto ho conosciuto questo sito, dove puoi registrarti gratuitamente e puoi crearti un robots (che "scrapa" o meglio "scopre" i contenuti di una pagina web). se ad esempio provi a farti un tuo account e ad inserire questo link per fare una analisi, puoi vedere che il sito ti trova quasi subito la sorgente del video che contiene (senza che nessuno abbia schiacciato play). Questo vuol dire che questo sito ha uno script che funziona e che fa esattamente quello che dico io... secondo te riusciamo a scoprire di cosa si tratta?

Attendo tuo feedback, grazie
Chand
Cita messaggio
#69
Non mi sono registrato, perché dovrei leggere il codice sorgente di Dexi (che non dovrebbe comunque essere una cosa semplice visto che il servizio costa almeno un centinaio di dollari al mese) per capirne il funzionamento.

Il video di cui hai messo il link non è più disponibile, comunque, se i video sono inclusi come in home page, basta leggere il codice HTML per estrapolare il video da questo sito. Infatti nel codice sorgente puoi trovare un tag "video" e al suo interno c'è un tag "source" con il link al video in formato MP4.
Mattia!
Cita messaggio
#70
quindi ammesso che esiste una piattaforma (come quella che ti ho linkato) che ha il video incluso (e quindi facilmente estrapolabile) che tipo di script bisognerebbe incorporare nella mia pagina dove adesso metto solo il link diretto al video, affinchè possa mettere invece il link della pagina che contiene il video e dal quale ogni volta si estrapolerà il link del video aggiornato?
Cita messaggio
#71
Prima di tutto si deve recuperare il codice HTML della pagina:
Codice PHP:
$html file_get_contents('https://www.sito.com/video/123/'); 

Con la libreria DOM è possibile gestire il codice HTML. Ho scritto questo script senza testarlo, ma dovrebbe essere una buona base per cercare i video in una pagina HTML.
Codice PHP:
// Variabile in cui salvo il percorso del video
$src null;

// 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)) {
        
// Cerco tutti i tag "video"
        
$videos $dom->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;
            }
        }
    }
}

if (
$src) {
    echo 
'Il percorso del video è '.$src;
} else {
    echo 
'Il video non è stato trovato';

Mattia!
Cita messaggio
#72
ho provato il tuo script con questo link, ma purtroppo mi visualizza il messaggio "il video non è stato trovato". 
Sbirciando il codice html ho visto che sources contenente il link del video non è contenuto nel tag video.
QUindi forse il problema è la sintassi, cioè bisogna dire di cercare il tag sources  su tuta la pagina.

Che dici?

Attendo tuo riscontro

grazie
Chand
Cita messaggio
#73
Il problema è che nei video interni utilizza JavaScript per mostrare i video e non il tag "video" come in home page.
Mattia!
Cita messaggio
#74
e quindi, come si può modificare lo script?
Cita messaggio
#75
Si potrebbe utilizzare un'espressione regolare che cerca quella parte di codice, ma varrebbe solo per questo sito.
Mattia!
Cita messaggio
#76
considerando che è una delle piattaforme che mi interessano, direi di cominciare da questo allora Smile

Comunque pur inserendo nel tuo script il link della home page del sito che ti ho dato, mi visualizza "il video non è stato trovato", quindi c'è qualcosa che non va...

questo è il codice inserito:
Codice:
<?php
$html = file_get_contents('https://wstream.video');

// Variabile in cui salvo il percorso del video
$src = null;

// 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)) {
       // Cerco tutti i tag "video"
       $videos = $dom->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;
           }
       }
   }
}

if ($src) {
   echo 'Il percorso del video è '.$src;
} else {
   echo 'Il video non è stato trovato';
}
?>
Cita messaggio
#77
Se inserisci questo cosa stampa?
Codice PHP:
var_dump($html); 
Mattia!
Cita messaggio
#78
inserendo quel codice all'inizio (subito dopo file_get_contents) mi visualizza questo:
Citazione:bool(false) Il video non è stato trovato
Cita messaggio
#79
Significa che c'è qualche errore nel recupero del codice HTML del sito. Forse è disabilitato "allow_url_fopen" nelle impostazioni di PHP oppure fa qualche casino con l'HTTPS. Per essere sicuri di capire qual è il problema dovresti aggiungere all'inizio del file:
Codice PHP:
error_reporting(E_ALL);
ini_set('display_errors'1); 

Eventualmente si dovrà cercare di recuperare il codice HTML tramite cURL.
Mattia!
Cita messaggio
#80
questo è il risultato:
Citazione:Notice: Undefined variable: html in /membri/animeapp/prova_video.php on line 4
NULL
Warning: file_get_contents(https://wstream.video): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /membri/animeapp/prova_video.php on line 5
Il video non è stato trovato
Cita messaggio
#81
Come immaginavo si deve utilizzare cURL per recuperare il codice HTML da quel sito.

Forse ci vorranno altri parametri da passare a cURL, ma per ora prova a mettere questo codice al posto della riga dove c'è "file_get_contents".
Codice PHP:
$ch curl_init();
curl_setopt_array($ch, array(
    
CURLOPT_RETURNTRANSFER => 1,
    
CURLOPT_URL => 'https://wstream.video/'
));
$html curl__exec($ch); // Qui ho dovuto mettere due underscore, togline uno perché MyBB non me lo fa scrivere (penso per problemi di sicurezza)
curl_close($ch); 
Mattia!
Cita messaggio
#82
Fatto, e il risultato è questo:
Citazione:Notice: Undefined variable: html in /membri/animeapp/prova_video.php on line 4
NULL Il video non è stato trovato
Cita messaggio
#83
Alla riga 4 cosa c'è che continua a dare il Notice?

Per quanto riguarda il fatto che non continui a non scaricare il codice HTML, prova a modificare così il punto in cui si passano i parametri attraverso curl_setopt_array:
Codice PHP:
curl_setopt_array($ch, array(
    
CURLOPT_RETURNTRANSFER => 1,
    
CURLOPT_URL => 'https://wstream.video/',
    
CURLOPT_SSLVERSION => 3
)); 

Se continua a non funzionare, si può provare a vedere l'errore mettendo prima di curl_close il codice sottostante:
Codice PHP:
curl_error($ch); 
Mattia!
Cita messaggio
#84
Alla riga 4 c'è questo:
Codice:
var_dump($html);

Con il codice nuovo che mi hai dato continua a darmi questo messaggio senza ulteriori errori
Citazione:Notice: Undefined variable: html in /membri/animeapp/prova_video.php on line 4
NULL Il video non è stato trovato

il codice è così
Codice:
$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'https://wstream.video/',
    CURLOPT_SSLVERSION => 3
));
$html = curl__exec($ch); // anche io ho messo due underscore altrimenti nn potevo caricare questo codice
curl_error($ch);
curl_close($ch);

dovrebbe essere corretto no?
Cita messaggio
#85
Quello che c'è alla riga 4 dovrebbe andare dopo che viene creata la variabile $html.

Per stampare l'errore di cURL modifica così:
Codice PHP:
var_dump(curl_error($ch)); 
Mattia!
Cita messaggio
#86
mettendo la tua correzione subito dopo $html mi da questo errore:
Citazione:string(47) "Received HTTP code 403 from proxy after CONNECT" Il video non è stato trovato
Cita messaggio
#87
Sembrerebbe che il tuo hosting blocchi le connessioni verso l'esterno.
Mattia!
Cita messaggio
#88
hai ragione, appena provato da un altro hosting:
Citazione:string(64) "error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number" Il video non è stato trovato
Cita messaggio
#89
Prova a tornare a:
Codice PHP:
curl_setopt_array($ch, array(
    
CURLOPT_RETURNTRANSFER => 1,
    
CURLOPT_URL => 'https://wstream.video/'
)); 
Mattia!
Cita messaggio
#90
ecco il messaggio d'errore:
Citazione:string(0) ""
Warning: DOMDocument::loadHTML(): Tag section invalid in Entity, line: 37 in /home/jo1sy1qs/public_html/prova_video.php on line 25

Notice: Undefined variable: dom in /home/jo1sy1qs/public_html/prova_video.php on line 27

Fatal error: Call to a member function getElementsByTagName() on null in /home/jo1sy1qs/public_html/prova_video.php on line 27
Cita messaggio


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  convertire video stream in diretta facebook Chandler 7 13.716 07/06/2017 13:00
Ultimo messaggio: Mattia

Vai al forum:


Utenti che stanno guardando questa discussione: 2 Ospite(i)