Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

RicardoCostaTW

Problema com parse html e substr_count

Recommended Posts

RicardoCostaTW

Olá Pessoal programador,

No âmbito de um trabalho acadêmico, estava a tentar obter a informação deste link:

http://www.pousadas.pt/historic-hotels-portugal/en/reservations/pages/availability-search.aspx?region=5&hotel=&check-in=12/13/2012&check-out=12/15/2012&adults=2&children=1&rooms=2

Após ter feito um pequeno parse, consegui todas as imagens, só que ao filtrar, estou a tentar compara o nome do hotel, com o nome da imagem, cujo a estrutura envolve sempre o nome do hotel. Para soluccionar isto pensei num substr_count onde comparava o nome com o url da imagem. O estranho é que quando o faço, o resultado é sempre 0. Será por ser html? Deixo o código aseguir para que toda a comunidade possa ver. Desde já agradeço. Coloquei a palavra "problema" na arte do código a que me refiro.

<?php
/*
Template Name: pousadas
*/
?>
<?php include('simple_html_dom.php'); ?>
<?php get_header(); ?>
<?php
function getOriginalLink($url) {
$pousadas = array
 (
 "nome" => array(),
 "contato" => array(),
 "imagem" => array(
	 "nImagens" => array()
 ),
 "preco" => array(),
 "descricao" => array(),
 "coordenadas" => array(),
 "link_Comprar" => array()
);
$rest = "";
$html = file_get_html($url);
foreach ($html->find('div.contactFaxWrapper') as $element) {
 //echo $element;
}

foreach ($html->find("h3.pousadaSubTitle") as $img) {
 //echo $img;
}
foreach ($html->find("div.price") as $price) {
 array_push($pousadas['preco'], $price);
 //echo $price;
}
foreach ($html->find("div.contactInfoWrapper") as $latitude) {
 array_push($pousadas['coordenadas'], $latitude);
 //echo $latitude;
}
foreach ($html->find("h2.pousadaTitle") as $nomePousada) {
 array_push($pousadas['nome'], $nomePousada);
 //echo $nomePousada;
}

//probelma
foreach ($html->find('div.hotelSliderImageContainer img') as $el) {
 for ($x = 0; $x < count($pousadas['nome']); $x++) {
	 $n = strpos($pousadas['nome'][$x], '>'); // posx primeira ocorrencia
	 $res = strtolower(substr($pousadas['nome'][$x], $n + 1, $n - 2));

	 if (substr_count($el->src, $res)>0) {

		 array_push($pousadas['imagem']['nImagens'], $el->src);
	 }
 }
 echo $pousadas['imagem']['nImagens'][0];
 // nImagens
}
foreach ($html->find("div.actividadesWrapper") as $descPousada) {
 array_push($pousadas['descricao'], $descPousada);
 //echo $descPousada;
}
foreach ($html->find("div.priceBlackBoxWrapper a")as $compra)
 array_push($pousadas['link_Comprar'], $compra->href);
return $pousadas;
}
$dados = getOriginalLink("http://www.pousadas.pt/historic-hotels-portugal/en/reservations/pages/availability-search.aspx?region=5&hotel=&check-in=12/12/2012&check-out=12/13/2012&adults=2&children=1&rooms=2", $pousadas);
for ($k = 0; $k < count($dados['nome']); $k++) {
echo "</br>Nome Pousada: " . $dados['nome'][$k] . "</br>";
echo "Descrição Pousada: " . $dados['descricao'][$k] . "</br>";
echo "Preço: " . ($dados['preco'][$k]);
echo "Reserve <a href='" . $dados['link_Comprar'][$k] . "'a>" . "aqui</a></br>";
echo "-->" . $dados['imagem'][$k]['nImagens'][0];
}
?>

Edited by yoda

Share this post


Link to post
Share on other sites
yoda

Se devolve sempre 0, é porque as strings não são idênticas de alguma forma. Imprime as strings como vêm do html (a string e o comprimento dela). É possível também que o encoding das duas strings seja diferente, nesse caso sugiro converter tudo para utf-8 usando o utf8_encode() / decode(), mb_convert_encoding() ou iconv(), dependendo do tipo de OS que usas e dos locales disponíveis.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.