Получение компонента индекса фондового рынка от YQL

В настоящее время я могу получить котировку акций, возвращая xml и json, используя консоль YQL, например

выберите символ, цену из csv, где url='http://download.finance.yahoo.com/d/quotes.csv?s=IBM,YHOO,GOOG,MSFT&f=sl1d1t1c1ohgv&e=.csv' и columns='symbol,price ,дата,время,изменение,столбец1,высокий,низкий,столбец2'

Я хотел бы получить полный список компонентов от

http://download.finance.yahoo.com/d/quotes.csv?s=@^HSI&f=sl1d1t1c1ohgv&e=.csv

используя консоль YQL, поэтому я ввожу приведенный ниже оператор в консоли YQL

выберите символ, цену из csv, где url='http://download.finance.yahoo.com/d/quotes.csv?s=@^HSI&f=sl1d1t1c1ohgv&e=.csv' и columns='символ, цена, дата, время , изменить, col1, высокий, низкий, col2'

но он сказал, что моя ссылка недействительна. Любые мысли и альтернативные решения?


person morrison    schedule 05.09.2011    source источник


Ответы (3)


Ваш запрос был почти правильным, но, как вы заметили, URL-адрес считался «недействительным». Решение состоит в том, чтобы правильно экранировать значения строки запроса.

http://download.finance.yahoo.com/d/quotes.csv?s=@^HSI&f=sl1d1t1c1ohgv&e=.csv

становится

http://download.finance.yahoo.com/d/quotes.csv?s=%40%5EHSI&f=sl1d1t1c1ohgv&e=.csv

Изменение только этих двух символов в их значения, закодированные в %, позволяет YQL извлекать данные CSV.

select * from csv where url='http://download.finance.yahoo.com/d/quotes.csv?s=%40%5EHSI&f=sl1d1t1c1ohgv&e=.csv'

Кроме того: YQL не нравится, что CSV имеет пустую строку в конце файла, это вызовет проблемы при попытке использовать предложение columns where. Если вы согласны с тем, что столбцы называются col<number> и хотите пропустить последнюю (пустую) строку, используйте and col8 is not null в конце запроса.

person salathe    schedule 07.09.2011
comment
Это именно то, что я хочу. Хотя я выполнил кодирование URL в своем приложении, мне нужно сначала закодировать escape-символ, а затем снова закодировать весь запрос. Более того, я пропустил символ @. Не могу найти в документе. Спасибо большое!!! - person morrison; 08.09.2011
comment
К сожалению, этот тип URL http://download.finance.yahoo.com/d/quotes.csv?s=%40%5EHSI&f=sl1d1t1c1ohgv&e=.csv больше не будет возвращать пригодный для использования результат, так как Yahoo изменил интерфейс. - person user2161065; 28.09.2016

Это правильный адрес:

http://quote.yahoo.com/d/quotes.csv?s=‹symbol›&f=sl1d1t1c1ohgv&e=.csv

Для кока-колы:

http://quote.yahoo.com/d/quotes.csv?s=KO&f=sl1d1t1c1ohgv&e=.csv

Результат: "КО",69,74,"9/2/2011","16:00",-0,71,69,7201,69,99,69,50,8765529

Для ХСИ:

http://quote.yahoo.com/d/quotes.csv?s=^HSI&f=sl1d1t1c1ohgv&e=.csv

"^HSI",19616.40,"5/09/2011","4:01am",-596.51,19830.50,19830.50,19567.77,0

Вот документ API:

http://www.gummy-stuff.org/Yahoo-data.htm

person bigspotteddog    schedule 05.09.2011
comment
Спасибо за ответ, но я хотел бы получить список компонентов, поскольку HSI — это индекс фондового рынка. В вашем ответе символ HSI является просто фиктивным значением, поэтому вы можете видеть, что есть несколько полей с N/A. - person morrison; 05.09.2011
comment
Я исправил символ для HSI на ^HSI, так как это индекс. Я предоставил правильный URL-адрес, но вам нужно убедиться, что вы используете правильный символ, проверив на сайте Finance.yahoo.com, чтобы увидеть, что они ему присвоили. - person bigspotteddog; 05.09.2011
comment
Да, но, во-первых, этот URL-адрес получает данные самого ^hsi, но не компонента. Во-вторых, я не могу использовать эту ссылку с оператором в консоли YQL, например: выберите символ, цена из csv, где url='http://quote.yahoo.com/d/quotes.csv?s=%5EHSI&f=sl1d1t1c1ohgv&e=.csv и columns='symbol,price, дата, время, изменение, col1, high, low, col2». В любом случае, спасибо. - person morrison; 06.09.2011

К сожалению, приведенные выше решения не полностью отвечают на вопрос, вы получите только первые 51-52 результата (первая страница), а не полный индекс.

Я не думаю, что это возможно в необработанном YQL, но вам нужно будет написать некоторый код, чтобы получить HTML, а затем прокрутить каждую страницу компонентов и создать из нее свою собственную таблицу данных.

Я пробовал несколько способов, и у меня есть сценарий С#, который может это сделать, также было бы тривиально сделать это на Python и просто загрузить его в кадр данных pandas по мере продвижения или просто простой список/кортеж, если все, что вам нужно, это символы для создания списка компонентов для тестирования портфеля.

Если люди все еще заинтересованы в этом решении, я могу опубликовать ссылку на него.

person MJB    schedule 19.01.2014