Version 9 of minimalist wget

Updated 2012-12-29 10:16:37 by HJG

2004-10-29 VI This is a 10 line replacement for the far-more-capable wget program. This only works for http and just gets a url and puts it in a file. To invoke - have an alias like this:

 alias wget '/usr/local/tcl/8.4.7/bin/tclsh8.4 ~/tcltools/wget.tcl \!*'

And use it as

 wget http://wiki.tcl.tk/12871

Code for wget.tcl - only requires the tcl core:

  package require http

  set url [lindex $argv 0]
  set filename [file tail $url]
  set r [http::geturl $url -binary 1]

  set fo [open $filename w]
  fconfigure $fo -translation binary
  puts -nonewline $fo [http::data $r]
  close $fo

  ::http::cleanup $r
  puts "Got $url -> $filename"

male - 30th October 2004:

If the file should be written in binary mode, then the data should be requested and transferred as binary too!

I changed the code above to get the url in binary mode.

HJG Here is a variation to download a list of files:

  package require http

  puts "# Download playlists for webradio HR4 ..."

 #set url "http://playlist.hr-online.de/playlist/playlist.php?tpl=hr4&datum=2012-12-28&uhr=22"
  set D1 "2012-12-28"
  set FL {21 22 23} 
  foreach D2 $FL {
    set url "http://playlist.hr-online.de/playlist/playlist.php?tpl=hr4&datum=$D1&uhr=$D2"
    set filename "HR4_$D1\_$D2.htm"

 ## puts "URL=$url."
 ## puts "filename=$filename."

    set r  [http::geturl $url -binary 1]
    set fo [open $filename w]
    fconfigure $fo -translation binary
    puts -nonewline $fo [http::data $r]
    close $fo
    ::http::cleanup $r
    puts "Got $url -> $filename"
  }
  puts "# Done."