Username or Email
Password
Remember me
Sign in
Sign up
Add Paste
Add Collection
You are not allowed to edit this paste! A fork will be created instead.
C/C++
CSS
HTML
Markdown
PHP
Python
Text
ABAP
ActionScript
ADA
Apache Conf
AsciiDoc
Assembly x86
AutoHotKey
BatchFile
BBCode
C9Search
Clojure
Cobol
CoffeeScript
ColdFusion
C#
Curly
D
Dart
Diff
Dot
Erlang
EJS
Forth
FreeMarker
Glsl
Go
Groovy
HAML
Handlebars
Haskell
haXe
HTML (Ruby)
INI
Jack
Jade
Java
JavaScript
JSON
JSONiq
JSP
JSX
Julia
LaTeX
LESS
Liquid
Lisp
LiveScript
LogiQL
LSL
Lua
LuaPage
Lucene
Makefile
MATLAB
MEL
MySQL
MUSHCode
Nix
Objective-C
OCaml
Pascal
Perl
pgSQL
Powershell
Prolog
Properties
Protobuf
R
RDoc
RHTML
Ruby
Rust
SASS
SCAD
Scala
Scheme
SCSS
SH
SJS
Space
snippets
Soy Template
SQL
Stylus
SVG
Tcl
Tex
Textile
Toml
Twig
Typescript
VBScript
Velocity
Verilog
XML
XQuery
YAML
# Musiclog - Post current / next song titles of some radio stations # to a particular IRC Channel. # Copyright (C) 2014 ManiacTwister < twister@s7t.de > # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see
. package require http package require json package require tdom set lastsong_886 "" set lastsong_oe3 "" set lastsong_wdr2 "" set lastsong_gotv "" set standalone false proc bgerror {s} { puthelp "PRIVMSG #musiclog :An error occured: $s" } proc sleep {N} { after [expr {int($N * 1000)}] } # Enable timer proc enable {} { global standalone if {!$standalone} { timer 1 run } else { sleep 5 run } } # Execution loop proc run {} { 886check oe3check wdr2check gotvcheck enable } proc 886check {} { global lastsong_886 set url [http::geturl http://www.radio886.at/cache/r886_joa.js] if {[http::status $url] == "ok"} { set data [string map {"window.r886_joa = " ""} [http::data $url]] set dict [json::json2dict $data] if {[dict exists $dict "next"]} { set next [saveGet $dict "next"] set currentsong [string trim [saveGet $next "titel"]] set interpret [string trim [saveGet $next "interpret"]] set start [saveGet $next "sec"] if { $lastsong_886 != $currentsong } { set lastsong_886 $currentsong postSong "\0030888.6\00300" $currentsong $interpret $start } } } else { return 1 } http::cleanup $url } proc oe3check {} { global lastsong_oe3 set url [http::geturl http://ms01.oe3.fm/oe3metafiles/RMX/RMWEB.PHP?Res=200&Format=json] if {[http::status $url] == "ok"} { #set data [string map {"\}]\})" "\}]\}"} [string map {"onair(" ""} [http::data $url]]] set data [http::data $url] set dict [json::json2dict $data] if {[dict exists $dict "SPIELLISTENELEMENT"]} { #set elements [dict get $dict "SPIELLISTENELEMENT"] #set song [lindex $elements end] foreach {songl} [saveGet $dict "SPIELLISTENELEMENT"] { if { [saveGet $songl "HINWEIS"] eq "ES FOLGT "} { set song $songl break } } if {[info exists song]} { set currentsong [string trim [saveGet $song "TITEL"]] set interpret [string trim [saveGet $song "INTERPRET"]] set start [saveGet $song "ZEIT"] if { $lastsong_oe3 != $currentsong } { set lastsong_oe3 $currentsong postSong "\00302OE3\00300" $currentsong $interpret $start } } } } else { return 1 } http::cleanup $url } proc wdr2check {} { global lastsong_wdr2 set url [http::geturl http://www.wdr2.de/musik/playlist_neu100-akkordeon-playlist.html] if {[http::status $url] == "ok"} { #set data [string map {"\}]\})" "\}]\}"} [string map {"onair(" ""} [http::data $url]]] set data [http::data $url] set doc [ dom parse -html $data ] set root [$doc documentElement] set node [$root selectNodes {//p}] set interpret [string map {":" ""} [$node selectNodes {string(//strong)}]] set currentsong [string trim [[$node lastChild] asHTML]] if { $lastsong_wdr2 != $currentsong } { set lastsong_wdr2 $currentsong postSong "\00304WDR2\00300" $currentsong $interpret 0 } } else { return 1 } http::cleanup $url } proc gotvcheck {} { global lastsong_gotv set url [http::geturl http://www.gotv.at/titel_load_data.asp] if {[http::status $url] == "ok"} { set data [http::data $url] set lines [split $data "\n"] foreach line $lines { ## Split into fields on colons set fields [split $line ":"] ## Assign fields to variables and print some out... lassign $fields \ key val if {$key eq "Artist_Next"} { set interpret $val continue } if {$key eq "Title_Next"} { set currentsong $val continue } } if {[info exists currentsong] && [info exists interpret]} { if { $lastsong_gotv != $currentsong } { set lastsong_gotv $currentsong postSong "\00314go\00315TV\00300" $currentsong $interpret 0 } } } else { return 1 } http::cleanup $url } proc postSong {station title interpret start} { global standalone if {$standalone} { puts stdout "$station: $title - $interpret (Starts: ~$start)" } else { puthelp "PRIVMSG #musiclog :$station: $title - $interpret (Starts: ~$start)" } } proc saveGet { dict key } { if { [catch { dict exists $dict $key } exist] } { bgerror "Invalid data received." return "" } else { if { $exist } { return [dict get $dict $key] } } return "" } if {!$standalone} { putlog "Musiclog geladen!" } # Start first execution enable
Private