Obtener string con retardo en curl

  • Autor Autor xaiborweb
  • Fecha de inicio Fecha de inicio
xaiborweb

xaiborweb

Programador
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola estoy intentando obtener un string de esta pagina

HTML:
http://hdfull.tv/show/game-of-thrones/season-1

pero el contenido lo carga con jquery así que el string de html que obtengo con este código es sin el contenido ejemplo, Entonces me preguntaba si conocen alguna propiedad para retrasar el string o algún metodo y así poder obtener el contenido, de antemano muchas gracias 😉

PHP:
<?php 
    $url='http://hdfull.tv/show/game-of-thrones/season-1';
    $ch = curl_init($url); //inciamos conexion curl
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER,array('Accept-Language: en')); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $html_enlace = curl_exec($ch); //Guardamos html
    curl_close($ch); //Cerramos conexion curl

    echo $html_enlace;
?>
 
Aunque te esperes, php no va a ejecutar jquery, son dos lenguajes diferentes. 😕
 
Aunque te esperes, php no va a ejecutar jquery, son dos lenguajes diferentes. 😕

gracias por responder y sabrás algún metodo ? o no es posible obtener el html por php a contenidos que llaman con jquery ?
 
Obtén todo de acá: http://hdfull.tv/a/episodes :fatigue: mucho más fácil.

vale pero mi pregunta mas hacia tantas paginas que hacen llamadas por jquery o javascript, si yo al intentar obtener su html con curl o file_get_contents, puedo de alguna manera interactuar desde php con el jquery o javascript a fin de poder ver ese html escondido que solo lo muestra al realizar la llamada con jquery o javascript
 
vale pero mi pregunta mas hacia tantas paginas que hacen llamadas por jquery o javascript, si yo al intentar obtener su html con curl o file_get_contents, puedo de alguna manera interactuar desde php con el jquery o javascript a fin de poder ver ese html escondido que solo lo muestra al realizar la llamada con jquery o javascript

No puedes, lo que puedes hacer, es obtener la url de donde se obtienen los datos, ya que tengas la url, obtienes los datos :fatigue:
 
vale pero mi pregunta mas hacia tantas paginas que hacen llamadas por jquery o javascript, si yo al intentar obtener su html con curl o file_get_contents, puedo de alguna manera interactuar desde php con el jquery o javascript a fin de poder ver ese html escondido que solo lo muestra al realizar la llamada con jquery o javascript

PHP:
http://hdfull.tv/a/episodes/?action=season&start=0&limit=0&show=13&season=1
esa es la url que lee el jquery para obtener los episodios (la cual de dio kanikase antes)... solo lee esa url con file_get_contents y con json_decode tienes todo...
 
No puedes, lo que puedes hacer, es obtener la url de donde se obtienen los datos, ya que tengas la url, obtienes los datos :fatigue:

y me puedes recomendar un método como encontrar esa url de donde se obtienes los datos del javascript o jquery?
aquí tengo otro ejemplo:
HTML:
http://www.cinecalidad.com/pelicula/jurassic-park-parque-jurasico-online-descarga/

que en la parte donde muestra los enlaces lo trae por medio de javascript, y mirando desde network en el inspeccionar elementos de google chrome no encuentro de donde obtiene los datos que muestra por medio de javascript.

cuando dices lo que puedes hacer, es obtener la url de donde se obtienen los datos cualquier llamada a jquery o javascript tiene alguna vista escondida de esos datos en alguna url ? o no siempre se cumple esta condición ?
 
y me puedes recomendar un método como encontrar esa url de donde se obtienes los datos del javascript o jquery?
aquí tengo otro ejemplo:
HTML:
http://www.cinecalidad.com/pelicula/jurassic-park-parque-jurasico-online-descarga/

que en la parte donde muestra los enlaces lo trae por medio de javascript, y mirando desde network en el inspeccionar elementos de google chrome no encuentro de donde obtiene los datos que muestra por medio de javascript.

cuando dices lo que puedes hacer, es obtener la url de donde se obtienen los datos cualquier llamada a jquery o javascript tiene alguna vista escondida de esos datos en alguna url ? o no siempre se cumple esta condición ?

ese sitio es un wp y no carga nada con jquery o eso... y la otra url la encontre con charles proxy... es un proxy que colocas en el navegador y ver todo lo que hacen los sitios webs, tmb podes editar y demas...
 
Última edición:
podrías compartir la otra url ? es que no entiendo el charles proxy xd
https://gyazo.com/baf3b6fe0cd72ecb6779d966cd2aaaf9 hay solo veo el mismo html

gracias y perdona las molestias

los links en ese sitio estan encriptados... primero tendrias que ver como encriptan los links...
HTML:
<script type="text/javascript">
    /*<![CDATA[*/
    function getCookie(c_name) {
        if (document.cookie.length > 0) {
            c_start = document.cookie.indexOf(c_name + "=");
            if (c_start != -1) {
                c_start = c_start + c_name.length + 1;
                c_end = document.cookie.indexOf(";", c_start);
                if (c_end == -1) {
                    c_end = document.cookie.length;
                }
                return unescape(document.cookie.substring(c_start, c_end));
            }
        }
        return 0;
    }

    function dec(str) {
        var d = "";
        str = str.split(" ");
        for (i = 0; i < str.length; i++) {
            d += String.fromCharCode(parseInt(str[i]) - 7);
        }
        return d;
    }

    function hr(a) {
        var service = $(a).attr("service");
        var h = $(a).attr("href");
        if (service == "OnlineUpToBox") {
            h = dec("111 123 123 119 122 65 54 54 124 119 123 118 105 118 127 53 106 118 116 54") + dec("120 61 127 112 115 63 110 127 104 111 128 119");
        } else if (service == "OnlineUsersCloud") {
            h = dec("111 123 123 119 65 54 54 124 122 108 121 122 106 115 118 124 107 53 106 118 116 54") + dec("122 111 111 58 58 122 119 108 113 111 104 109");
        } else if (service == "OnlineUsersFiles") {
            h = dec("111 123 123 119 65 54 54 124 122 108 121 122 109 112 115 108 122 53 106 118 116 54") + dec("");
        } else if (service == "OnlineOkRu") {
            h = dec("111 123 123 119 65 54 54 118 114 53 121 124 54 125 112 107 108 118 54") + dec("");
        } else if (service == "OnlineTheVideos") {
            h = dec("111 123 123 119 65 54 54 123 111 108 125 112 107 108 118 122 53 123 125 54") + dec("112 64 125 114 104 62 63 55 60 121 109 59") + dec("53 111 123 116 115");
        } else if (service == "OnlineVidBull") {
            h = dec("111 123 123 119 65 54 54 125 112 107 105 124 115 115 53 106 118 116 54") + dec("") + dec("53 111 123 116 115");
        } else if (service == "OnlineNowVideo") {
            h = dec("111 123 123 119 65 54 54 126 126 126 53 117 118 126 125 112 107 108 118 53 122 127 54 125 112 107 108 118 54") + dec("60 61 56 55 55 64 61 60 55 104 105 60 57")
        } else if (service == "UploadedTo") {
            h = dec("111 123 123 119 65 54 54 124 115 53 123 118 54") + dec("116 64 111 104 121 111 112 56");
        } else if (service == "TurboBit") {
            h = dec("111 123 123 119 65 54 54 123 124 121 105 118 105 112 123 53 117 108 123 54") + dec("55 123 123 112 60 115 63 55 57 64 128 129") + dec("53 111 123 116 115");
        } else if (service == "DepositFiles") {
            h = dec("111 123 123 119 122 65 54 54 107 108 119 118 122 112 123 109 112 115 108 122 53 106 118 116 54 109 112 115 108 122 54") + dec("116 57 108 117 64 108 115 58 118");
        } else if (service == "Mega") {
            h = dec("111 123 123 119 65 54 54 126 126 126 53 106 112 117 108 106 104 115 112 107 104 107 53 106 118 116 54 119 121 118 123 108 106 123 54 125 53 111 123 116 115 70 112 68") + dec("118 121 55 105");
        } else if (service == "Trailer") {
            h = dec("111 123 123 119 122 65 54 54 126 126 126 53 128 118 124 123 124 105 108 53 106 118 116 54 126 104 123 106 111 70 125 68") + dec("88 90 93 114 61 121 129 74 55 129 72");
        } else if ($(a).hasClass("pastebinlink")) {
            h = dec($(a).attr("enlco"));
        }
        if (getCookie("nolinkads35162"))
            var domains = [];
        else
            var domains = ["depositfiles.com", "mega.co.nz", "cinecalidad.com/pastebin", "www.cinecalidad.com/protect", "uptobox.com", "userscloud.com", "usersfiles.com", "ok.ru", "thevideos.tv"];
        for (i = 0; i < domains.length; i++) {
            if (h.indexOf(domains[i]) > 0 && h.indexOf("adf.ly") == -1 && $("div#ads").height() > 0) {
                h = dec("111 123 123 119 65 54 54 104 107 109 53 115 128 54 63 57 56 58 58 63 59 54") + h;
            }
        }
        if ($("div#ads").height() <= 0)
            document.cookie = "bloadon=1";
        else
            document.cookie = "bloadon=0;expires=Thu, 01 Jan 1970 00:00:00 UTC";
        return h;
    }

    function play(onlinelink) {
        var servidor = onlinelink.attr("href");
        $("#player object, #player iframe#tviframe").remove();
        $(".pane").hide();
        $("#ver_en_servidor a").attr("href", servidor).html("Abrir en " + onlinelink.find("li").html());
        servidor = servidor.replace("http://adf.ly/8213384/", "");
        if (onlinelink.attr("service") == "OnlineTheVideos") {
            $("#player").append('<iframe id="tviframe" src="" webkitAllowFullScreen="true" mozallowfullscreen="true" allowfullscreen="true" frameborder="0" scrolling="no"></iframe>');
            $("#player").show();
            $("#player iframe#tviframe").attr("src", dec("111 123 123 119 65 54 54 123 111 108 125 112 107 108 118 122 53 123 125 54 108 116 105 108 107 52") + dec("112 64 125 114 104 62 63 55 60 121 109 59") + "-" + $("#player iframe#tviframe").width() + "x" + $("#player iframe#tviframe").height() + dec("53 111 123 116 115"));
        } else if (onlinelink.attr("service") == "OnlineOkRu") {
            $("#player").append('<iframe id="tviframe" src="" webkitAllowFullScreen="true" mozallowfullscreen="true" allowfullscreen="true" frameborder="0" scrolling="no"></iframe>');
            $("#player").show();
            $("#player iframe#tviframe").attr("src", dec("111 123 123 119 65 54 54 118 114 53 121 124 54 125 112 107 108 118 108 116 105 108 107 54") + dec(""));
        } else if (onlinelink.attr("service") == "Trailer") {
            $("#player").append('<iframe id="tviframe" src="" webkitAllowFullScreen="true" mozallowfullscreen="true" allowfullscreen="true" frameborder="0" scrolling="no"></iframe>');
            $("#player").show();
            $("#player iframe#tviframe").attr("src", dec("54 54 126 126 126 53 128 118 124 123 124 105 108 53 106 118 116 54 108 116 105 108 107 54") + dec("88 90 93 114 61 121 129 74 55 129 72"));
            $("#ver_en_servidor a").html("");
        } else {
            var flashvars = "plugins=backstroke-1,timeslidertooltipplugin-3,http://www.cinecalidad.com/player/plugins/proxy.swf&proxy.nocachexml=true&autostart=true&proxy.link=" + servidor;
            var object = '<object id="flashplayer" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> \
  <param name="movie" value="http://www.cinecalidad.com/player/player.swf" /> \
  <param name="allowFullScreen" value="true" /> \
  <param name="allowScriptAccess" value="always" /> \
  <param name="FlashVars" value="' + flashvars + '" /> \
  <embed name="flashplayer" src="http://www.cinecalidad.com/player/player.swf?123" FlashVars="' + flashvars + '" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" /> \
  </object>';
            $("#player").append(object);
            $("#player").show();
        }
    } /*]]>*/
</script>
<script type="text/javascript">
    var adfly_id = 8213384;
    var adfly_advert = 'int';
    var popunder = false;
    if (getCookie("nolinkads35162"))
        var domains = [];
    else
        var domains = ["depositfiles.com", "mega.co.nz", "cinecalidad.com/pastebin", "www.cinecalidad.com/protect"];
</script>
 
Podrias usar php phantomjs, para que te muestre la página que resultante luego de hacer todas las llamadas script
hola gracias por la info la intente poder en practica pero estoy teniendo problemas.

instale phantomjs y cree un archivo js con esto para obtener un string de todo el code.
HTML:
var page = require("webpage").create();
var system = require("system");
page.open(system.args[1], function(status){
	console.log(page.content);
	phantom.exit();
});
y desde un archivo php le envió esto
PHP:
<?php
$url_title = 'http://fmovies.to/film/the-bfg.yzl0/90l078';
echo $html_title = shell_exec("phantomjs phantom.js $url_title");
pero en el resultado que me entrega no ejecuta el javascript jwplayer por que no me entrega el code que genera el jwplayer que seria este.
HTML:
<video class="jw-video jw-reset" x-webkit-airplay="allow" webkit-playsinline="" src="https://3.bp.blogspot.com/9serktWaVe5P5FlQuJ628qglPGfw6oH_QulP_cnPV0ozTIK8Gh8=m15"></video>
y me preguntaba si de casualidad sabrás por que? o me puedes dar una mano para solucionar esto, muchas gracias brother 😉
 
Quizá sea un poco rebuscado, pero puedes hacer esto:
PHP:
<?php 
    $url='http://hdfull.tv/show/game-of-thrones/season-1';
    $ch = curl_init($url); //inciamos conexion curl
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER,array('Accept-Language: en')); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $html_enlace = curl_exec($ch); //Guardamos html
    curl_close($ch); //Cerramos conexion curl
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,'http://hdfull.tv/a/episodes');
	curl_setopt($ch,CURLOPT_POST,1);
	curl_setopt($ch,CURLOPT_POSTFIELDS,'action=season&start=0&limit=0&show=13&season=1');
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

	$data = curl_exec($ch);
	
    $html_enlace = str_replace('<script type="text/javascript" src="http://hdfull.tv/templates/hdfull/js/bootstrap.js?r=1"></script>', '<script type="text/javascript" src="http://hdfull.tv/templates/hdfull/js/bootstrap.js?r=1"></script><script type="text/javascript">var data = '.$data.';var total = 0;$.each(data, function(index, episode) { try { $(\'<div></div>\').episodeitem({episode:episode,hideShow:true}).appendTo($(\'#season-episodes\'));} catch(e) {console.log(e);} total++;});if(!total) $(\'#season-episodes\').append($(\'<h2/>\').html(ci18n.show_empty));</script>', $html_enlace);
	echo $html_enlace;
?>

Ahora, si quieres adaptarlo para cualquier serie, sería cuestión de cambiar el valor:
Insertar CODE, HTML o PHP:
show=13
que está en la segunda petición curl. Puedes obtener el de cada serie en el código fuente.
 
Para este tipo de scrapping y la página fmovies.to. No te va ha servir usar phantomjs de esta forma.

El script que has creado es simple y efectivo. Sin embargo, no te funcionará debido a que phantomjs no soporta la ejecución del video, por lo tanto jwplayer jamás cargará la URL del video. [1]

Una alternativa es SlimerJS, el cual tiene soporte para video y audio. Te he creado un script de ejemplo (que trae la URL de Google Drive). [2] ¿Supongo que es lo que necesitas?. ¿O vas a hacer scrapping con más datos?

En consola
Insertar CODE, HTML o PHP:
slimerjs fmovies.js http://fmovies.to/film/the-bfg.yzl0/90l078

Insertar CODE, HTML o PHP:
// fmovies.js
var page = require('webpage').create();
var system = require('system');

var address = system.args[1];

page.onConsoleMessage = function (msg) {
  console.log(msg);
};

page.viewportSize = { width: 480, height: 800 };

page.open(address, function (status) {

  if (status !== 'success') {
    console.log('Unable to load the address!');
    slimer.exit();
    return;
  } else {
    console.log('Waiting for 5 seconds...');
    slimer.wait(500);

    var data = page.evaluate(function () {
      var video = document.getElementsByClassName('jw-video')[0];
      return video.getAttribute('src');
    });

    console.log(data);
    slimer.exit();
  }

});

[1] https://github.com/ariya/phantomjs/issues/10839
[2] https://gist.github.com/iamcholo/a00...9c67a28df40e7e
 
El script que has creado es simple y efectivo. Sin embargo, no te funcionará debido a que phantomjs no soporta la ejecución del video, por lo tanto jwplayer jamás cargará la URL del video. [1]
Una alternativa es SlimerJS, el cual tiene soporte para video y audio. Te he creado un script de ejemplo (que trae la URL de Google Drive). [2] ¿Supongo que es lo que necesitas?. ¿O vas a hacer scrapping con más datos?
muchas gracias por tu ayuda brother 😉
tengo las ultimas 2 preguntaras
1) como le podría enviar url por método post o javascript? por ejemplo:
HTML:
http://123movies.to/film/game-of-thrones-season-6-11494/watching.html
por defecto defecto abre el primer episodio pero si quiero abrir por ejemplo el episodio 10 lo hace por javascript así onclick="loadEpisode(8,411421)"
entonces seria posible enviarle por ejemplo la petición directa del episodio 10 a slimerjs?

2) paginas con barias re direcciones como esta
HTML:
http://kissanime.to/Anime/Naruto-Shippuuden/Episode-481?id=131534
me lanza el siguiente error:
Script Error: Error: video is undefined Stack: -> phantomjs://webpage.evaluate(): 3 -> phantomjs://webpage.evaluate(): 3 -> phantomjs://webpage.evaluate(): 1 null
 
1) En el ejemplo, sólo te trae la url de video (Google Drive) del primer episodio. Para obtener las URLs de todos los episodios debes hacer click en cada botón del episodio (programáticamente). En este caso, debes evaluar el resultado de la página, y traerte la lista de episodios.

Lo bueno es que se puede utilizar jQuery, por lo que tendrías que inyectar/agregarlo al script de slimerjs.
Usando jQuery obtén un array de enlaces. Luego, tendrás que usar sendEvent para que cargue la misma página (simular el click).

En un poco tedioso está parte (por los callbacks), si aún así tienes problemas deberás evaluar Selenium como alternativa (interactuar con la página, click por acá, llenar formulario/inputs, etc)


2) ¿Phantomjs? ¿Esa página usa meta-refresh? ¿Cookies?
Si no mal recuerdo, debes usar page.onResourceReceived y luego llamar a una función (la cual consiga la URL del video).
En mi caso, yo sólo incremento el tiempo en setTimeout, y espero q la página termine de cargar por completo. 😱
 
Atrás
Arriba