1
나는에 의해 내 설정/routes.rb에 정의 된 (적어도 지금 쯤) 두 엔드 포인트와 작은 API를 건물입니다 : 엔드 포인트노코 기리 반환 href 속성이 전무
Rails.application.routes.draw do
get '/api/list', to: 'api#list'
get '/api/add/:url', to: 'api#add'
end
한 것은 URL을 수신하고 나는 구문 분석하고 응용 프로그램/컨트롤러/api_controller.rb에서 다음 코드를 사용하여 그 내용의 일부를 저장 :
require 'nokogiri'
require 'httparty'
class ApiController < ApplicationController
def list
end
def add
@url = "http://#{params[:url]}"
site = Site.create(url: @url)
site.save!
page = HTTParty.get(@url)
doc = Nokogiri::HTML(page)
['h1','h2','h3','a'].each do |tag|
doc.xpath("//#{tag}").each do |cont|
if (tag == 'a') then
content = Content.create({site_id: site.id, text: cont.at_xpath('/a/@href').to_s.strip!, content_type: 'href', content_tag: tag })
else
content = Content.create({site_id: site.id, text: cont.text().to_s.strip!, content_type: 'tag_content', content_tag: tag })
end
content.save!
end
end
end
end
나는 완벽 <h1>
, <h2>
및 <h3>
태그의 내용을 얻을 수 있었다, 그러나 href
attribut의 내용 <a>
태그 ES는 nil
로 저장되고 난 정말이 뭐가 잘못된 건지 모르겠다 :
cont.at_xpath('/a/@href').to_s.strip!
표현. cont
이후
cont.at_xpath('/@href').to_s.strip!
이미이 경우 a
노드이지만, 같은 일이 :
은 이미했습니다.
저는 레일 5를 사용하고 있습니다. --api
으로 프로젝트를 시작했습니다.
힌트가 있습니까?
이 작동하지 계속합니다. 여전히 href 속성의 값으로'nil'을 얻습니다. –
죄송합니다. 내 대답을 업데이트했습니다. –
예, 이제 작동합니다. 나는이 "해시 같은"방식으로 노드의 속성을 언급하는 것이 가능하다는 것을 몰랐다. 당신의 도움을 주셔서 감사합니다! –