Hola! A ver si alguien me echa un cable pq hoy estoy atontao y no se a
qué se debe este error:
Tengo una librerÃa para hacer spidering. Le pasas una URL y te devuelve
un array con todos los enlaces que encuentra allÃ. Es muy básica pero
cumple su cometido. Adjunto el código abajo.
Como veis, basta con llamar al método get_links(url).
Por otro lado, en mi aplicación tengo el modelo Page, con un campo
“address” donde están las URL de las páginas almacenadas. Asà que tengo
una vista spider a la que le paso el ID de una Page, me coge su address,
la arañea, y me pinta los enlaces que encuentra. Este es el método en el
controlador:
#############################################################
def spider
@page = Page.find(params[:id])
@array_links = Spider.get_links(@page.address)
end
#############################################################
Y esta la vista:
#############################################################
<%= truncate(@page.address,55) %>
PageRank Spider (testing)
<%
@array_links.each do |enlace| %>
<%= truncate(enlace, 45) %>
<% end %>
#############################################################
Pues bien, no funciona. Me dice esto:
#############################################################
TypeError in PrincipalController#spider
can’t convert Hash into String
#############################################################
Pero… si en el controlador en lugar de llamarlo pasando el parámetro
@page.address pruebo con una cadena a pelo, sà que funciona. O sea, en
lugar de:
@array_links = Spider.get_links(@page.address)
Le pongo de prueba:
@array_links = Spider.get_links(“http://www.railes.net”)
…entonces si que funciona
¿Qué hago mal? ¿Necesito otro café?
Jaime
#############################################################
MODULO SPIDER
#############################################################
Web spider
Takes an URL and returns a collection of the URLs it finds there on a
href links
open-uri documentation:
http://www.ruby-doc.org/stdlib/libdoc/open-uri/rdoc/files/open-uri_rb.html
require ‘open-uri’
module Spider
def get_links(url)
user_agent = "Ruby/#{RUBY_VERSION}"
referer = "http://www.pagerankalert.com/"
open(url,
"Cookie" => @cookie || "",
"User-Agent" => user_agent,
"Referer" => referer ) do |file|
@body = file.read
end
#@body.scan(%r{<a href="(.*?)"}) do |enlace| puts enlace end
$i = 0
$a = []
@body.scan(%r{<a href="(.*?)"}) do |enlace|
$a[$i] = enlace
$i = $i+1
end
return $a
end
module_function :get_links
end