xmltv 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +5 -0
- data/Manifest.txt +17 -0
- data/README.txt +123 -0
- data/Rakefile +18 -0
- data/bin/xmltv +13 -0
- data/lib/xmltv/sample/dumpids.rb +15 -0
- data/lib/xmltv/sample/mythtv_chns.yaml +183 -0
- data/lib/xmltv/sample/sample_output +73 -0
- data/lib/xmltv/sample/tvcat_spoolfiles.rb +29 -0
- data/lib/xmltv/sites/film1.rb +100 -0
- data/lib/xmltv/sites/rt.rb +133 -0
- data/lib/xmltv/sites/trivial.rb +33 -0
- data/lib/xmltv/sites/tvgids.rb +224 -0
- data/lib/xmltv/sites/tvtoday.rb +185 -0
- data/lib/xmltv/sites/upc.rb +157 -0
- data/lib/xmltv/sites/vpro.rb +122 -0
- data/lib/xmltv/xmltv.rb +737 -0
- metadata +89 -0
    
        data/History.txt
    ADDED
    
    
    
        data/Manifest.txt
    ADDED
    
    | @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            History.txt
         | 
| 2 | 
            +
            Manifest.txt
         | 
| 3 | 
            +
            README.txt
         | 
| 4 | 
            +
            Rakefile
         | 
| 5 | 
            +
            bin/xmltv
         | 
| 6 | 
            +
            lib/xmltv/sample/dumpids.rb
         | 
| 7 | 
            +
            lib/xmltv/sample/mythtv_chns.yaml
         | 
| 8 | 
            +
            lib/xmltv/sample/sample_output
         | 
| 9 | 
            +
            lib/xmltv/sample/tvcat_spoolfiles.rb
         | 
| 10 | 
            +
            lib/xmltv/sites/film1.rb
         | 
| 11 | 
            +
            lib/xmltv/sites/rt.rb
         | 
| 12 | 
            +
            lib/xmltv/sites/trivial.rb
         | 
| 13 | 
            +
            lib/xmltv/sites/tvgids.rb
         | 
| 14 | 
            +
            lib/xmltv/sites/tvtoday.rb
         | 
| 15 | 
            +
            lib/xmltv/sites/upc.rb
         | 
| 16 | 
            +
            lib/xmltv/sites/vpro.rb
         | 
| 17 | 
            +
            lib/xmltv/xmltv.rb
         | 
    
        data/README.txt
    ADDED
    
    | @@ -0,0 +1,123 @@ | |
| 1 | 
            +
            0. Introduction
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Xmltv consists of a single base grabber and a bunch of site specific grabbers.
         | 
| 4 | 
            +
            The base grabber provides:
         | 
| 5 | 
            +
            - a driver
         | 
| 6 | 
            +
            - option parsing
         | 
| 7 | 
            +
            - start/stop time fixing
         | 
| 8 | 
            +
            - xml production
         | 
| 9 | 
            +
            - helper functions that site specific grabbers might want to use
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Currently grabbers are included for radiotimes.com, tvtoday.de, tvgids.nl,
         | 
| 12 | 
            +
            upc.nl and film1.nl.
         | 
| 13 | 
            +
            Grabbers for other sites are (hopefully) easy to add.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            1. Installation.
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            First get Ruby and Hpricot.
         | 
| 18 | 
            +
            Then do 'gem install xmltv'
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            You could now run a site specific executable, e.g.:
         | 
| 21 | 
            +
            xmltv upc
         | 
| 22 | 
            +
            This will notice that there isn't yet any configuration for upc, and will fetch
         | 
| 23 | 
            +
            and display all available channels  and advice you to rerun the same command
         | 
| 24 | 
            +
            with the --add switch
         | 
| 25 | 
            +
            You the can do something like:
         | 
| 26 | 
            +
            xmltv upc --add 211,212,216,215,214
         | 
| 27 | 
            +
            (if you're a sports fan), and get back
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            Configured channels for upc
         | 
| 30 | 
            +
            211   Sport1
         | 
| 31 | 
            +
            212   Sport1+Extra
         | 
| 32 | 
            +
            216   Sport1+Extra+1
         | 
| 33 | 
            +
            215   Sport1+Extra+3
         | 
| 34 | 
            +
            214   Sport1+Extra+5
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            With --add and --del you can configure this grabber further.
         | 
| 37 | 
            +
            Other grabbers can be added in the same way
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            Then you can either run the individual grabbers, one at a time, or run:
         | 
| 40 | 
            +
            xmltv
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            which has the effect of running _all_ configured grabbers.
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            2. What it does.
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            The grabbers produce xmltv files in spool directories. The locations of these are
         | 
| 47 | 
            +
            configurable and overridable, but in the end that's all that the grabbers do at
         | 
| 48 | 
            +
            the moment.
         | 
| 49 | 
            +
            If you want to use these xmltv files for mythtv or something alike, you'll have
         | 
| 50 | 
            +
            to take care of that yourself. In the sample directory are some scripts I use
         | 
| 51 | 
            +
            for mythtv's mythfilldatabase but you'll have to edit these to make them useful.
         | 
| 52 | 
            +
            At the moment you cannot configure mythtv to call these grabbers: I'm quite
         | 
| 53 | 
            +
            willing to accept patches that add that ability, but I've never used any grabber
         | 
| 54 | 
            +
            in this way, and I'm too lazy to study the mythtv documentation.
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            3. What it does not do.
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            It doesn't add any <channel/> elements to the xmltv output files. It assumes you
         | 
| 59 | 
            +
            have those channels configured somehow.
         | 
| 60 | 
            +
            It also doesn't anything with icons. You don't need all this stuff for daily
         | 
| 61 | 
            +
            program updates.
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            4. Reasons why this is better than the Perl XMLTV suite
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            - Thanks to Hpricot, much more robust data gathering
         | 
| 66 | 
            +
            - DTD driven xml production
         | 
| 67 | 
            +
            - Shared code:
         | 
| 68 | 
            +
                Option parsing
         | 
| 69 | 
            +
                Xml generation
         | 
| 70 | 
            +
                Start/stop time corrections
         | 
| 71 | 
            +
                Configuration handling
         | 
| 72 | 
            +
                Cacheing services
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            5. Todo
         | 
| 75 | 
            +
            - Write documentation (rdoc)
         | 
| 76 | 
            +
            - Have it run under Windows and MacOS. I don't have any Windows machines or Macs
         | 
| 77 | 
            +
            myself and I didn't write anything with portability in mind (after all I wrote
         | 
| 78 | 
            +
            it for my own program listings) but it shouldn't be too hard.
         | 
| 79 | 
            +
            I understand Ruby converts forward slashes to whatever is needed anyway.
         | 
| 80 | 
            +
            Problem areas could be validation (which is a pipe through xmllint and tv_sort),
         | 
| 81 | 
            +
            and sending exceptions via mail.
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            6. What you need.
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            - Ruby obviously. I only tested under 1.8.6, but see no reason why it shouldn't
         | 
| 86 | 
            +
            run on older versions. Didn't try 1.9.0 either.
         | 
| 87 | 
            +
            - Hpricot. Just install the gem.
         | 
| 88 | 
            +
            - If you want to validate you need xmllint (part of libxml2) and tv_sort (part
         | 
| 89 | 
            +
            of the Perl XMLTV package).
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            7. Adding other grabbers.
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            There no documentation yet, but there are 5 example implementations that should
         | 
| 94 | 
            +
            help. The implemented sites are quite different as well:
         | 
| 95 | 
            +
            - radiotimes doesn't have html (but a lot of encoding errors)
         | 
| 96 | 
            +
            - film1.nl is so simple and small, there's no need for a cache. The structure of
         | 
| 97 | 
            +
            the site is quite different from the others, and shown is how to fake the normal
         | 
| 98 | 
            +
            pattern.
         | 
| 99 | 
            +
            - tvgids.nl and tvtoday.de resemble each other in structure a lot. Probably some
         | 
| 100 | 
            +
            extra code could be shared between these two, by deriving a subclass from
         | 
| 101 | 
            +
            grabber, called DetailGrabber, and then deriving these two from that.
         | 
| 102 | 
            +
            - gids.vpro.nl is dependent on cookies. Nice.
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            In general three thing have to be implemented:
         | 
| 105 | 
            +
            - Getting all available channels (almost always there is a useful <SELECT>
         | 
| 106 | 
            +
            element somewhere.)
         | 
| 107 | 
            +
            - Grabbing program information and sometimes extra details (Firebug is very much
         | 
| 108 | 
            +
            your friend here)
         | 
| 109 | 
            +
            - Transforming data from site-specific, error-prone raw data to a fixed
         | 
| 110 | 
            +
            structure the xml producer understands. 
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            8. Warning.
         | 
| 113 | 
            +
             | 
| 114 | 
            +
            There are people on the Perl XMLTV mailing list who think that grabbing from
         | 
| 115 | 
            +
            tvtoday.de might be illegal (in Germany). For that reason they withdrew the
         | 
| 116 | 
            +
            tvtoday grabber.
         | 
| 117 | 
            +
            If you think these people are right then don't use this implementation. I only
         | 
| 118 | 
            +
            wrote it to check if I had the underlying code ready for creating new grabbers.
         | 
| 119 | 
            +
            Writing and distributing this grabber isn't illegal in any way.
         | 
| 120 | 
            +
             | 
| 121 | 
            +
            Han Holl
         | 
| 122 | 
            +
             | 
| 123 | 
            +
             | 
    
        data/Rakefile
    ADDED
    
    | @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            # -*- ruby -*-
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'rubygems'
         | 
| 4 | 
            +
            require 'hoe'
         | 
| 5 | 
            +
            require './lib/xmltv/xmltv.rb'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Hoe.new('xmltv', XMLTV::VERSION) do |p|
         | 
| 8 | 
            +
              p.rubyforge_name = 'xmltv'
         | 
| 9 | 
            +
              p.author = 'Han Holl'
         | 
| 10 | 
            +
              p.email = 'hanholl@rubyforge.org'
         | 
| 11 | 
            +
              p.summary = 'fetches tv program data from various sites'
         | 
| 12 | 
            +
              p.description = p.paragraphs_of('README.txt', 1..1).join("\n\n")
         | 
| 13 | 
            +
              p.url = 'http://rubyforge.org/projects/xmltv'
         | 
| 14 | 
            +
              p.extra_deps = %w{ hpriocot }
         | 
| 15 | 
            +
            #  p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            # vim: syntax=Ruby
         | 
    
        data/bin/xmltv
    ADDED
    
    
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            #!/usr/bin/ruby
         | 
| 2 | 
            +
            require 'mysql'
         | 
| 3 | 
            +
            require 'pp'
         | 
| 4 | 
            +
            require 'yaml'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            DB = Mysql.new('localhost', 'mythtv', 'mythtv', 'mythconverg')
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            hash = Hash.new
         | 
| 10 | 
            +
            DB.query('select sourceid, xmltvid from channel').each do |rsl|
         | 
| 11 | 
            +
              hash[rsl[1]] = [ 'dummy', rsl[0]]
         | 
| 12 | 
            +
            end
         | 
| 13 | 
            +
            File.open('/tmp/sources.yaml', 'w') do |h|
         | 
| 14 | 
            +
            	h.puts hash.to_yaml
         | 
| 15 | 
            +
            end
         | 
| @@ -0,0 +1,183 @@ | |
| 1 | 
            +
            --- 
         | 
| 2 | 
            +
            nick.com: 
         | 
| 3 | 
            +
            - - 89.tvgids.nl
         | 
| 4 | 
            +
            - "2"
         | 
| 5 | 
            +
            mtv.nl: 
         | 
| 6 | 
            +
            - - 25.tvgids.nl
         | 
| 7 | 
            +
            - "2"
         | 
| 8 | 
            +
            at5.todo: 
         | 
| 9 | 
            +
            - - 40.tvgids.nl
         | 
| 10 | 
            +
            - "2"
         | 
| 11 | 
            +
            cnn.com: 
         | 
| 12 | 
            +
            - - 26.tvgids.nl
         | 
| 13 | 
            +
            - "2"
         | 
| 14 | 
            +
            arte-tv.com: 
         | 
| 15 | 
            +
            - - 38.tvgids.nl
         | 
| 16 | 
            +
            - "2"
         | 
| 17 | 
            +
            brabant.nl: 
         | 
| 18 | 
            +
            - - 114.tvgids.nl
         | 
| 19 | 
            +
            - "4"
         | 
| 20 | 
            +
            tv-oost.nl: 
         | 
| 21 | 
            +
            - - 111.tvgids.nl
         | 
| 22 | 
            +
            - "4"
         | 
| 23 | 
            +
            drenthe.nl: 
         | 
| 24 | 
            +
            - - 110.tvgids.nl
         | 
| 25 | 
            +
            - "4"
         | 
| 26 | 
            +
            choice.bbc.co.uk: 
         | 
| 27 | 
            +
            - - 45.rt.en
         | 
| 28 | 
            +
            - "4"
         | 
| 29 | 
            +
            knowledge.bbc.co.uk: 
         | 
| 30 | 
            +
            - - 47.rt.en
         | 
| 31 | 
            +
            - "4"
         | 
| 32 | 
            +
            prime.bbc.com: 
         | 
| 33 | 
            +
            - - 50.rt.en
         | 
| 34 | 
            +
            - "4"
         | 
| 35 | 
            +
            hollanddoc.vpro: 
         | 
| 36 | 
            +
            - - 309.upc.nl
         | 
| 37 | 
            +
              - HOL.vpro.nl
         | 
| 38 | 
            +
            - "4"
         | 
| 39 | 
            +
            zdf.de: 
         | 
| 40 | 
            +
            - - ZDF.tvtoday.de
         | 
| 41 | 
            +
            - "2"
         | 
| 42 | 
            +
            nationalgeographic.co.uk: 
         | 
| 43 | 
            +
            - - 18.tvgids.nl
         | 
| 44 | 
            +
            - "2"
         | 
| 45 | 
            +
            south-east.bbc1.bbc.co.uk: 
         | 
| 46 | 
            +
            - - 94.rt.en
         | 
| 47 | 
            +
            - "4"
         | 
| 48 | 
            +
            bbc1.bbc.co.uk: 
         | 
| 49 | 
            +
            - - 7.tvgids.nl
         | 
| 50 | 
            +
            - "2"
         | 
| 51 | 
            +
            tmf.nl: 
         | 
| 52 | 
            +
            - - 35.tvgids.nl
         | 
| 53 | 
            +
            - "2"
         | 
| 54 | 
            +
            tv5.org: 
         | 
| 55 | 
            +
            - - 17.tvgids.nl
         | 
| 56 | 
            +
            - "2"
         | 
| 57 | 
            +
            flevo.nl: 
         | 
| 58 | 
            +
            - - 113.tvgids.nl
         | 
| 59 | 
            +
            - "4"
         | 
| 60 | 
            +
            ketnet.be: 
         | 
| 61 | 
            +
            - - 6.tvgids.nl
         | 
| 62 | 
            +
            - "2"
         | 
| 63 | 
            +
            rijnmond.nl: 
         | 
| 64 | 
            +
            - - 102.tvgids.nl
         | 
| 65 | 
            +
            - "4"
         | 
| 66 | 
            +
            fryslan.nl: 
         | 
| 67 | 
            +
            - - 109.tvgids.nl
         | 
| 68 | 
            +
            - "4"
         | 
| 69 | 
            +
            4.film1.nl: 
         | 
| 70 | 
            +
            - - 4.film1.nl
         | 
| 71 | 
            +
            - "4"
         | 
| 72 | 
            +
            sbs6.nl: 
         | 
| 73 | 
            +
            - - 36.tvgids.nl
         | 
| 74 | 
            +
            - "2"
         | 
| 75 | 
            +
            utrecht.nl: 
         | 
| 76 | 
            +
            - - 100.tvgids.nl
         | 
| 77 | 
            +
            - "4"
         | 
| 78 | 
            +
            rtve.se: 
         | 
| 79 | 
            +
            - - 87.tvgids.nl
         | 
| 80 | 
            +
            - "2"
         | 
| 81 | 
            +
            talpa.tv: 
         | 
| 82 | 
            +
            - - 92.tvgids.nl
         | 
| 83 | 
            +
            - "2"
         | 
| 84 | 
            +
            3.film1.nl: 
         | 
| 85 | 
            +
            - - 3.film1.nl
         | 
| 86 | 
            +
            - "4"
         | 
| 87 | 
            +
            nederland2.omroep.nl: 
         | 
| 88 | 
            +
            - - 2.tvgids.nl
         | 
| 89 | 
            +
            - "2"
         | 
| 90 | 
            +
            rtl5.nl: 
         | 
| 91 | 
            +
            - - 31.tvgids.nl
         | 
| 92 | 
            +
            - "2"
         | 
| 93 | 
            +
            discoveryeurope.com: 
         | 
| 94 | 
            +
            - - 29.tvgids.nl
         | 
| 95 | 
            +
            - "2"
         | 
| 96 | 
            +
            thebox.org: 
         | 
| 97 | 
            +
            - - 91.tvgids.nl
         | 
| 98 | 
            +
            - "2"
         | 
| 99 | 
            +
            cartoon.com: 
         | 
| 100 | 
            +
            - - 21.tvgids.nl
         | 
| 101 | 
            +
            - "4"
         | 
| 102 | 
            +
            rtl4.nl: 
         | 
| 103 | 
            +
            - - 4.tvgids.nl
         | 
| 104 | 
            +
            - "2"
         | 
| 105 | 
            +
            eurosport.sky.com: 
         | 
| 106 | 
            +
            - - 19.tvgids.nl
         | 
| 107 | 
            +
            - "2"
         | 
| 108 | 
            +
            bbcworld.com: 
         | 
| 109 | 
            +
            - - 86.tvgids.nl
         | 
| 110 | 
            +
            - "2"
         | 
| 111 | 
            +
            tcm.com: 
         | 
| 112 | 
            +
            - - 20.tvgids.nl
         | 
| 113 | 
            +
            - "2"
         | 
| 114 | 
            +
            cultura.nl: 
         | 
| 115 | 
            +
            - - 317.upc.nl
         | 
| 116 | 
            +
            - "4"
         | 
| 117 | 
            +
            een.be: 
         | 
| 118 | 
            +
            - - 5.tvgids.nl
         | 
| 119 | 
            +
            - "2"
         | 
| 120 | 
            +
            bbc2.bbc.co.uk: 
         | 
| 121 | 
            +
            - - 8.tvgids.nl
         | 
| 122 | 
            +
            - "2"
         | 
| 123 | 
            +
            veronica.nl: 
         | 
| 124 | 
            +
            - - 34.tvgids.nl
         | 
| 125 | 
            +
            - "2"
         | 
| 126 | 
            +
            trt.net.tr: 
         | 
| 127 | 
            +
            - - 32.tvgids.nl
         | 
| 128 | 
            +
            - "2"
         | 
| 129 | 
            +
            zeeland.nl: 
         | 
| 130 | 
            +
            - - 116.tvgids.nl
         | 
| 131 | 
            +
            - "4"
         | 
| 132 | 
            +
            tvnoord.nl: 
         | 
| 133 | 
            +
            - - 108.tvgids.nl
         | 
| 134 | 
            +
            - "4"
         | 
| 135 | 
            +
            nederland1.omroep.nl: 
         | 
| 136 | 
            +
            - - 1.tvgids.nl
         | 
| 137 | 
            +
            - "2"
         | 
| 138 | 
            +
            gelderland.nl: 
         | 
| 139 | 
            +
            - - 112.tvgids.nl
         | 
| 140 | 
            +
            - "4"
         | 
| 141 | 
            +
            sport1.nl: 
         | 
| 142 | 
            +
            - - 211.upc.nl
         | 
| 143 | 
            +
            - "4"
         | 
| 144 | 
            +
            geschiedenis.vpro: 
         | 
| 145 | 
            +
            - - 310.upc.nl
         | 
| 146 | 
            +
              - GES.vpro.nl
         | 
| 147 | 
            +
            - "4"
         | 
| 148 | 
            +
            net5.nl: 
         | 
| 149 | 
            +
            - - 37.tvgids.nl
         | 
| 150 | 
            +
            - "2"
         | 
| 151 | 
            +
            rtl7.nl: 
         | 
| 152 | 
            +
            - - 46.tvgids.nl
         | 
| 153 | 
            +
            - "2"
         | 
| 154 | 
            +
            l1tv.nl: 
         | 
| 155 | 
            +
            - - 115.tvgids.nl
         | 
| 156 | 
            +
            - "4"
         | 
| 157 | 
            +
            tvwest.nl: 
         | 
| 158 | 
            +
            - - 101.tvgids.nl
         | 
| 159 | 
            +
            - "4"
         | 
| 160 | 
            +
            south-east.bbc2.bbc.co.uk: 
         | 
| 161 | 
            +
            - - 107.rt.en
         | 
| 162 | 
            +
            - "4"
         | 
| 163 | 
            +
            2.film1.nl: 
         | 
| 164 | 
            +
            - - 2.film1.nl
         | 
| 165 | 
            +
            - "4"
         | 
| 166 | 
            +
            nederland3.omroep.nl: 
         | 
| 167 | 
            +
            - - 3.tvgids.nl
         | 
| 168 | 
            +
            - "2"
         | 
| 169 | 
            +
            ard.de: 
         | 
| 170 | 
            +
            - - ARD.tvtoday.de
         | 
| 171 | 
            +
            - "2"
         | 
| 172 | 
            +
            raiuno.rai.it: 
         | 
| 173 | 
            +
            - - 27.tvgids.nl
         | 
| 174 | 
            +
            - "2"
         | 
| 175 | 
            +
            tvnrh.nl: 
         | 
| 176 | 
            +
            - - 103.tvgids.nl
         | 
| 177 | 
            +
            - "2"
         | 
| 178 | 
            +
            1.film1.nl: 
         | 
| 179 | 
            +
            - - 1.film1.nl
         | 
| 180 | 
            +
            - "4"
         | 
| 181 | 
            +
            mezzo.nl: 
         | 
| 182 | 
            +
            - - 73.tvgids.nl
         | 
| 183 | 
            +
            - "4"
         | 
| @@ -0,0 +1,73 @@ | |
| 1 | 
            +
            tvtoday: Removed 67 entries
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            2008-01-11: tvtoday                      prgs   hts  days  errs   bytes    rej
         | 
| 4 | 
            +
              05:02:24 ZDF    ZDF                    498    15    15     0   214444     0
         | 
| 5 | 
            +
              05:02:45 ARD    ARD                    515    15    15     0   218533     0
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            2008-01-11: rt                           prgs   hts  days  errs   bytes    rej
         | 
| 8 | 
            +
              05:02:53 94     BBC1 London & South East   465     1    14     2   279532     0
         | 
| 9 | 
            +
              05:03:01 107    BBC2 London & South East   503     1    15     0   301856     0
         | 
| 10 | 
            +
              05:03:04 45     BBC3                   189     1    15     0   144878     0
         | 
| 11 | 
            +
              05:03:07 47     BBC4                   139     1    15     0   102337     0
         | 
| 12 | 
            +
              05:03:16 50     BBC Prime              573     1    15     0   337125     0
         | 
| 13 | 
            +
            upc: Removed 4 entries
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            2008-01-11: upc                          prgs   hts  days  errs   bytes    rej
         | 
| 16 | 
            +
              05:03:22 309    Holland+Doc             46     2     8     0    84227     0
         | 
| 17 | 
            +
              05:03:26 310    /Geschiedenis           47     2     9     0    70822     0
         | 
| 18 | 
            +
              05:03:28 317    NPS+Cultura             32     2     1     0    12421     0
         | 
| 19 | 
            +
              05:03:30 211    Sport1                  19     2     2     0     5855     0
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            2008-01-11: film1                        prgs   hts  days  errs   bytes    rej
         | 
| 22 | 
            +
              05:03:38 1      Film1 1                 90     7     8     0    51509     0
         | 
| 23 | 
            +
              05:03:40 2      Film1 +1                90     0     8     0    51506     0
         | 
| 24 | 
            +
              05:03:42 3      Film1 2                 93     0     8     0    49632     0
         | 
| 25 | 
            +
              05:03:44 4      Film1 3                 90     0     8     0    50949     0
         | 
| 26 | 
            +
            tvgids: Removed 1360 entries
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            2008-01-11: tvgids                       prgs   hts  days  errs   bytes    rej
         | 
| 29 | 
            +
              05:04:37 1      Nederland 1            328    47     9    13   141936     1
         | 
| 30 | 
            +
              05:05:02 2      Nederland 2            299    40     9    20   166591     1
         | 
| 31 | 
            +
              05:05:33 34     Veronica               352    51     9     0    94799     0
         | 
| 32 | 
            +
              05:05:53 5      E?n                    241    33     9     0    84432     0
         | 
| 33 | 
            +
              05:06:23 6      KETNET/Canvas          347    46     9     0   112669     0
         | 
| 34 | 
            +
              05:07:05 3      Nederland 3            519    69     9    21   196135     0
         | 
| 35 | 
            +
              05:07:25 4      RTL 4                  249    32     9     7   129258     0
         | 
| 36 | 
            +
              05:07:47 7      BBC 1                  278    39     9     4   113613     3
         | 
| 37 | 
            +
              05:08:12 8      BBC 2                  286    40     9     2   121388     0
         | 
| 38 | 
            +
              05:08:33 17     TV 5                   269    36     9     0    58476     0
         | 
| 39 | 
            +
              05:08:50 18     National Geographic    228    28     9     0    59174     0
         | 
| 40 | 
            +
              05:08:59 19     Eurosport              122    14     9     0    34138     0
         | 
| 41 | 
            +
              05:09:09 20     TCM                    112    15     9     1    39730     0
         | 
| 42 | 
            +
              05:09:32 21     Cartoon Network        292    37     8     0    57141     0
         | 
| 43 | 
            +
              05:09:49 25     MTV                    194    27     9     0    48796     0
         | 
| 44 | 
            +
              05:10:06 26     CNN                    199    28     9     4    36240     0
         | 
| 45 | 
            +
              05:10:24 27     Rai Uno                198    27     9     0    46917     0
         | 
| 46 | 
            +
              05:10:42 29     Discovery Channel      220    29     9     0    68186     0
         | 
| 47 | 
            +
              05:10:58 31     RTL 5                  200    27     9     0    74434     0
         | 
| 48 | 
            +
              05:11:20 32     TRT int.               282    36     9     0    51836     0
         | 
| 49 | 
            +
              05:11:39 35     TMF                    221    30     9     0    53925     0
         | 
| 50 | 
            +
              05:11:57 36     SBS 6                  218    29     9    33    86888     1
         | 
| 51 | 
            +
              05:12:12 37     NET 5                  186    23     9    21   105293     0
         | 
| 52 | 
            +
              05:12:34 38     ARTE                   276    36     9     1    82944     0
         | 
| 53 | 
            +
              05:12:55 40     AT 5                   279    37     9     0    51707     0
         | 
| 54 | 
            +
              05:13:08 46     RTL 7                  160    18     9     3    67119     0
         | 
| 55 | 
            +
              05:13:21 73     Mezzo                  136    18     9     3    31387     0
         | 
| 56 | 
            +
              05:13:39 87     TV E                   221    29     9     1    47670     0
         | 
| 57 | 
            +
              05:14:01 89     Nickelodeon            298    40     9     1    55965     0
         | 
| 58 | 
            +
              05:14:32 91     Comedy Central         361    53     9     5    72189     0
         | 
| 59 | 
            +
              05:14:47 92     RTL 8                  176    25     9     0    66487     0
         | 
| 60 | 
            +
              05:14:54 103    TV NOORD-HOLLAND       118    13     8     6    16988     1
         | 
| 61 | 
            +
              05:15:01 100    REGIO TV UTRECHT        77    10     8     0    11200     1
         | 
| 62 | 
            +
              05:15:26 101    TV WEST                265    35     9     0    38844     0
         | 
| 63 | 
            +
              05:15:29 102    TV RIJNMOND             41     6     8     0     6065     1
         | 
| 64 | 
            +
              05:16:12 108    TV NOORD               608    70     9     0    89193     0
         | 
| 65 | 
            +
              05:16:19 109    OMROP FRYSLAN           87    12     8     0    12581     1
         | 
| 66 | 
            +
              05:16:28 110    TV DRENTHE             125    15     8     0    18243     1
         | 
| 67 | 
            +
              05:16:52 111    TV OOST                324    46     9     0    48253     0
         | 
| 68 | 
            +
              05:17:12 112    TV GELDERLAND          257    36     9     0    39658     0
         | 
| 69 | 
            +
              05:17:19 113    TV FLEVOLAND            96    13     8     0    13685     1
         | 
| 70 | 
            +
              05:17:29 114    OMROEP BRABANT TV      143    18     8     0    20960     0
         | 
| 71 | 
            +
              05:17:48 115    L1 TV                  268    32     9     0    37994     0
         | 
| 72 | 
            +
              05:18:04 116    OMROEP ZEELAND         192    30     8     0    27547     1
         | 
| 73 | 
            +
              05:18:23 86     BBC World              234    31     9     0    43575     0
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            #!/usr/bin/ruby -w
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'yaml'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            chns = YAML.load_file('/root/.xmltv/mythtv_chns.yaml')
         | 
| 6 | 
            +
            allspools = Dir["/root/.xmltv/*/spool/*.xml"]
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            tvcat = Hash.new {|h,v| h[v] = Array.new }
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            chns.each_pair do |xmltv, data|
         | 
| 11 | 
            +
              filenames, srcid = data
         | 
| 12 | 
            +
              filenames.each do |filename|
         | 
| 13 | 
            +
                source = filename.split('.')[1]
         | 
| 14 | 
            +
                full = "/root/.xmltv/#{source}/spool/#{filename}.xml"
         | 
| 15 | 
            +
                unless test(?f, full)
         | 
| 16 | 
            +
                  STDERR.puts "#{full} not found"
         | 
| 17 | 
            +
                else
         | 
| 18 | 
            +
                  tvcat[srcid] << full
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
                allspools.delete(full)
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
            allspools.each do |fn|
         | 
| 24 | 
            +
              STDERR.puts "#{fn} has no use"
         | 
| 25 | 
            +
            end
         | 
| 26 | 
            +
            tvcat.each_pair do |src, files|
         | 
| 27 | 
            +
              system "tv_cat #{files.join(' ')} >/video/tv-#{src}"
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
              
         | 
| @@ -0,0 +1,100 @@ | |
| 1 | 
            +
            #!/usr/bin/ruby -w
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            autoload :XMLTV, 'xmltv/xmltv'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            module XMLTV
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              class Film1Grabber < Grabber
         | 
| 9 | 
            +
                def initialize
         | 
| 10 | 
            +
                  super
         | 
| 11 | 
            +
                  @programs = nil
         | 
| 12 | 
            +
                  @all_channels = {
         | 
| 13 | 
            +
                    '1' => 'Film1 1',
         | 
| 14 | 
            +
                    '2' => 'Film1 +1',
         | 
| 15 | 
            +
                    '3' => 'Film1 2',
         | 
| 16 | 
            +
                    '4' => 'Film1 3'
         | 
| 17 | 
            +
                  }
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
                def fetch_all_channels
         | 
| 20 | 
            +
                  all_channels
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            #    def channel_list
         | 
| 24 | 
            +
            #      nil
         | 
| 25 | 
            +
            #    end
         | 
| 26 | 
            +
            #    def check_channel(chan_id)
         | 
| 27 | 
            +
            #      true
         | 
| 28 | 
            +
            #    end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              ### Helpers
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def fetch_programs
         | 
| 33 | 
            +
                  @programs = Hash.new
         | 
| 34 | 
            +
                  @n_progs = [ 0, 0, 0, 0]
         | 
| 35 | 
            +
                  %w{ sun mon tues wednes thurs fri satur }.each do |day|
         | 
| 36 | 
            +
                    url = "#{base_url}/tv/epg.php?day=#{day}day"
         | 
| 37 | 
            +
              #      url = '/home/han/epg.php'
         | 
| 38 | 
            +
                    page = fetch(url)
         | 
| 39 | 
            +
                    date = page.at('//span[@id="current"]').inner_text
         | 
| 40 | 
            +
                    STDERR.puts("#{url} #{date}")  if XmltvOptions.verbose
         | 
| 41 | 
            +
                    @programs[date] = day_hash = Hash.new
         | 
| 42 | 
            +
                    %w{ 1 2 3 4 }.each do |col|
         | 
| 43 | 
            +
                      day_hash[col] = colarray = Array.new
         | 
| 44 | 
            +
                      page.search("//div.epg_block").each do |dagdeel|
         | 
| 45 | 
            +
                        period = dagdeel.previous_sibling.inner_text.strip
         | 
| 46 | 
            +
                        dagdeel.search("//dl.col#{col}").each do |el|
         | 
| 47 | 
            +
                          el.search('dd').each do |pg|
         | 
| 48 | 
            +
                            program = Hash.new
         | 
| 49 | 
            +
                            program['period'] = period
         | 
| 50 | 
            +
                #            STDERR.puts pg.class, pg, '===='
         | 
| 51 | 
            +
                            info = pg.previous_sibling
         | 
| 52 | 
            +
                            %w{ time title genre short_info }.each do |inf|
         | 
| 53 | 
            +
                              program[inf] = info.at("/.#{inf}").inner_text.to_utf
         | 
| 54 | 
            +
                            end
         | 
| 55 | 
            +
                            program['desc'] = pg.children[3].to_s.strip.to_utf
         | 
| 56 | 
            +
                            @n_progs[col.to_i - 1] += 1
         | 
| 57 | 
            +
                            colarray << program unless program.empty?
         | 
| 58 | 
            +
                          end
         | 
| 59 | 
            +
                        end
         | 
| 60 | 
            +
                      end
         | 
| 61 | 
            +
                    end
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                end   
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              ###  Must Implement
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def grab_channel(chan_id)
         | 
| 68 | 
            +
                  fetch_programs unless @programs
         | 
| 69 | 
            +
                  @n_progs[chan_id.to_i - 1]
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                def transform(chan_id)
         | 
| 73 | 
            +
                  now = Time.new
         | 
| 74 | 
            +
                  jaar = now.year
         | 
| 75 | 
            +
                  progdata_array = Array.new
         | 
| 76 | 
            +
                  @programs.each_pair do |dag, schedule|
         | 
| 77 | 
            +
                    date = Date.dutch(dag)
         | 
| 78 | 
            +
                    jaar, maand, dag = date.year, date.month, date.day
         | 
| 79 | 
            +
                    schedule.each_pair do |ch, programs|
         | 
| 80 | 
            +
                      next unless ch == chan_id
         | 
| 81 | 
            +
                      programs.each do |p|
         | 
| 82 | 
            +
                        progdata = proghash(p, ch)
         | 
| 83 | 
            +
                        startuur, startmin, stopuur, stopmin = p['time'].split(/[:-]/).map{|x| x.to_i}
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                        progdata['start']  = Time.local(jaar, maand, dag, startuur, startmin)
         | 
| 86 | 
            +
                        progdata['start'] += Dag if p['period'] == 'nacht'
         | 
| 87 | 
            +
                        date_stats(chan_id, progdata['start'])
         | 
| 88 | 
            +
                        progdata['stop'] = Time.local(jaar, maand, dag, stopuur, stopmin)
         | 
| 89 | 
            +
                        progdata['stop'] += Dag if progdata['stop'] < progdata['start']
         | 
| 90 | 
            +
                        progdata['category'] = 'Movies'
         | 
| 91 | 
            +
                        progdata['credits']['actor'] = p['short_info'].split(',').map {|x| x.strip}
         | 
| 92 | 
            +
                        progdata_array << progdata
         | 
| 93 | 
            +
                      end
         | 
| 94 | 
            +
                    end
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
                  progdata_array
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
            end
         | 
| 100 | 
            +
            XMLTV::Film1Grabber.new.run
         |