Clicky

Jump to content


Icon-note-left Icon-note-right Tal vez te interese... El foro "Novedades e información"
Photo

Ayuda con get_string_between !!


  • Accede para responder
9 respuestas a este tema

#1 WhistlerPHP

WhistlerPHP

    Kevincito :3

  • Iterbio
  • 591 mensajes
  • LocalizaciónPeñalolen, Santiago de Chile

Publicado 05 mayo 2012 - 06:13

Uso un script en PHP el cual recoge links de sitios de descarga y los reproduce en JWPlayer...
hice este codigo para un host de files ruso llamado "Karelia"

<?php
if(!empty($_GET["ka"]))
{
$html = file_get_contents('http://file.karelia.ru/'.$_GET['ka'].'/');
$link = get_string_between($html, '<li><a  href="', '"<span class="filename');
};
?>


el problema que tengo está en esta linea:
$link = get_string_between($html, '<li><a  href="', '"<span class="filename');


alguien me podria decir como obtener el link directo de descarga con PHP ?
aqui les dejo un link de prueba http://file.karelia.ru/vwqkw5/
ojala puedan ayudarme :c
  • 0

#2 Altffenser

Altffenser

    Élite

  • Granate
  • 1407 mensajes
  • LocalizaciónVictoria de Durango, México

Publicado 05 mayo 2012 - 07:00

que hace un <li> ahí ?
  • 0

#3 WhistlerPHP

WhistlerPHP

    Kevincito :3

  • Iterbio
  • 591 mensajes
  • LocalizaciónPeñalolen, Santiago de Chile

Publicado 05 mayo 2012 - 07:16

que hace un <li> ahí ?

te explicaré, la funcion get_string_between toma un elemento entre los elementos html especificos que tu le des...
  • 0

#4 Altffenser

Altffenser

    Élite

  • Granate
  • 1407 mensajes
  • LocalizaciónVictoria de Durango, México

Publicado 05 mayo 2012 - 07:19

te explicaré, la funcion get_string_between toma un elemento entre los elementos html especificos que tu le des...


quitalo! ni siquiera está cerrado y no hace falta.
  • 0

#5 areslepra

areslepra

    Advanced Member

  • Newbie
  • 192 mensajes

Publicado 05 mayo 2012 - 15:15

En estos casos tenes 2 opciones, Expresiones regulares o una clase de parseo HTML. La clase de parseo HTML por excelencia es QueryPath (http://querypath.org/), pero para este caso es demaciado asi que recomiendo expresiones regulares.
preg_match_all("/href=\"(.*?)\"/is", $html, $links);
Nos pone en links un arreglo de todos los enlaces de la web. Mejorando un poco.
function get_links($html) {
    preg_match_all("/href=\"(.*?)\"/is", $html, $links);
    return isset($links[1]) ? $links[1] : array();
}
Un poco más fino seria:
function get_links($html) {
    preg_match_all("/href=\"(.*?)\"/is", $html, $links);
    return isset($links[1]) ? $links[1] : array();
}

function is_http($link) {
    return preg_match('/^http(s)?:\/\/(.*)$/', $link, $rst) > 0;
}

var_dump(array_filter(get_links($html), 'is_http'));
Otra aproximación:
function not_end_slash($link) {
    return substr($link, -1) != '/';
}

var_dump(array_filter(array_filter(get_links($html), 'is_http'), 'not_end_slash'));
Ahora nos deshacemos de los que no tienen de dominio "file.karelia.ru":
function get_links($html) {
    preg_match_all("/href=\"(.*?)\"/is", $html, $links);
    return isset($links[1]) ? $links[1] : array();
}

function is_http($link) {
    return preg_match('/^http(s)?:\/\/(.*)file\.karelia\.ru(.*)$/', $link, $rst) > 0;
}

var_dump(array_filter(get_links($html), 'is_http'));

  • 2

#6 areslepra

areslepra

    Advanced Member

  • Newbie
  • 192 mensajes

Publicado 05 mayo 2012 - 15:19

Me quedo una ultima cosa, la versión final es:
function get_links($html) {
    preg_match_all("/href=\"(.*?)\"/is", $html, $links);
    return isset($links[1]) ? $links[1] : array();
}

function is_http($link) {
    $rst = not_static($link);
    if($rst)
	    return preg_match('/^http(s)?:\/\/(.*)(file\.karelia\.ru)(.*)$/', $link, $rst) > 0;
    else
	    return false;
}

function not_static($link) {
    return substr($link, 0, 33) != "http://profile.karelia.ru/static/";
}

var_dump(array_shift(array_filter(get_links($html), 'is_http')));
Se puede optimizar un poco, pero es una buena aproximación.
  • 2

#7 Altffenser

Altffenser

    Élite

  • Granate
  • 1407 mensajes
  • LocalizaciónVictoria de Durango, México

Publicado 05 mayo 2012 - 16:19

Ya ves... como no hacia falta <_<
  • 0

#8 WhistlerPHP

WhistlerPHP

    Kevincito :3

  • Iterbio
  • 591 mensajes
  • LocalizaciónPeñalolen, Santiago de Chile

Publicado 05 mayo 2012 - 16:28

Ya ves... como no hacia falta <_<

xDDD

Gracias areslepra pero solo quiero que me tome el link de la extension .mp4 que se encuentra aqui mira
<a href="http://st03.file.karelia.ru/vwqkw5/513023a57f422be99f0d277c87cda1aa/cb74a75c805b3572a6b7ca2f9bb5a1ee/Carlitos%20Ramirez%20y%20su%20Grupo%20Centeno%20-%20Remordimientos.mp4">
o sea solo desde <a href=" hasta "> me entiendes?
  • 0

#9 areslepra

areslepra

    Advanced Member

  • Newbie
  • 192 mensajes

Publicado 05 mayo 2012 - 16:52

xDDD

Gracias areslepra pero solo quiero que me tome el link de la extension .mp4 que se encuentra aqui mira

<a href="http://st03.file.karelia.ru/vwqkw5/513023a57f422be99f0d277c87cda1aa/cb74a75c805b3572a6b7ca2f9bb5a1ee/Carlitos%20Ramirez%20y%20su%20Grupo%20Centeno%20-%20Remordimientos.mp4">
o sea solo desde <a href=" hasta "> me entiendes?

Con la URL de ejemplo que diste el ultimo codigo que puse hace eso:
function get_links($html) {
    preg_match_all("/href=\"(.*?)\"/is", $html, $links);
    return isset($links[1]) ? $links[1] : array();
}
function is_http($link) {
    $rst = not_static($link);
    if($rst)
		    return preg_match('/^http(s)?:\/\/(.*)(file\.karelia\.ru)(.*)$/', $link, $rst) > 0;
    else
		    return false;
}
function not_static($link) {
    return substr($link, 0, 33) != "http://profile.karelia.ru/static/";
}
$link = array_shift(array_filter(get_links($html), 'is_http'));

  • 3

#10 WhistlerPHP

WhistlerPHP

    Kevincito :3

  • Iterbio
  • 591 mensajes
  • LocalizaciónPeñalolen, Santiago de Chile

Publicado 05 mayo 2012 - 17:01

Muchas gracias areslepra +3, no se mucho de PHP es mas no se nada recien estoy comenzando a aprender, gracias por la ayuda (:
  • 0