Jump to content


Photo

Preg_match_all - Não Consigo Pegar O Link


  • Faça o login para participar
3 replies to this topic

#1 Pee.VidaLoka

Pee.VidaLoka

    12 Horas

  • Usuários
  • 129 posts
  • Sexo:Não informado

Posted 24/07/2009, 14:51

Olá galera, estou precisando de uma ajudinha.

Com o file_get_contents eu abro um link externo e preciso pegar um dado nesta página
$html=file_get_contents("http://www.site.com.br");

Aparecem três links dentro de onClick como listado abaixo

onClick="window.open('http://www.1doslinks.com.br', 'overad')"

Preciso com o preg_match_all listar esses links que estão dentro dos onClick.

Aguardo ajuda se possível.

Abraços

#2 celsoendo

celsoendo

    Novato no fórum

  • Usuários
  • 19 posts
  • Sexo:Não informado

Posted 24/07/2009, 21:06

Ex:

<?php
$str = <<<HTML
<html>
<head>
<title>Teste</title>
</head>
<body>
Conteúdo da página!
<br />
<input type="button" onClick="window.open('http://www.1doslinks.com.br', 'overad')" /><br /><br />
<input type="button" onClick="window.open('http://www.google.com.br', 'overad')" /><br /><br />
<input type="button" onClick="window.open('http://forum.wmonline.com.br/index.php?showtopic=223025', 'overad')" /><br /><br />
</body>
</html>
HTML;

$total = preg_match_all("/.*window\.open\('([^']+)',.*/", $str, $resultados);

printf("Total de resultados = %d", $total);
print "<pre>";
print_r($resultados);
?>

Se a página for extremamente grande com muitos links e muito código, provavelmente seu script irá dar timeout. Nesse caso você teria que criar uma função para parsear o html e extrair as urls de outra forma (strpos) mais rápida e que não prejudique tanto o processamento.

#3 Pee.VidaLoka

Pee.VidaLoka

    12 Horas

  • Usuários
  • 129 posts
  • Sexo:Não informado

Posted 24/07/2009, 22:14

Amigo ficou legal mas eu preciso que apareça apenas o link, e a pagina nao tem muitos nao, sao apenas tres.
Lembrando tambem que a pagina vem de fora aberta por
$html=file_get_contents("http://www.site.com.br");
Preciso que esse codigo ache os tres e exiba soh um aleatorio pra mim.

Aguardo ajuda e obrigado

Ateh o momento exibe assim:

=> Array
(
[0] =>


[1] =>


[2] =>


)

[1] => Array
(
[0] => http://www.1doslinks.com.br
[1] => http://www.google.com.br
[2] => http://forum.wmonlin...howtopic=223025
)

)]

Ex:

<?php
$str = <<<HTML
<html>
<head>
<title>Teste</title>
</head>
<body>
Conteúdo da página!
<br />
<input type="button" onClick="window.open('http://www.1doslinks.com.br', 'overad')" /><br /><br />
<input type="button" onClick="window.open('http://www.google.com.br', 'overad')" /><br /><br />
<input type="button" onClick="window.open('http://forum.wmonline.com.br/index.php?showtopic=223025', 'overad')" /><br /><br />
</body>
</html>
HTML;

$total = preg_match_all("/.*window\.open\('([^']+)',.*/", $str, $resultados);

printf("Total de resultados = %d", $total);
print "<pre>";
print_r($resultados);
?>

Se a página for extremamente grande com muitos links e muito código, provavelmente seu script irá dar timeout. Nesse caso você teria que criar uma função para parsear o html e extrair as urls de outra forma (strpos) mais rápida e que não prejudique tanto o processamento.


Edição feita por: Pee.VidaLoka, 24/07/2009, 22:15.


#4 Ferlouko x)

Ferlouko x)

    Normal

  • Usuários
  • 72 posts
  • Sexo:Masculino
  • Localidade:Guararapes
  • Interesses:PHP, OOP, DESIGN PATTERNS, mySQL, XML, (X)HTML, CSS, TABLELESS, PHP-GTK, JAVA, C++.

Posted 25/07/2009, 14:44

@Pee.Paulo Freitas Já está pronto.

=> Array
(
[0] =>


[1] =>


[2] =>


)

[1] => Array
(
[0] => http://www.1doslinks.com.br
[1] => http://www.google.com.br
[2] => http://forum.wmonlin...howtopic=223025
)

)]

Bastar usar a array com o valores, no caso key = '1' , e usar o array_rand() sobre ela
Ex :
$key = array_rand($resultados[1]);
echo $resultados[1][$key];

[]'s
<?php
/**
* @author. . .Fernando Rodrigo Cardoso < ferlouko (at) gmail.com >
* @desc. . . .Desenv. PHP, (X)HTML, CSS, JS E AJAX, aprendiz JAVA, aprendiz C/C++ (...)
*/
?>




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq