[Rio-pm] HTML::Parse

Alexei Znamensky russoz em gmail.com
Sábado Outubro 27 05:38:02 PDT 2012


Aureliano,

Eu vi algo no seu código que não é um erro, e há controvérsias sobre ser
boa ou má prática, varia um pouco com gosto do freguês, mas que eu
pessoalmente gosto de fazer diferente. Acho que é um estilo melhor.

Ao invés de fazer (principalmente em loops), algo como:

for(...)
  if( deu certo )
    faz um lance
  else #deu errado
    mostra ou trata erro
  endif
endfor


Eu geralmente prefiro fazer assim


for(...)
  if( deu errado )
    mostra ou trata erro
    next    # ou die, depdende de como voce quer lidar com o erro
  elseif( deu outro lance errado )
    mostra ou trata
    next
  ... # tantas quantas validações forem necessárias
  endif
  # parâmetros desta iteração estão validados

  faz um lance
endfor


Acho que dessa forma, você simplifica a leitura do código: 1) o que for
erro você trata logo, e depois que passa daquele bloco de validações está
ok e 2) visualmente faz até mais sentido: o código mais indentado no começo
é a exceção, enquanto que a "regra" está apenas um nível de indentação
depois do comando de loop.

my $two_cents;

Russo

2012/10/25 Aureliano Guedes <guedes_1000 em hotmail.com>

>  Eu fiz de uma forma que deu certo, mas ficou feio e cheio de más
> praticas, mandando reguex em xml e tals.
>
> Quero fazer de forma bonita com XPath e tals. Mas ainda estou em processo
> de entendet tudo isso.
>
> Estou tentando pegar o primeiro link da lista de videos de um resultado de
> pesquisa do YouTube.
> Para isso estou ultilizando uma API do YouTube:
> https://developers.google.com/youtube/2.0/developers_guide_protocol_api_query_parameters#Searching_for_Videos
>
> Onde estão os erros fora tudo?? -> http://pastebin.com/T06Mi1Nx
>
>
> #!/usr/bin/env perl
>
> use common::sense;
> use WWW::Mechanize;
> use URI::Escape;
> use HTML::TreeBuilder::XPath;
>
> my $html = WWW::Mechanize->new(timeout=>100);
>
> open IN, $ARGV[0] or die $!;
>
> foreach (<IN>){
>     s/\s+/\+/g;
>     chomp;
>     my $url = 'https://gdata.youtube.com/feeds/api/videos?q=' .
> uri_escape($_);
>     $html->get($url);
>     if ($html->is_success){
>         my $page = $html->content;
>         $page =~ s/(\n\r|\r\n)|\r/\n/g;
>
>         my $tree = HTML::TreeBuilder::XPath->new();
>
>         my $node = $tree->findenodes('/html/body//a[@href=(.*)]')->[0];
>
>         print $node;
>     }
>     else {
>         print "FAIL: " . $! . "\n";
>     }
> }
>
>
>
> > Date: Thu, 25 Oct 2012 13:06:40 -0200
> > From: breno em rio.pm.org
>
> > To: rio-pm em pm.org
> > Subject: Re: [Rio-pm] HTML::Parse
> >
> > 2012/10/21 Aureliano Guedes <guedes_1000 em hotmail.com>
> > >
> > > Ola.
> > >
> > > Eu estoiu tentando usar o WWW::Mechanize, mas não estou entendendo uma
> coisa.
> > > Eu tenho um botão:
> > >
> > > <a
> href="/dl/347357664b655256724e/554545485125135/Fernando+E+Sorocaba+++++Tenso.mp3"
> rel="nofollow" title="Download Fernando E Sorocaba Tenso.mp3!">
> > > <img src="/images/download.jpg" width="95" height="25" alt="Baixar
> Fernando E Sorocaba Tenso" style="border:0" /></a>
> > >
> > >
> > > Como eu faço para clicar nele usando o metodo click_button? Como faço
> para setar esse botão?
> > > Eu tentei:
> > >
> $m->click_button(value=>/dl/347357664b655256724e/554545485125135/Fernando+E+Sorocaba+++++Tenso.mp3);
> > > Mas não da certo.
> > >
> >
> > O seu botão não é um botão (<button> ou <input type="button">) e sim
> > um link (<a>). O Mechanize sabiamente os diferencia, e você
> > provavelmente está procurando o método follow_link()
> >
> > https://metacpan.org/module/WWW::Mechanize#mech-follow_link-...-
> >
> > Finalmente, se quiser aprender sobre XPath e Seletores CSS, recomendo
> > os seguintes artigos:
> >
> > http://sao-paulo.pm.org/artigo/2010/utilizandoxpathparacriarwebspiders
> >
> http://sao-paulo.pm.org/artigo/2011/ExtracaodedadoscomperlxpatheregexExportadoemODF
> >
> http://sao-paulo.pm.org/artigo/2011/ScrapingfacilcomMojoliciousefeedsAtom
> > (veja no final: guia de referência rápida para seletores CSS)
> >
> > ou ir direto na fonte:
> >
> > http://www.w3.org/TR/xpath/
> > http://www.w3.org/TR/CSS2/selector.html
> > http://www.w3.org/TR/css3-selectors/
> >
> > []s
> >
> > -b
> > _______________________________________________
> > Rio-pm mailing list
> > Rio-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Alexei "RUSSOZ" Znamensky | russoz EM gmail com | http://russoz.org
GPG fingerprint = 42AB E78C B83A AE31 7D27  1CF3 C66F B5C7 71CA 9F3C
http://www.flickr.com/photos/alexeiz | http://github.com/russoz
"I don't know... fly casual!" -- Han Solo
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20121027/83890508/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm