JavaFree.org | RubyOnBr.org

Lendo URL's com Ruby ou Rails

Acompanhar Lendo URL's com Ruby ou Rails 8 posts, 4 participantes

Avatar Aguinelo Ped... 18 posts

Então pessoal, preciso fazer um indexador e preciso saber como fazer isso com Rails, na verdade o indexador pode ser em Ruby e a interface de pesquisa com Rails, minha dificuldade é saber como posso fazer o Rails ler determinada URL, consegui fazer em PHP abrindo a URL com fopen e lendo linha a linha com feof, porém não tenho idéia de como fazer com Rails, alguém me ajuda?

Valew Galera

 
Avatar Rui 18 posts

É simples amigo :)
Exemplo de código abaixo, feito no jruby:

irb(main):001:0> require ‘open-uri’
=> true
irb(main):002:0> x = open(‘http://www.google.com.br’)
=> #<StringIO:0×1a93f38 @meta={"content-type"=>"text/html; charset=ISO-8859-1", “date”=>"Wed, 01 Aug 2007 00:39:39 GMT", “server”=>"GWS/2.1", “set-cookie”=>"PREF=ID=761ffd26c3c9b5a0:TM=1185928779:LM=1185928779:S=J3LDGvGiN0YDvbp0; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com.br", “cache-control”=>"private", “transfer-encoding”=>"chunked"}, @base_uri=#<URI::HTTP:0×8c URL:http://www.google.com.br>, @status=[“200”, “OK”]>
irb(main):003:0> x.read
=> “”content-type\" content=\“text/html; charset=ISO-8859-1\”>Google\n<script>\n<!--\nwindow.google={kEI:\"S9avRuXGC52meMXzwNkD\",kEXPI:\"17259\",kHL:\"pt-BR\"};function sf(){document.f.q.focus();}\n// -->\n</script>\n<body bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 onload=\“sf();if(document.images){new Image().src=‘/images/nav_logo3.png’}\” topmargin=3 marginheight=3><div align=right id=guser style=\“font-size:84%;padding:0 0 4px\” width=100%>Tudo sobre o GoogleGoogle.com in English

©2007 Google

"
irb(main):004:0>

 
Avatar Rui 18 posts

Perdão, o código abaixo:


irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> x = open('http://www.google.com.br')

=> #<StringIO:0x1a93f38 @meta={"content-type"=>"text/html; charset=ISO-8859-1", "date"=>"Wed, 01 Aug 2007 00:39:39 GMT", "server"=>"GWS/2.1", "set-cookie"=>"PREF=ID=761ffd26c3c9b5a0:TM=1185928779:LM=1185928779:S=J3LDGvGiN0YDvbp0; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com.br", "cache-control"=>"private", "transfer-encoding"=>"chunked"}, @base_uri=#<URI::HTTP:0x8c URL:http://www.google.com.br>, @status=["200", "OK"]>
irb(main):003:0> x.read

=> "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\"><title>Google</title><style><!--\nbody,td,a,p,.h{font-family:arial,sans-serif}\n.h{font-size:20px}\n.h{color:#3366cc}\n.q{color:#00c}\n.ts td{padding:0}.ts{border-collapse:collapse}--></style>\n<script>\n<!--\nwindow.google={kEI:\"S9avRuXGC52meMXzwNkD\",kEXPI:\"17259\",kHL:\"pt-BR\"};function sf(){document.f.q.focus();}\n// -->\n</script>\n</head><body bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 onload=\"sf();if(document.images){new Image().src='/images/nav_logo3.png'}\" topmargin=3 marginheight=3><div align=right id=guser style=\"font-size:84%;padding:0 0 4px\" width=100%><nobr><a href=\"/url?sa=p&pref=ig&pval=3&q=http://www.google.com.br/ig%3Fhl%3Dpt-BR&usg=AFQjCNHC9sjtTsnNV2oJcI0mkhvkNs0Exw\">iGoogle</a> | <a href=\"https://www.google.com/accounts/Login?continue=http://www.google.com.br/&hl=pt-BR\">Efetuar login</a></nobr></div><center><br id=lgpd><img alt=\"Google\" height=110 src=\"/intl/pt-BR_br/images/logo.gif\" width=276><br><br><form action=\"/search\" name=f><style>#lgpd{display:none}</style><script defer><!--\n//-->\n</script><table border=0 cellspacing=0 cellpadding=4><tr><td nowrap><font size=-1><b>Web</b>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href=\"http://images.google.com.br/imghp?ie=ISO-8859-1&oe=ISO-8859-1&hl=pt-BR&tab=wi\">Imagens</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href=\"http://groups.google.com.br/grphp?ie=ISO-8859-1&oe=ISO-8859-1&hl=pt-BR&tab=wg\">Grupos</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href=\"http://news.google.com.br/nwshp?ie=ISO-8859-1&oe=ISO-8859-1&hl=pt-BR&tab=wn\">Not\355cias</a>&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"/intl/pt-BR/options/\" class=q>mais&nbsp;&raquo;</a></b></font></td></tr></table><table cellpadding=0 cellspacing=0><tr valign=top><td width=25%>&nbsp;</td><td align=center nowrap><input name=hl type=hidden value=pt-BR><input type=hidden name=ie value=\"ISO-8859-1\"><input maxlength=2048 name=q size=55 title=\"Pesquisa Google\" value=\"\"><br><input name=btnG type=submit value=\"Pesquisa Google\"><input name=btnI type=submit value=\"Estou com sorte\"></td><td nowrap width=25%><font size=-2>&nbsp;&nbsp;<a href=/advanced_search?hl=pt-BR>Pesquisa avan\347ada</a><br>&nbsp;&nbsp;<a href=/preferences?hl=pt-BR>Prefer\352ncias</a><br>&nbsp;&nbsp;<a href=/language_tools?hl=pt-BR>Ferramentas de idiomas</a></font></td></tr><tr><td align=center colspan=3><font size=-1>Pesquisar: <input id=all type=radio name=meta value=\"\" checked><label for=all> a web </label><input id=lgr type=radio name=meta value=\"lr=lang_pt\"><label for=lgr> p\341ginas em portugu\352s </label><input id=cty type=radio name=meta value=\"cr=countryBR\"><label for=cty> p\341ginas do Brasil </label></font></td></tr></table></form><br><br><font size=-1><a href=\"/intl/pt-BR/ads/\">Solu\347\365es de publicidade</a> - <a href=\"/intl/pt-BR/about.html\">Tudo sobre o Google</a> - <a href=http://www.google.com/ncr>Google.com in English</a></font><p><font size=-2>&copy;2007 Google</font></p></center></body></html>"

irb(main):004:0> 
 
Avatar Aguinelo Ped... 18 posts

Rui muito legal seu exemplo, eu fiz em Ruby com Sockets como se fosse um browser, faço a solicitação e o server me responde HTML assim:

Qual será das duas maneiras é mais performatica?

 
Avatar Rui 18 posts

Sockets. O open-uri é uma abstração a mais para o que você fez.

 
Avatar Aguinelo Ped... 18 posts

Legal, com open-uri é mais fácil de trabalhar, pois com esse código que postei acima não tem como acessar diretamente por exemplo:

www.aguinelopedroso.com/index.php/category/ruby-on-rails

Precisa fazer assim:

Já com open-uri tem, mas isso dá-se um jeito, Obrigado mesmo Rui

 
138834 Leonardo Faria 59 posts

Mechanize

 
Avatar Adriano 67 posts

desculpa ressucitar o topico e pra ler uma string q tem um


String


q ta dentro desse x ?