yahoogroups-reader - terminal application to read archived yahoogroups files from https://archive.org for instance these ones: https://archive.org/details/yahoo-groups-2016-04-23T12-23-47Z-6e2391
This command line application allows you to read old yahoogroup mailing lists if there were public at this time by downloading old archive files from https://archive.org using your terminal:
To read the group mailings you have to do the following
#!/usr/bin/env tclsh
package require json
proc processWarc {filename} {
set html_mapping {" {"} ' ' & & < < > > \ \\ ' '} ;#"
if {![file exists $filename]} {
return -code error "Error: File '$filename' does not exists!"
}
if [catch {open $filename r} infh] {
puts stderr "Cannot open $filename: $infh"
exit
} else {
set x 0
set flag null
while {[gets $infh line] >= 0} {
if {[regexp {^WARC-Target-URI.+group/([^/]+)/message/([0-9]+)/info} $line -> group msg]} {
#puts "Message: $group $msg"
set flag info
} elseif {[regexp {^WARC-Target-URI.+group/([^/]+)/message/([0-9]+)/raw} $line -> group msgid]} {
#puts "Message: $group $msg"
set json ""
} elseif {[regexp {^."topicId"} $line]} {
append json "$line\n"
set flag raw
} elseif {$flag eq "raw" && [regexp {[a-z]} $line]} {
append json "$line\n"
} elseif {$flag eq "raw" && [regexp {^WARC/} $line]} {
set d [json::json2dict $json]
set msgflag false
puts "[string repeat ## 40]\nMessage: $msgid"
foreach msg [split [dict get $d rawEmail] "\n"] {
if {[regexp {^Date: } $msg]} {
set msgflag true
}
if {$msgflag} {
set msg [string map $html_mapping $msg]
if {[regexp {=.$} $msg]} {
puts -nonewline "[string range $msg 0 end-2]"
} else {
puts $msg
}
}
}
set flag null
}
}
close $infh
}
}
if {[info exists argv] && [llength $argv] > 0} {
processWarc [lindex $argv 0]
} else {
puts "Usage: [info script] WARCFILE"
}Here a screenshot from the terminal:
Please discuss here.
DDG - 2023-03-30 - I could not find a tool which decodes in a usable way the JSON encoded messages, so I wrote my own.