Вот код, с которого можно начать; Я покажу, как получить URL-адрес в буфер, проанализировать каждую строку, а затем отобразить тикер и цену каждого элемента. Вы можете изменить его оттуда, чтобы сделать то, что вам нужно.
При этом каждая строка данных о запасах анализируется в списке, и сразу же получить значения можно с помощью первой, второй, третьей функций или с помощью nth. Вы можете написать функции для захвата каждого элемента, который вы хотите, например, get-ticker (цитата), который просто возвращает (первый тикер)
Я бы не стал думать, какую структуру данных использовать; все, что проще, значит хорошо. Если вам нужна высокая производительность, вам все равно не следует использовать emacs lisp.
(defun test()
(interactive)
(let ((quotes (get-quotes '("AAPL" "GOOG" "MSFT" "ORCL" "ERTS" "THQI") "sb")))
(show-quotes quotes)))
(defun show-quotes(quotes)
(dolist (quote quotes)
(message (format "%s $%.2f" (first quote) (string-to-number (second quote))))))
(defun get-quotes(tickers field-string)
"Given a list of ticker names and a string of fields to return as above, this grabs them
from Yahoo, and parses them"
(let ((results-buffer (get-yahoo-quotes-to-buffer (get-price-url tickers field-string))))
(switch-to-buffer results-buffer)
(parse-quote-buffer results-buffer)))
(defun get-price-url (tickers field-string)
"Set up the get url"
(concat "http://download.finance.yahoo.com/d/quotes.csv?s="
(mapconcat 'identity tickers "+")
"&f=" field-string))
(defun get-yahoo-quotes-to-buffer(url)
"Retrieve the quotes to a buffer and return it"
(url-retrieve-synchronously url))
(defun parse-quote-buffer(b)
"Parse the buffer for quotes"
(goto-line 1)
(re-search-forward "^\n")
(beginning-of-line)
(let ((res nil))
(while (> (point-max) (point))
(setf res (cons (split-string (thing-at-point 'line) ",") res))
(forward-line 1))
(reverse res)))