[Pregunta] Descargar video de facebook usando php

Iniciado por Flamer, 15 Febrero 2020, 03:15 AM

0 Miembros y 1 Visitante están viendo este tema.

Flamer

hola mi duda es como leer el codigo html de una pagina de facebook para descargar un video....tengo este codigo

Código (php) [Seleccionar]

<html>
<head><title>descargar video</title>
</head>
<body>
<?php 
$url
="https://www.facebook.com/CuddleClones/videos/473689233322969/";
$code file_get_contents($url);

//$tap = strpos($code,"twitter:player");
$file fopen("archivo.txt""w");
fwrite($file,$code);
fclose($file);

echo 
"listo  ";

?>

</body>
</html>


pero no lee el código que yo espero....creo que facebook se protege de esto no se

saludos

Mod: Temas sobre PHP van al subforo de PHP.

apuromafo CLS

ese codigo ejecuta codigo en html y php bajando información de la pagina, no hay interacción del componente cdn o cache que usa facebook

sugerencias mas viables, buscar un gestor de descargas online, hay muchos, bajarlo el link como hd o sd, o bien usar tools como idm, o bien usar gestores de descarga en un lenguaje de programación como python, por cierto facebook usa sdk, asi que hay que respetar el protocolo,no es llegar y bajar de la pagina

un ejemplo seria
https://pythontips.com/2018/04/23/reverse-engineering-facebook-video/#more-1576
https://github.com/LarbiBekka34/fb-video-dl/blob/master/README.md
entre otros

asi que si logras ver de la pagina que bajas, luego debes extraer todos los links de la pagina que contengan ejemplo mp4

Saludos Apuromafo


Flamer

hice un tutorial de como hacerlo en powershell y en vbscript.....ahora quiero hacerlo en php

pero al querer leer el código html de la pagina de facebook donde se encuentra el vídeo no lee lo que yo espero


aqui te dejo el link para que mires como lo hago

https://elblogdeflamer.blogspot.com/2019/12/descargar-video-de-facebook-usando.html



EdePC

- Ufff, vaya que ha costado, he estado probando funcionalidad de cURL en PHP ya que yo siempre lo utilicé en .exe independiente XD.

- De momento me funciona lo siguiente:

Código (php-brief) [Seleccionar]
<?php 

  $url 
"https://www.facebook.com/CuddleClones/videos/473689233322969";
  
$ch curl_init($url);
  
$ua "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0";

  
curl_setopt($chCURLOPT_HEADERfalse);
  
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  
curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
  
curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
  
curl_setopt($chCURLOPT_USERAGENT$ua);

  
$html curl_exec($ch);
  
curl_close($ch);

  
preg_match('#content="(https://video.*?)"#'$html$matches);
  echo 
"URL del vídeo a descargar: $matches[1]";

  
// Descargar video
  
$url $matches[1];
  
$video fopen("video.mp4""w");
  
$ch curl_init();
  
curl_setopt($chCURLOPT_URLhtml_entity_decode($url));
  
curl_setopt($chCURLOPT_FILE$video);
  
curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
  
curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
  
$data curl_exec($ch);
  
curl_close ($ch);
  
fclose($video);

?>


- Tuve que agregarle un UserAgent para Facebook no me rechace diciendo que mi navegador no es compatible. Luego también un html_entity_decode para que no malinterprete la url (esto no lo capto bien x_x)

Referencias: https://stackoverflow.com/questions/52016753/save-image-from-url-with-curl-and-file-put-contents-php

@XSStringManolo

Cita de: EdePC en 23 Febrero 2020, 22:14 PM
- Ufff, vaya que ha costado, he estado probando funcionalidad de cURL en PHP ya que yo siempre lo utilicé en .exe independiente XD.

- De momento me funciona lo siguiente:

Código (php-brief) [Seleccionar]
<?php 

  $url 
"https://www.facebook.com/CuddleClones/videos/473689233322969";
  
$ch curl_init($url);
  
$ua "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0";

  
curl_setopt($chCURLOPT_HEADERfalse);
  
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  
curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
  
curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
  
curl_setopt($chCURLOPT_USERAGENT$ua);

  
$html curl_exec($ch);
  
curl_close($ch);

  
preg_match('#content="(https://video.*?)"#'$html$matches);
  echo 
"URL del vídeo a descargar: $matches[1]";

  
// Descargar video
  
$url $matches[1];
  
$video fopen("video.mp4""w");
  
$ch curl_init();
  
curl_setopt($chCURLOPT_URLhtml_entity_decode($url));
  
curl_setopt($chCURLOPT_FILE$video);
  
curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
  
curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
  
$data curl_exec($ch);
  
curl_close ($ch);
  
fclose($video);

?>


- Tuve que agregarle un UserAgent para Facebook no me rechace diciendo que mi navegador no es compatible. Luego también un html_entity_decode para que no malinterprete la url (esto no lo capto bien x_x)

Referencias: https://stackoverflow.com/questions/52016753/save-image-from-url-with-curl-and-file-put-contents-php
Para realizar este tipo de proyectos de forma consistente se utilizan emuladores de javascript.
Mink, BrowserExtuWebScraperToolkit, Symfony Panther ...

Las entidades no tienen nada que ver con la url. En todo caso necesitarás URI encode o URI decode.
Las entidades son combinaciones de símbolos que remplazan caracteres para que no sean interpretados. Por ejemplo &lt; remplaza < entonces si yo quiero hacer una inyección en tu sitio web, en vez de <svg onload="alert()"> cambias el input a &lt;svg onload="alert()"> por lo que no se interpreta el código y puedes ver el texto. En mi blog tengo varios programas que usan entidades de distinta formas. Para evitar inyecciones en un validador de contraseñas, para mostrar código fuente sin que se interprete, o para un generador de entidades.
Generador online de entidades


También te dejo un ejemplo de una url codificada por si no queda claro. No tiene que ver con entidades. google.com/search?q=%3C%73%76%67%20%6F%6E%6C%6F%61%64%3D%63%6F%6E%66%69%72%6D%28%29%3E
Si la pones en la barra de direcciones del navegador, google te la decodifica.

NiacBela

jajajaja. Me acaban de regañar por algo que voy a volver a hacer...
¿Porque no dan las respuestas directas si son tan genios? jajajajaja.
Hey amigo soy LebaNiac y aqui esta tu respuesta. Utilice el script de un buen amigo que respondio pero le faltaban unos ajustes en el codigo. aqui te lo comparto funcionando al 100%. Este codigo genera una vista previa del video con opciones de descarga.

Código (php) [Seleccionar]

class Get_video {

    private $urlFacebook;
    public $urlVideo;

    public function Download($url) {
        $this->urlFacebook = $url;
        $ch = curl_init($url);
        $ua = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0";
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_USERAGENT, $ua);

        $html = curl_exec($ch);
        curl_close($ch);

        preg_match('#content="(https://video.*?)"#', $html, $matches);
        $this->urlVideo = $matches[1];
        return $this->urlVideo;
    }

}
$nDown = new Get_video();
$nDown->Download('https://www.facebook.com/CuddleClones/videos/473689233322969');


Este código retorna una variable publica con una URL que contiene el archivo MP4 que puedes colocar en un archivo HTML en la etiqueta
Código (html4strict) [Seleccionar]
<embed> que genera una vista previa del vídeo con opciones de descarga.

Si quieres mas información del código funcionando, contactarme ya que la etiqueta EMBED es bloqueada en este foto.

GOOD LUCK... @LebaNiac... ;-) ;-) ;-) ;-)
GOOD LUCK... @NiacBela

NiacBela

haber si ahora si me deja poner todo el codigo jajajaja
Código (php) [Seleccionar]

<?php

class Get_video {

    private 
$urlFacebook;
    public 
$urlVideo;

    public function 
Download($url) {
        
$this->urlFacebook $url;
        
$ch curl_init($url);
        
$ua "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0";
        
curl_setopt($chCURLOPT_HEADERfalse);
        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($chCURLOPT_SSL_VERIFYHOST0);
        
curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
        
curl_setopt($chCURLOPT_USERAGENT$ua);

        
$html curl_exec($ch);
        
curl_close($ch);

        
preg_match('#content="(https://video.*?)"#'$html$matches);
        
$this->urlVideo $matches[1];
        return 
$this->urlVideo;
    }

}

$nDown = new Get_video();
$nDown->Download('https://www.facebook.com/CheerfulLaughEveryDay/videos/506720326775969/?t=2');
echo 
"<embe src=" $nDown->urlVideo " type='video/mp4' height='320'>";
?>



Siahora si me dejo ajajaja, cambia <embe> a <embed> y listo estaria funcionando...

GOOD LUCK... @LebaNiac. ;-) ;-) ;-) ;-) ;-)
GOOD LUCK... @NiacBela