Update the files to 2015. - sweb - Some web helper scripts.
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 3d0f86659c0642f60b856269d4ac91af4ea135db
 (DIR) parent ddb55dce90939a8fe1a3da65d0640bc5ec9570ca
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sun, 10 May 2015 19:55:46 +0200
       
       Update the files to 2015.
       
       Diffstat:
         LICENSE                             |       2 +-
         ddg                                 |      14 ++++++++++----
         di-p                                |      63 +++++++++++++++++--------------
         google                              |      12 +++++-------
         sky-p                               |       1 -
         xpath                               |      31 ++++++++++++++++++++-----------
         ydl                                 |       4 ++--
         ypl                                 |      12 ++++--------
       
       8 files changed, 77 insertions(+), 62 deletions(-)
       ---
 (DIR) diff --git a/LICENSE b/LICENSE
       @@ -1,6 +1,6 @@
        This software is
        
       -        © 2013 Christoph Lohmann <20h@r-36.net>
       +        © 2013-15 Christoph Lohmann <20h@r-36.net>
        
        See the following part of this file for the license details:
        
 (DIR) diff --git a/ddg b/ddg
       @@ -1,14 +1,15 @@
        #!/bin/sh
       -# See the LICENSE file for copyright and license details.
        
        if [ $# -lt 1 ];
        tthen
       -        echo "usage: `basename $0` search terms ..."
       +        printf "usage: %s search terms ...\n" "$(basename "$0")" >&2
                exit 1
        fi
        
       -search=`echo -n "$*" \
       -        | perl -p -e 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg'`
       +t[ -z "$PAGER" -o ! -t 1 ] && PAGER="cat"
       +
       +search="$(printf "%s" "$*" \
       +        | perl -p -e 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg')"
        
        curl -s --user-agent \
                "Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1" \
       @@ -16,6 +17,11 @@ curl -s --user-agent \
                "https://duckduckgo.com/html/" \
                | xpath -a href "//a[@href]" \
                | grep "^.*://" \
       +        | grep -v "https://duckduckgo.com" \
       +        | grep -v "http://r.duckduckgo.com" \
       +        | grep -v "http://ad.ddg.gg" \
       +        | grep -v ".r.msn.com" \
       +        | grep -v "^$" \
                | uniq \
                | head -n -7
        
 (DIR) diff --git a/di-p b/di-p
       @@ -1,6 +1,9 @@
       -#!/usr/bin/env python2
       +#!/usr/bin/python
        # coding=utf-8
       -# See the LICENSE file for copyright and license details.
       +#
       +# Copy me if you can.
       +# by 20h
       +#
        
        import sys
        import json
       @@ -10,7 +13,7 @@ import datetime
        import random
        import signal
        from subprocess import Popen
       -from urllib2 import urlopen, HTTPError
       +import requests
        from getopt import getopt, GetoptError
        
        def runstream(player, stream):
       @@ -22,24 +25,21 @@ def loadplaylistall():
                                "callback=_API_TrackHistory_getAll&_=%s"
        
                utim = time.mktime(datetime.datetime.now().timetuple())
       -        fd = urlopen(pluri % (utim))
       -        playlists = unicode(fd.read(), "iso-8859-1")
       +        fd = requests.get(pluri % (utim))
       +        playlists = str(fd.read(), "iso-8859-1")
                fd.close()
                playlists = playlists[playlists.index("(")+1:\
                                playlists.rindex(");")]
                playlist = json.loads(playlists)
        
       -        return playlist
       -
        def loadplaylist(ids):
                pluri = "http://api.v2.audioaddict.com/v1/di/track_history/"\
                                "channel/%s.jsonp?callback=_API_Track"\
                                "History_getChannel&_=%s"
        
                utim = time.mktime(datetime.datetime.now().timetuple())
       -        fd = urlopen(pluri % (ids, utim))
       -        playlists = unicode(fd.read(), "iso-8859-1")
       -        fd.close()
       +        fd = requests.get(pluri % (ids, utim))
       +        playlists = fd.text
                playlists = playlists[playlists.index("[{"):\
                                playlists.rindex(");")]
                playlist = json.loads(playlists)
       @@ -56,14 +56,14 @@ def usage(app):
        def main(args):
                try:
                        opts, largs = getopt(args[1:], "hai:p:dlnrs:uwy")
       -        except GetoptError, err:
       -                print str(err)
       +        except GetoptError as err:
       +                print(str(err))
                        usage(args[0])
                        sys.exit(1)
                
                uri = "http://listen.di.fm/public3"
        
       -        player = "mplayer -quiet -cache 512 -playlist"
       +        player = "mpv -quiet -cache 512 -playlist"
                debug = False
                listen = False
                plainlist = False
       @@ -100,20 +100,20 @@ def main(args):
                        elif o == "-y":
                                playlist = True
                        elif o == "-w":
       -                        whatson = True
       +                        whatson = True 
                        else:
                                assert False, "unhandled option"
                
                if len(largs) < 1 and listen != True and dorandom != True and \
       -                        doplaylist != True and whatson != True:
       +                        doplaylist != True and whatson != True and \
       +                        playlist != True:
                        sys.stderr.write("You need to specify the to be played "
                                        "stream. Please see -l for all available "
                                        "streams.\n")
                        usage(args[0])
        
       -        fd = urlopen(uri)
       -        streams = json.load(fd)
       -        fd.close()
       +        fd = requests.get(uri)
       +        streams = fd.json()
        
                streams = sorted(streams, key = lambda k: k["key"])
        
       @@ -135,41 +135,44 @@ def main(args):
        
                if whatson == True:
                        recentdata = loadplaylistall()
       -
                        for i in streams:
                                cplay = recentdata[str(i["id"])]
                                sys.stdout.write("%s\t%s\n" % (i["key"],\
                                        cplay["track"]))
       +
                        return 0
        
                if playlist == True:
       -                for i in streams:
       -                        if i["key"] != largs[0]:
       -                                continue
       -
       -                        playlist = loadplaylist(i["id"])
       +                def displayplaylist(playlist):
                                for song in playlist[::-1]:
                                        dates = datetime.datetime.fromtimestamp(
                                                        int(song["started"])).\
                                                strftime("%H:%M:%S")
                                        sys.stdout.write("[%s] %s\n" % (dates,\
                                                song["track"]))
       +
       +                for i in streams:
       +                        if i["key"] != largs[0]:
       +                                continue
       +
       +                        cplaylist = loadplaylist(i["id"])
       +                        displayplaylist(cplaylist)
                        return 0
        
                if listen == True:
                        if plainlist == True:
                                for i in streams:
       -                                print i["key"] 
       +                                print(i["key"]) 
                                return 0
        
                        if showuri == True:
                                for i in streams:
       -                                print i["playlist"]
       +                                print(i["playlist"])
                                return 0
        
                        for i in streams:
       -                        print "%s\t%s" % (i["key"], 
       -                                        i["description"])
       +                        print("%30s %s" % (i["key"], 
       +                                        i["name"]))
                        return 0
        
                stream = None
       @@ -186,6 +189,10 @@ def main(args):
                                " Please use -l for all available streams.\n")
                        return 1
        
       +        if showuri == True:
       +                print(("%s" % (stream["playlist"])))
       +                return 0
       +
                while 1:
                        p = runstream(player, stream)
                        sts = os.waitpid(p.pid, os.P_NOWAIT)[1]
 (DIR) diff --git a/google b/google
       @@ -1,21 +1,19 @@
        #!/bin/sh
       -# See the LICENSE file for copyright and license details.
       -
       -printf "You need to make this script work on your own. Google is"
       -printf " forbidding to scrape their website. You are doing this on"
       -printf " your own. One important detail is missing in this script.\n"
       -exit 1
        
        if [ $# -lt 1 ];
        tthen
                echo "usage: `basename $0` search terms ..."
       +        echo "Beware, that Google could filter the User-Agent!" \
       +                "Be prepared to change it!"
                exit 1
        fi
        
        search=`echo -n "$*" \
                | perl -p -e 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg'`
        
       -curl -s "https://encrypted.google.com/search?safe=off&q=${search}" \
       +curl -s --user-agent \
       +        "Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1" \
       +        "https://encrypted.google.com/search?safe=off&q=${search}" \
                | xpath -a href "//a[@href]" \
                | grep "^/url" \
                | sed 's,/url?q=,,' \
 (DIR) diff --git a/sky-p b/sky-p
       @@ -1,5 +1,4 @@
        #!/bin/sh
       -# See the LICENSE file for copyright and license details.
        
        di-p -i "http://listen.sky.fm/public3" "$@"
        
 (DIR) diff --git a/xpath b/xpath
       @@ -1,5 +1,8 @@
       -#!/usr/bin/env python2
       -# See the LICENSE file for copyright and license details.
       +#!/usr/bin/env python
       +#
       +# Copy me if you can.
       +# by 20h
       +#
        
        import os
        import sys
       @@ -7,14 +10,17 @@ import getopt
        from lxml import etree
        
        def getxpath(fd, xpath, attribute=None, encoding=None):
       -        parser = etree.HTMLParser(encoding=encoding)
       -        xml = etree.parse(fd, parser)
       -        sels = xml.xpath(xpath)
       +        try:
       +                parser = etree.HTMLParser(encoding=encoding)
       +                xml = etree.parse(fd, parser)
       +                sels = xml.xpath(xpath)
       +        except AssertionError:
       +                return None
        
                if attribute != None:
                        return "\n".join(["".join(i.attrib[attribute]) for i in sels])
        
       -        return "".join(["".join(i.itertext()) for i in sels])
       +        return "".join([("".join(i.itertext())).strip() for i in sels])
        
        def usage(app):
                app = os.path.basename(app)
       @@ -25,8 +31,8 @@ def usage(app):
        def main(args):
                try:
                        opts, largs = getopt.getopt(args[1:], "he:a:")
       -        except getopt.GetoptError, err:
       -                print str(err)
       +        except getopt.GetoptError as err:
       +                print(str(err))
                        usage(args[0])
        
                encoding = None 
       @@ -43,9 +49,12 @@ def main(args):
                
                if len(largs) < 1:
                        usage(args[0])
       -        
       -        sys.stdout.write(getxpath(sys.stdin, largs[0], attribute,
       -                encoding))
       +
       +        rpath = getxpath(sys.stdin, largs[0], attribute, encoding)
       +        if rpath == None:
       +                return 1
       +
       +        sys.stdout.write(rpath)
        
                return 0
        
 (DIR) diff --git a/ydl b/ydl
       @@ -1,5 +1,5 @@
        #!/bin/sh
       -# See the LICENSE file for copyright and license details.
        
       -cclive -f best "$1"
       +cd $HOME/search/youtube
       +yt -d "$@"
        
 (DIR) diff --git a/ypl b/ypl
       @@ -1,11 +1,7 @@
        #!/bin/sh
       -# See the LICENSE file for copyright and license details.
        
       -MCMD="mplayer %u"
       -if [ -z "$CACA_DRIVER" -a -z "$DISPLAY" ];
       -tthen
       -        export CACA_DRIVER=ncurses
       -        MCMD="mplayer -vo caca %u"
       -fi
       -quvi --exec "$MCMD" "$1"
       +t[ -z "$MEDIAPLAYER" ] && MEDIAPLAYER=mpv
       +mkdir -p $HOME/tmp/ytcache
       +cd $HOME/tmp/ytcache
       +youtube-dl --exec "${MEDIAPLAYER} {}" "$@"