Ir para o conteúdo
  • 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

Mensagens Recomendadas

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];
}
?>

Editado por yoda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.