clintecker (owner)

Revisions

gist: 213968 Download_button fork
public
Public Clone URL: git://gist.github.com/213968.git
Embed All Files: show embed
Tcl #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
proc y_stock_info args {
  set symbols [join $args]
  set symbols [string toupper $symbols]
  set html [120~http://finance.yahoo.com/q/cq?d=v1&s=[join [concat $symbols {.IXIC .DJI}]]]
  set table [last [regexp -inline {<table.*?class="yfi_columnar_data">\s*(.+?)\s*</table>} $html]]
  set rows [lrange [evens [regexp -all -inline {(.*?)(?:</tr>)} $table]] 1 end]
  set info [list]
  
  foreach row $rows {
    foreach {name pattern} {
      symbol {<td class=symbol>.*\n\s*(.*?)</a>}
      name {<td class=localName>.*?\n\s*<a[^>]+>(.*?)</a>}
      last_trade {<td class=lastTrade>(.*?)</td>}
      change {<td class=change .*?<span.*?\n(.*?)</span>}
      change_rate {<td class=changeRate .*?<span.*?\n\((.*?)\)}
      market_cap {<td class=mktCap>(.*?)</td>}
    } {
      set i($name) [string trim [html [last [regexp -inline $pattern $row]]]]
    }
    if {! [string match "-*" $i(change_rate)]} {set i(change_rate) "+$i(change_rate)"}
 
    if {[lsearch -exact $symbols $i(symbol)] != -1} {
      lappend info [array get i]
    }
  }
  
  return $info
}