我不太確定 YQL 是不是還有在維護,不過這是用來測試 TclCurl Http GET 的程式,送出查詢給
Yahoo Query Language (YQL),然後取得結果。
package require Tcl 8.6
package require TclOO
package require TclCurl
oo::class create CurlYQL {
variable html_result
constructor {} {
set html_result ""
}
destructor {
}
method query {query args} {
variable url
variable pairs
set url "https://query.yahooapis.com/v1/public/yql"
set pairs {}
lappend pairs "[curl::escape format]=[curl::escape json]"
lappend pairs "[curl::escape q]=[curl::escape $query]"
foreach {name value} $args {
lappend pairs "[curl::escape $name]=[curl::escape $value]"
}
append url ? [join $pairs &]
set curlHandle [curl::init]
$curlHandle configure -url $url -bodyvar [namespace current]::html_result
catch { $curlHandle perform } curlErrorNumber
if { $curlErrorNumber != 0 } {
error [curl::easystrerror $curlErrorNumber]
}
$curlHandle cleanup
}
#
# get the results
#
method getResults {} {
return $html_result
}
}
所以接下來就是測試。
送出查詢到 Yhaoo Finance (for CSV file) 查詢 SPY, VOO, IVV 的股價,我們拿到結果以後,使用
rl_json 分析結果並且印出來。
package require rl_json
set curlyql [CurlYQL new]
$curlyql query {select * from csv where url='http://download.finance.yahoo.com/d/quotes.csv?s=SPY,VOO,IVV&f=sl1d1t1c1ohgv&e=.csv' and columns='symbol,price,date,time,change,col1,high,low,col2'}
set query_result [$curlyql getResults]
if {[::rl_json::json exists $query_result query]==1} {
set rows [::rl_json::json get $query_result query results row]
puts "========================================\n"
foreach row $rows {
puts "symbol: [dict get $row symbol]"
puts "price: [dict get $row price]"
puts "date: [dict get $row date]"
puts "time: [dict get $row time]"
puts "change: [dict get $row change]"
puts "col1: [dict get $row col1]"
puts "high: [dict get $row high]"
puts "low: [dict get $row low]"
puts "col2: [dict get $row col2]"
puts "========================================\n"
}
}
$curlyql destroy
* 注意:rl_json 新增加的 command json 放在 namespace rl_json 內,不過使用說明上沒有特別明講,所以需要注意一下這件事。
* 更新:
我把資料放到
Github 上了。