2014-02-26 2 views
0

나는 모든 사용 가능한 필드에 대해 XML을 생성하기 위해 YQL 쿼리 (GOOG, YHOO, MSFT 및 AAPL과 함께 표준 예제 쿼리)를 사용하고 있습니다. Ruby 스크립트를 사용하여 XML 출력용 YQL 사이트를 긁어서 다른 주식에 대해 반복해서 실행할 수 있고 데이터를 어딘가에 저장할 수 있기를 원했습니다. 나는 아직 내 대본을 끝내지 못했지만, 나는 가지고 있지 않은 것 같다. 여기에 코드입니다 :YQL Ruby의 XML에 대한 Yahoo Finance Scraper

yahoo_finance_scrape.rb

require 'rubygems' 
require 'nokogiri' 
require 'restclient' 

PAGE_URL = "http://developer.yahoo.com/yql/console/" 
yql_query = 'use "http://github.com/spullara/yql-tables/raw/d60732fd4fbe72e5d5bd2994ff27cf58ba4d3f84/yahoo/finance/yahoo.finance.quotes.xml" 
as quotes; select * from quotes where symbol in ("YHOO","AAPL","GOOG","MSFT") ' 

if page = RestClient.post(PAGE_URL, {'name' => yql_query, 'submit' => 'Test'}) 
    puts "YQL query: #{yql_query}, is valid" 

    xml_output = Nokogiri::HTML(page) 
    lines = xml_output.css('#container #layout-doC#yui-gen3000008 #yui-gen3000009 #yui_3_11_0_3_1393417778356_354 
          #yui-gen3000015 #yui-gen3000016 div#yui_3_11_0_2_1393417778356_10 #centerBottomView 
          #outputContainer div#output #outputTabContent #formattedView #viewContent #prexml') 

    lines.each do |line| 
     puts line.css('span').map{|span| span.text}.join(' ') 
     sleep 0.03 
    end 
end 

나는 "YQL 쿼리 : 사용"프로그램, 그것은 단지 인쇄를 실행하면 http://github.com/spullara/yql-tables/raw/d60732fd4fbe72e5d5bd2994ff27cf58ba4d3f84/yahoo/finance/yahoo.finance.quotes.xml "따옴표로 (의 경우 기호 따옴표 SELECT * FROM" YHOO ","AAPL ","GOOG ","MSFT ")는 유효합니다." 그리고 나서 멈 춥니 다. 오, yahoo.finance.quotes가 작동하지 않았기 때문에 그 Github URL을 사용하고 있으며, Stackoverflow의 다른 사용자가 사용하도록 제안했습니다.

CSS 태그를 확인하려면 http://developer.yahoo.com/yql/console/으로 이동하여 내 검색어를 입력 한 다음 inspect 요소를 입력하십시오. 나는 그것을 여기에 게시 할 것이지만 나는 어떻게해야할지 모른다.

답변

0

출력은 단지 yql_query var의 내용입니다. 그래서 이것은별로 도움이되지 않습니다.

"xxxx ax 따옴표 사용"을 코드에 문자열로 넣으면 안됩니다. "다른 사람"이 염두에 두었던 것을 확인하십시오.

RestClient.post() 메서드는 응답 개체를 반환합니다. 모든 HTTP 작업에서 항상 response.code를 확인하십시오. 그렇지 않으면 오류에 대해 알지 못합니다.

response = RestClient.post(...) 
puts "HTTP Response code: #{response.code}" 
if response.code == 200 
    page = repsonse.to_str 
    ... 
end 

Nokogiri 웹 사이트에 따르면 xml_output.css() 메서드는 CSS 선택기와 같이 필터링됩니다. 예를 들어 "#container # layout-doc"가 있다면 "id가 ​​'layout-doc'인 요소를 ID 'container'의 요소 안에 필터링하는 것입니다. id가 일반적으로 유일해야하기 때문에 마지막 "#prexml"은 오류가 발생하지 않아야합니다.

+0

마지막 비트를 시도해 볼 것입니다. 수동으로 "xxxx ax 인용 부호 사용"을 두 번 확인했습니다. 쿼리가 작동하고 문제가 발생하지 않는다고 생각합니다. 오류 메시지가 없다는 것을 알았지 만 오류 처리 블록을 구현 한 후에는 어떻게해야합니까? – user3103499

+0

구현 됨 오류 처리는 여전히 동일한 결과를 얻습니다. 오류가없고 출력이 없습니다 – user3103499

+0

무엇이 response.code입니까? – Meier