egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

stock exchange script for Australia

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Requests
View previous topic :: View next topic  
Author Message
rainman
Voice


Joined: 21 Apr 2021
Posts: 10

PostPosted: Fri Jan 13, 2023 2:35 am    Post subject: stock exchange script for Australia Reply with quote

Gday all, how's everyone doing?

I'm looking for a simple stock exchange script for Australia if someone can help make a simple one for me please

like say !asx Code-here and it shows some basic info

eg: !asx CBA etc

such as Current Price, Last Price, etc

https://www.marketindex.com.au/asx/cba <--example if you go down to snapshot if that info can be displayed in channel if possible please

Thanks
Back to top
View user's profile Send private message
SpiKe^^
Owner


Joined: 12 May 2006
Posts: 826
Location: Tennessee, USA

PostPosted: Fri Jan 13, 2023 9:26 am    Post subject: Reply with quote

There is a pile of info in the "Snapshot", way too much to present in a channel post.

Maybe pick a few key entries to present?
Better yet, type out an example of what a channel post would look like:)
_________________
SpiKe^^

Get BogusTrivia 2.06.4.7 at www.mytclscripts.com
or visit the New Tcl Acrhive at www.tclarchive.org
.
Back to top
View user's profile Send private message Visit poster's website
rainman
Voice


Joined: 21 Apr 2021
Posts: 10

PostPosted: Fri Jan 13, 2023 9:54 am    Post subject: Reply with quote

SpiKe^^ wrote:
There is a pile of info in the "Snapshot", way too much to present in a channel post.

Maybe pick a few key entries to present?
Better yet, type out an example of what a channel post would look like:)


Oh right sorry Smile

How about just the following

Open Price:
Last Price:
Bid / Ask:
Day Range:
Prev Close:
Last Trade:
Market Cap:
Change:

Is that more reasonable Smile
Back to top
View user's profile Send private message
SpiKe^^
Owner


Joined: 12 May 2006
Posts: 826
Location: Tennessee, USA

PostPosted: Sun Jan 22, 2023 12:12 am    Post subject: Reply with quote

Looking over the html source file much closer, shows they hide their quote data very well.
Quote:
<td>Last (Price)</td>
<td class="text-right">
<span data-quoteapi="price"></span>
</td>
</tr>
<tr>
<td>Change</td>
<td class="text-right" data-quoteapi="changeSignCSS">
<span data-quoteapi="change showNegativeSign=false">0.00</span>
(<span data-quoteapi="pctChange showNegativeSign=true">0.00</span>)
</td>
</tr>


The headers are there but none of the data.
I do not know how to get any quote data from this site.

Maybe you know a usable source site for this stock quote data, or a way to force any data from this site?
_________________
SpiKe^^

Get BogusTrivia 2.06.4.7 at www.mytclscripts.com
or visit the New Tcl Acrhive at www.tclarchive.org
.
Back to top
View user's profile Send private message Visit poster's website
rainman
Voice


Joined: 21 Apr 2021
Posts: 10

PostPosted: Sun Jan 22, 2023 12:44 am    Post subject: Reply with quote

SpiKe^^ wrote:
Looking over the html source file much closer, shows they hide their quote data very well.
Quote:
<td>Last (Price)</td>
<td class="text-right">
<span data-quoteapi="price"></span>
</td>
</tr>
<tr>
<td>Change</td>
<td class="text-right" data-quoteapi="changeSignCSS">
<span data-quoteapi="change showNegativeSign=false">0.00</span>
(<span data-quoteapi="pctChange showNegativeSign=true">0.00</span>)
</td>
</tr>


The headers are there but none of the data.
I do not know how to get any quote data from this site.

Maybe you know a usable source site for this stock quote data, or a way to force any data from this site?


Hello Spike,

How about directly from the source

https://www2.asx.com.au/markets/company/cba

Is that more usable ?

https://www2.asx.com.au/

If that's a bust only other one i found would be

https://au.finance.yahoo.com/

https://au.finance.yahoo.com/quote/CBA.AX?p=CBA.AX&.tsrc=fin-srch

I really do appreciate your efforts into this, thank you so much
Back to top
View user's profile Send private message
SpiKe^^
Owner


Joined: 12 May 2006
Posts: 826
Location: Tennessee, USA

PostPosted: Sun Jan 22, 2023 2:49 am    Post subject: maybe au.finance.yahoo.com/quote/ Reply with quote

Looks to me like the source code from here is user friendly:)
https://au.finance.yahoo.com/quote/CBA.AX?p=CBA.AX

With that being all the data available, what fields would you include in the channel post?
_________________
SpiKe^^

Get BogusTrivia 2.06.4.7 at www.mytclscripts.com
or visit the New Tcl Acrhive at www.tclarchive.org
.
Back to top
View user's profile Send private message Visit poster's website
rainman
Voice


Joined: 21 Apr 2021
Posts: 10

PostPosted: Sun Jan 22, 2023 3:10 am    Post subject: Re: maybe au.finance.yahoo.com/quote/ Reply with quote

SpiKe^^ wrote:
Looks to me like the source code from here is user friendly:)
https://au.finance.yahoo.com/quote/CBA.AX?p=CBA.AX

With that being all the data available, what fields would you include in the channel post?


Market Cap:
Open:
Prev Close:
Bid:
Ask:
Day's Range:

Just those please spike Smile
Back to top
View user's profile Send private message
SpiKe^^
Owner


Joined: 12 May 2006
Posts: 826
Location: Tennessee, USA

PostPosted: Wed Jan 25, 2023 6:32 pm    Post subject: ausStocks.tcl version 0.1 24Jan2023 Reply with quote

Tested some, give it a shot:)

Code:

## ausStocks.tcl version 0.1  24Jan2023 ##

# public command syntax:  !asx <symbol>
# example:  !asx csl

package require http
package require tls

http::register https 443 {tls::socket -autoservername true}

bind pub - !asx asx:bindpub

proc asx:bindpub {nk uh hn ch tx} {
  set symbol [string toupper [lindex [split [string trim $tx]] 0]]

  if {[string length $symbol] < 3 || [string length $symbol] > 6} { return 0 }

  set address "https://au.finance.yahoo.com/quote/${symbol}.AX?p=${symbol}.AX"
  set token [::http::geturl $address -timeout 7500]
  set html [::http::data $token]  ;   ::http::cleanup $token
  set html [join [lrange [split $html "\n"] 4 6] {}]

  set ils {company xinfo lastprice change percent notice prevclose open bid ask}
  foreach vname [lappend ils dayrange 52weeks volume avgvolume marketcap] {
    set $vname "N/A"
  }

  set qmap [list %k $nk %h $ch]


  regexp {<h1 class=\"D\(ib\) Fz\(18px\)\">(.*?)</h1>(.*)$} $html - company html
  regexp {^</div>[^>]+><span>(.*?)</span>(.*)$} $html - xinfo html
  regexp {regularMarketPrice[^>]+>(.*?)</fin-str(.*)$} $html - lastprice html
  regexp {regularMarketChange[^>]+><[^>]+>(.*?)</span(.*)$} $html - change html
  regexp {MarketChangePercent[^>]+><[^>]+>(.*?)</span(.*)$} $html - percent html
  regexp {quote-market-notice[^>]+><span>(.*?)</span>(.*)$} $html - notice html

  if {[matchstr "-*" $change]} {
    set change "\00304$change\003"  ;  set percent "\00304$percent\003"
  } elseif {[matchstr "+*" $change]} {
    set change "\00303$change\003"  ;  set percent "\00303$percent\003"
  }
  lappend qmap %y $company %x $xinfo %l $lastprice %c $change %p $percent

  regexp {PREV_CLOSE-value\">(.*?)</td></tr>(.*)$} $html - prevclose html
  regexp {\"OPEN-value\">(.*?)</td></tr>(.*)$} $html - open html
  regexp {\"BID-value\">(.*?)</td></tr>(.*)$} $html - bid html
  regexp {\"ASK-value\">(.*?)</td></tr>(.*)$} $html - ask html

  lappend qmap %n $notice %r $prevclose %o $open %b $bid %a $ask

  regexp {DAYS_RANGE-value\">(.*?)</td></tr>(.*)$} $html - dayrange html
  regexp {FIFTY_TWO_WK_RANGE-value\">(.*?)</td>(.*)$} $html - 52weeks html
  regexp {regularMarketVolume[^>]+>(.*?)</fin-streamer(.*)$} $html - volume html
  regexp {AVERAGE_VOLUME_3MONTH-value\">(.*?)</td>(.*)$} $html - avgvolume html
  regexp {\"MARKET_CAP-value\">(.*?)</td></tr>(.*)$} $html - marketcap html

  lappend qmap %d $dayrange %w $52weeks %v $volume %g $avgvolume %m $marketcap


  set hmap [list "'" "'" "&amp;" "&" "&quot;" "\""]

  #### e f i j q s t u z ####

  #  %y  = company name      ex.  Apollo Minerals Limited (AON.AX)
  #  %x  = asx info  ??      ex.  ASX - ASX Delayed price. Currency in AUD
  #  %l  = last price        ex.  108.66
  #  %c  = price change      ex.  -0.08
  #  %p  = change percent    ex.  (-0.07%)
  #  %n  = market notice     ex.  As of  10:17AM AEDT. Market open.

  #  %r  = previous close    ex.  108.74
  #  %o  = open              ex.  108.74
  #  %b  = bid               ex.  108.66 x 36400
  #  %a  = ask               ex.  108.69 x 7100
  #  %d  = day's range       ex.  108.38 - 109.15
  #  %w  = 52-week range     ex.  86.98 - 109.20
  #  %v  = volume            ex.  3,747,153
  #  %g  = avg. volume       ex.  2,190,023
  #  %m  = market cap        ex.  183.463B

  #  %k  = nick              ex.  SpiKe^^
  #  %h  = channel           ex.  #pc-mirc-help


  set say [list "\00306<ASX>\003 %y  \002%l AUD\002  Change: \002%c %p\002  %n"]

  set s "Previous close: \002%r\002  Open: \002%o\002  Bid: \002%b\002  "
  append s "Ask: \002%a\002  Day's range: \002%d\002  Market cap: \002%m\002"
  lappend say $s


  foreach ln $say {
    set ln [string map $qmap $ln]  ;   set ln [string map $hmap $ln]
    puthelp "PRIVMSG $ch :$ln"
  }
  return 0
}

putlog "Loaded ausStocks.tcl version 0.1  24Jan2023"



_________________
SpiKe^^

Get BogusTrivia 2.06.4.7 at www.mytclscripts.com
or visit the New Tcl Acrhive at www.tclarchive.org
.
Back to top
View user's profile Send private message Visit poster's website
CrazyCat
Revered One


Joined: 13 Jan 2002
Posts: 1108
Location: France

PostPosted: Wed Jan 25, 2023 7:07 pm    Post subject: Reply with quote

short advice: don't register globaly https but register it when needed (before query) and unregister when cleaning the connection.
If another script globaly unregister https, yours will not work anymore.

Keep in mind that your script is not the only one running on the eggdrop.
_________________
https://www.eggdrop.fr - French IRC network
Offer me a coffee - Do not ask me help in PM, we are a community.
Back to top
View user's profile Send private message Visit poster's website
SpiKe^^
Owner


Joined: 12 May 2006
Posts: 826
Location: Tennessee, USA

PostPosted: Wed Jan 25, 2023 7:46 pm    Post subject: Reply with quote

thommey said put it there, and stop using ::http::unregister https:)
_________________
SpiKe^^

Get BogusTrivia 2.06.4.7 at www.mytclscripts.com
or visit the New Tcl Acrhive at www.tclarchive.org
.
Back to top
View user's profile Send private message Visit poster's website
rainman
Voice


Joined: 21 Apr 2021
Posts: 10

PostPosted: Wed Jan 25, 2023 8:14 pm    Post subject: Re: ausStocks.tcl version 0.1 24Jan2023 Reply with quote

Thank you so much spike, you are the man sir Very Happy

i'll def give it a better whirl tomorrow when markets open up xD

So far it's working as expected Very Happy
Back to top
View user's profile Send private message
SpiKe^^
Owner


Joined: 12 May 2006
Posts: 826
Location: Tennessee, USA

PostPosted: Sat Jan 28, 2023 9:16 am    Post subject: ausStocks.tcl version 0.2 27Jan2023 Reply with quote

Version 0.2 adds some bare minimum sanity/error checks w/ reporting:
1) restricts user input to 3 - 6 alphanumeric characters.
2) adds some error checking on the http connection & get.
3) put the entire script code in the namespace ausStocks.

Code:

## ausStocks.tcl version 0.2  27Jan2023 ##

## Version 0.2 adds some bare minimum sanity checks w/ reporting:
# 1) restricts user input to 3 - 6 alphanumeric characters.
# 2) adds some error checking on the http connection & get.
# 3) put the entire script code in the namespace ausStocks.


# public command syntax:  !asx <symbol>
# example:  !asx csl

##########################################
namespace eval ausStocks {

package require http
package require tls

::http::register https 443 {::tls::socket -autoservername true}
#::http::register https 443 [list ::tls::socket -servername au.finance.yahoo.com]

bind pub - !asx [namespace current]::asx:bindpub

proc asx:bindpub {nk uh hn ch tx} {
  set sym [string toupper [lindex [split [string trim $tx]] 0]]

  if {[string length $sym] ni {3 4 5 6} || [regexp {[^0-9A-Z]} $sym]} {
    puthelp "PRIVMSG $ch :\00306<ASX>\003 Command syntax:  \002!asx <symbol>\002"
    return 0
  }

  set address "https://au.finance.yahoo.com/quote/${sym}.AX?p=${sym}.AX"
  ::http::config -useragent "Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
  #::http::register https 443 {::tls::socket -autoservername true}
  #::http::register https 443 [list ::tls::socket -servername au.finance.yahoo.com]

  # Thanks thommey #
  if {[catch {::http::geturl $address -timeout 7500} tok]} {  error $tok  }
  if {[::http::status $tok] ne "ok"} {
    error "TCP error: [::http::status $tok][::http::cleanup $tok]"
  } elseif {[::http::ncode $tok] != 200} {
    error "HTTP error: [::http::code $tok][::http::cleanup $tok]"
  }

  set html [::http::data $tok]  ;   ::http::cleanup $tok
  set html [join [lrange [split $html "\n"] 4 6] {}]

  set company ""  ;   set xinfo ""  ;   set lastprice ""

  regexp {<h1 class=\"D\(ib\) Fz\(18px\)\">(.*?)</h1>(.*)$} $html - company html
  regexp {^</div>[^>]+><span>(.*?)</span>(.*)$} $html - xinfo html
  regexp {regularMarketPrice[^>]+>(.*?)</fin-str(.*)$} $html - lastprice html

  if {$company eq "" || $xinfo eq "" || $lastprice eq ""} {
    puthelp "PRIVMSG $ch :\00306<ASX>\003 Invalid Company Symbol:  \002$sym\002"
    return 0
  }

  set qmap [list %k $nk %h $ch %y $company %x $xinfo %l $lastprice]


  set ils {change percent notice prevclose open bid ask dayrange}
  foreach vname [lappend ils 52weeks volume avgvolume marketcap] {
    set $vname "N/A"
  }

  regexp {regularMarketChange[^>]+><[^>]+>(.*?)</span(.*)$} $html - change html
  regexp {MarketChangePercent[^>]+><[^>]+>(.*?)</span(.*)$} $html - percent html
  regexp {quote-market-notice[^>]+><span>(.*?)</span>(.*)$} $html - notice html

  if {[matchstr "-*" $change]} {
    set change "\00304$change\003"  ;  set percent "\00304$percent\003"
  } elseif {[matchstr "+*" $change]} {
    set change "\00303$change\003"  ;  set percent "\00303$percent\003"
  }
  lappend qmap %c $change %p $percent %n $notice

  regexp {PREV_CLOSE-value\">(.*?)</td></tr>(.*)$} $html - prevclose html
  regexp {\"OPEN-value\">(.*?)</td></tr>(.*)$} $html - open html
  regexp {\"BID-value\">(.*?)</td></tr>(.*)$} $html - bid html
  regexp {\"ASK-value\">(.*?)</td></tr>(.*)$} $html - ask html
  regexp {DAYS_RANGE-value\">(.*?)</td></tr>(.*)$} $html - dayrange html

  lappend qmap %r $prevclose %o $open %b $bid %a $ask %d $dayrange

  regexp {FIFTY_TWO_WK_RANGE-value\">(.*?)</td>(.*)$} $html - 52weeks html
  regexp {regularMarketVolume[^>]+>(.*?)</fin-streamer(.*)$} $html - volume html
  regexp {AVERAGE_VOLUME_3MONTH-value\">(.*?)</td>(.*)$} $html - avgvolume html
  regexp {\"MARKET_CAP-value\">(.*?)</td></tr>(.*)$} $html - marketcap html

  lappend qmap %w $52weeks %v $volume %g $avgvolume %m $marketcap


  set hmap [list "'" "'" "&amp;" "&" "&quot;" "\""]

  #### e f i j q s t u z ####

  #  %y  = company name      ex.  Apollo Minerals Limited (AON.AX)
  #  %x  = asx info  ??      ex.  ASX - ASX Delayed price. Currency in AUD
  #  %l  = last price        ex.  108.66
  #  %c  = price change      ex.  -0.08
  #  %p  = change percent    ex.  (-0.07%)
  #  %n  = market notice     ex.  As of  10:17AM AEDT. Market open.

  #  %r  = previous close    ex.  108.74
  #  %o  = open              ex.  108.74
  #  %b  = bid               ex.  108.66 x 36400
  #  %a  = ask               ex.  108.69 x 7100
  #  %d  = day's range       ex.  108.38 - 109.15
  #  %w  = 52-week range     ex.  86.98 - 109.20
  #  %v  = volume            ex.  3,747,153
  #  %g  = avg. volume       ex.  2,190,023
  #  %m  = market cap        ex.  183.463B

  #  %k  = nick              ex.  GreedyHamster
  #  %h  = channel           ex.  #MarketHub


  set say [list "\00306<ASX>\003 %y  \002%l AUD\002  Change: \002%c %p\002  %n"]

  set s "Previous close: \002%r\002  Open: \002%o\002  Bid: \002%b\002  "
  append s "Ask: \002%a\002  Day's range: \002%d\002  Market cap: \002%m\002"
  lappend say $s


  foreach ln $say {
    set ln [string map $qmap $ln]  ;   set ln [string map $hmap $ln]
    putserv "PRIVMSG $ch :$ln"
  }
  return 0
}

putlog "Loaded ausStocks.tcl version 0.2  27Jan2023"

}  ;## end of:  namespace eval ausStocks ##


_________________
SpiKe^^

Get BogusTrivia 2.06.4.7 at www.mytclscripts.com
or visit the New Tcl Acrhive at www.tclarchive.org
.
Back to top
View user's profile Send private message Visit poster's website
rainman
Voice


Joined: 21 Apr 2021
Posts: 10

PostPosted: Sat Jan 28, 2023 11:09 pm    Post subject: Re: ausStocks.tcl version 0.2 27Jan2023 Reply with quote

Thanks Spike and LOL @ GreedyHamster Razz love it Very Happy
Back to top
View user's profile Send private message
SpiKe^^
Owner


Joined: 12 May 2006
Posts: 826
Location: Tennessee, USA

PostPosted: Mon Feb 13, 2023 2:44 pm    Post subject: ausStocks.tcl version 0.3 10Feb2023 Reply with quote

Version 0.3 tries to make this script a little more user friendly:
1) script will now follow the redirect to the "Similar Symbol Lookup" page.
2) use .chanset #channel +asx to enable this script by channel.
3) and/or use the new channel setting: set asx(chan) "#chan #anotherchan"
4) can now use a company list file to limit invalid query symbols.
5) added public error messages for all ::http::geturl issues.
6) and lots of other small tweeks.


Code:

##########  ausStocks.tcl  ver. 0.3  by SpiKe^^  ########## 10Feb2023 ##########

## Version 0.3  tries to make this script a little more user friendly:
# 1) script will now follow the redirect to the "Similar Symbol Lookup" page.
# 2) use  .chanset #channel +asx  to enable this script by channel.
# 3) and/or use the new channel setting:  set asx(chan) "#chan #anotherchan"
# 4) can now use a company list file to limit invalid query symbols.
# 5) added public error messages for all  ::http::geturl issues.
# 6) and lots of other small tweeks.

################## Version History ##################
## Version 0.2 added some bare minimum sanity checks w/ reporting:
# 1) restricts user input to 3 - 6 alphanumeric characters.
# 2) adds some error checking on the http connection & get.
# 3) put the entire script code in the namespace ::ausStocks::


# public command syntax:  !asx <symbol>
# example:  !asx csl

######################################################
namespace eval ausStocks {   variable asx

package require http
package require tls

setudef flag asx   ;# <= Use  .chanset #chan +asx  to enable this script by channel.


################### begin settings ###################

# set active channel(s) for this script  (or set empty to only use .chanset #ch +asx)
#  or use:  set asx(chan) "*"  to make the script active in all bot channels.
# note:  the channels set here can not be disabled by using  .chanset #ch -asx
set asx(chan) ""

# script logo  (placed before almost every line sent to the channel)
set asx(logo) "\00306\[ASX\]\003 "

# this filename is read at: source scripts/ausStocks.tcl
#  and makes the namespaced variable:  $::ausStocks::asx(companydict).
set asx(companylist_filename) "scripts/ausStocks.companylist.txt"


############ end settings ############ end settings ############

################################################################


::http::register https 443 {::tls::socket -autoservername true}
#::http::register https 443 [list ::tls::socket -servername au.finance.yahoo.com]

bind pub - !asx [namespace current]::bindpub

proc bindpub {nk uh hn ch tx} {   variable asx
  set c [string tolower $ch]
  if {![channel get $ch asx] && ("*" ni $asx(chan)) && ($c ni $asx(chan))} {
    return 0
  }
  set tx [string trimright [string toupper [lindex [split [string trim $tx]] 0]] "."]

  if {[matchstr "*.*" $tx]} {   set tmp [split $tx "."]
    if {[llength $tmp] > 2 || [lindex $tmp 1] ne "AX"} {
      puthelp "PRIVMSG $ch :$asx(logo)Invalid Company Symbol: \002${tx}\002"
      return 0
    }
    set sym [lindex $tmp 0]
  } else {   set sym $tx   }

  if {[string length $sym] ni {2 3 4 5 6} || [regexp {[^0-9A-Z]} $sym]} {
    set say "$asx(logo)Command syntax:  \002!asx <symbol>\002"
    puthelp "PRIVMSG $ch :$say  example:  \002!asx csl\002"
    return 0
  }
  if {$asx(companydict) ne ""} {
    if {![dict exists $asx(companydict) $sym]} {
      set say "$asx(logo)Invalid Company Symbol: \002${sym}\002"
      puthelp "PRIVMSG $ch :$say (symbol not in the $asx(companylist_filename) file.)"
      return 0
    }
  }

  set addr "https://au.finance.yahoo.com"
  set address "${addr}/quote/${sym}.AX?p=${sym}.AX"
  set uagent "Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
  set emap [list "\n" " | "]

  foreach try {1 2} {  ::http::config -useragent $uagent
    if {[catch {::http::geturl $address -timeout 7500} tok]} {
      set err "1 ::http::geturl error: [string map $emap $tok]"
    } elseif {[::http::status $tok] ne "ok"} {
      set err "2 TCP error: [::http::status $tok]"
    } else {   set ncode [::http::ncode $tok]
      if {($try == 1 && $ncode ni {200 302}) || ($try == 2 && $ncode != 200)} {
        set err "3 HTTP error: [::http::code $tok]"
      }
    }

    if {$try == 1 && [info exists ncode] && $ncode == 302} {
      upvar #0 $tok state
      if {[dict exists $state(meta) location]} {
        set loc [dict get $state(meta) location]

        if {[matchstr "/lookup*" $loc]} {   set address "${addr}$loc"
          ::http::cleanup $tok  ;   unset tok  ;   unset ncode
          continue
        }
        set err "5 Redirect error: state(meta) 'location' not as expected ( $loc )."
      } else {
        set err "4 Redirect error: Unable to find 'location' in state(meta)."
      }
    }
    break
  }

  if {[info exists err]} {   putlog "$asx(logo) [string range $err 2 end]"
    if {[string index $err 0] > 1} {   ::http::cleanup $tok   }
    puthelp "PRIVMSG $ch :$asx(logo)Unable to get the requested data. Try again later."
    return 0
  }

  set html [::http::data $tok]  ;   ::http::cleanup $tok
  set html [join [lrange [split $html "\n"] 4 6] {}]

  # is redirected 302 #
  if {$try == 2} {   set similarto ""  ;   set allcount ""  ;   set simdict {}
    regexp {<span>Symbols similar to (.*?)</span></h2>(.*)$} $html - similarto html
    regexp {<span>All \((.*?)\)</span></a></li>(.*)$} $html - allcount html
    if {$similarto eq "" || $allcount eq ""} {
      puthelp "PRIVMSG $ch :$asx(logo)Unable to get the requested data."
      return 0
    }

    set re {<td class=\"data-col0[^>]+>[^>]+>(.*?)</a></td>[^>]+>(.*?)</td>(.*)$}
    while {[dict size $simdict] < 5} {
      if {![regexp $re $html - ssym sname html]} {   break   }
      dict set simdict $ssym $sname
    }
    set say "$asx(logo)Symbol Lookup >"

    if {[set dsize [dict size $simdict]] == 0} {
      puthelp "PRIVMSG $ch :$say Found no symbols similar to: \002${sym}\002"
      return 0
    }
    if {$dsize == 1} {  append say " Found one symbol similar to '${sym}':"
      puthelp "PRIVMSG $ch :$say  \002${ssym}\002 $sname"
      return 0
    }
    if {$dsize <= 3} {  append say " Found $dsize symbols similar to '${sym}':"
    } else {  append say " Found $allcount symbols similar to '${sym}'." }

    if {$allcount > 5} {   append say "  Showing the first 5:"
    } elseif {$allcount > 3} {   append say "  Showing all of them:"   }

    dict for {sy co} $simdict {   append say "  \002${sy}\002 $co"   }
    puthelp "PRIVMSG $ch :$say"
    return 0
  } ;# end: is redirected 302 #

  set company ""  ;   set xinfo ""

  regexp {<h1 class=\"D\(ib\) Fz\(18px\)\">(.*?)</h1>(.*)$} $html - company html
  regexp {^</div>[^>]+><span>(.*?)</span>(.*)$} $html - xinfo html
  if {$company eq "" || $xinfo eq ""} {
    puthelp "PRIVMSG $ch :$asx(logo)Invalid Company Symbol:  \002${sym}\002"
    return 0
  }
  set qmap [list %k $nk %h $ch %y $company %x $xinfo]


  set ils {lastprice change percent notice prevclose open bid ask dayrange 52weeks}
  foreach vname [lappend ils volume avgvolume marketcap] {  set $vname "N/A"  }

  regexp {regularMarketPrice[^>]+>(.*?)</fin-str(.*)$} $html - lastprice html
  regexp {regularMarketChange[^>]+><[^>]+>(.*?)</span(.*)$} $html - change html
  regexp {MarketChangePercent[^>]+><[^>]+>(.*?)</span(.*)$} $html - percent html
  regexp {quote-market-notice[^>]+><span>(.*?)</span>(.*)$} $html - notice html

  if {[matchstr "-*" $change]} {
    set change "\00304$change\003"  ;  set percent "\00304$percent\003"
  } elseif {[matchstr "+*" $change]} {
    set change "\00303$change\003"  ;  set percent "\00303$percent\003"
  }
  lappend qmap %l $lastprice %c $change %p $percent %n $notice

  regexp {PREV_CLOSE-value\">(.*?)</td></tr>(.*)$} $html - prevclose html
  regexp {\"OPEN-value\">(.*?)</td></tr>(.*)$} $html - open html
  regexp {\"BID-value\">(.*?)</td></tr>(.*)$} $html - bid html
  regexp {\"ASK-value\">(.*?)</td></tr>(.*)$} $html - ask html
  regexp {DAYS_RANGE-value\">(.*?)</td></tr>(.*)$} $html - dayrange html

  lappend qmap %r $prevclose %o $open %b $bid %a $ask %d $dayrange

  regexp {FIFTY_TWO_WK_RANGE-value\">(.*?)</td>(.*)$} $html - 52weeks html
  regexp {regularMarketVolume[^>]+>(.*?)</fin-streamer(.*)$} $html - volume html
  regexp {AVERAGE_VOLUME_3MONTH-value\">(.*?)</td>(.*)$} $html - avgvolume html
  regexp {\"MARKET_CAP-value\">(.*?)</td></tr>(.*)$} $html - marketcap html

  lappend qmap %w $52weeks %v $volume %g $avgvolume %m $marketcap


  set hmap [list "'" "'" "&amp;" "&" "&quot;" "\""]

  #### e f i j q s t u z ####

  #  %y  = company name      ex.  Apollo Minerals Limited (AON.AX)
  #  %x  = asx info  ??      ex.  ASX - ASX Delayed price. Currency in AUD
  #  %l  = last price        ex.  108.66
  #  %c  = price change      ex.  -0.08
  #  %p  = change percent    ex.  (-0.07%)
  #  %n  = market notice     ex.  As of  10:17AM AEDT. Market open.

  #  %r  = previous close    ex.  108.74
  #  %o  = open              ex.  108.74
  #  %b  = bid               ex.  108.66 x 36400
  #  %a  = ask               ex.  108.69 x 7100
  #  %d  = day's range       ex.  108.38 - 109.15
  #  %w  = 52-week range     ex.  86.98 - 109.20
  #  %v  = volume            ex.  3,747,153
  #  %g  = avg. volume       ex.  2,190,023
  #  %m  = market cap        ex.  183.463B

  #  %k  = nick              ex.  GreedyHamster
  #  %h  = channel           ex.  #MarketHub


  set say [list "$asx(logo)%y  \002%l AUD\002  Change: \002%c %p\002  %n"]

  set s "Previous close: \002%r\002  Open: \002%o\002  Bid: \002%b\002  "
  append s "Ask: \002%a\002  Day's range: \002%d\002  Market cap: \002%m\002"
  lappend say $s


  foreach ln $say {
    set ln [string map $qmap $ln]  ;   set ln [string map $hmap $ln]
    putserv "PRIVMSG $ch :$ln"
  }
  return 0
}


proc onsource {} {   variable asx
  set asx(chan) [split [string tolower [string trim $asx(chan)]]]
  set asx(companylist_filename) [string trim $asx(companylist_filename)]

  set asx(companydict) [dict create]
  if {[file exists $asx(companylist_filename)]} {
    set open [open $asx(companylist_filename) r]
    set asx(companydict) [read -nonewline $open]   ;  close $open
  }
}
onsource


putlog "Loaded ausStocks.tcl version 0.3  10Feb2023"

}  ;## end of:  namespace eval ausStocks ##


_________________
SpiKe^^

Get BogusTrivia 2.06.4.7 at www.mytclscripts.com
or visit the New Tcl Acrhive at www.tclarchive.org
.
Back to top
View user's profile Send private message Visit poster's website
rainman
Voice


Joined: 21 Apr 2021
Posts: 10

PostPosted: Tue Feb 14, 2023 4:49 am    Post subject: Re: ausStocks.tcl version 0.3 10Feb2023 Reply with quote

Thanks Spike once again man, you're an awesome coder Smile
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Requests All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber