Ошибка Hpricot при разборе специальных символов в URI - PullRequest
1 голос
/ 07 февраля 2010

Я работаю над сценарием ruby ​​для получения исторических цен акций от Yahoo, используя Hpricot для анализа страниц. В основном это просто: URL-адрес "http://finance.yahoo.com/q/hp?s=TickerSymbol" Например, для поиска в Google я бы использовал" http://finance.yahoo.com/q/hp?s=GOOG"

К сожалению, он ломается, когда я ищу цену индекса. Перед индексами стоит префикс, например, "http://finance.yahoo.com/q/hp?s=^DJI" для Доу.

Строка:

ticker_symbol = '^DJI'
doc = Hpricot(open("http://finance.yahoo.com/q/hp?s=#{ticker_symbol}"))

выдает это исключение:

bad URI(is not URI?): http://finance.yahoo.com/q/hp?s=^DJI

Hpricot задыхается от каретки (я думаю, потому что базовая библиотека Ruby URI делает). Есть ли способ убежать от этого персонажа или заставить библиотеку попробовать его?

Ответы [ 2 ]

4 голосов
/ 07 февраля 2010

Ну, разве я не чувствую себя глупым? Еще пять минут, и я заработал:

doc = Hpricot(open(URI.encode("http://finance.yahoo.com/q/hp?s=#{ticker_symbol}")))

Так что, если кому-то еще интересно, вот как вы это делаете. Facepalm

2 голосов
/ 07 февраля 2010

Выход для ^ равен% 5E; Вы можете сделать прямую замену в URL.

http://finance.yahoo.com/q/hp?s=%5EDJI

...