Grabbers

Van MythTV.nl Wiki

Ga naar: navigatie, zoek

Inhoud

[bewerk] Introductie

Om Elektronische Programma Gids (EPG) informatie en eventueel zenderinformatie aan te kunnen bieden aan een media center bestaat het standaardprotocol XMLTV. Aangezien er in Nederland geen partijen zijn die de EPG in XMLTV-formaat aanbieden bestaan er 'grabbers'

Een grabber haalt informatie van een webpagina en zet deze informatie om naar XMLTV-formaat. De meeste grabbers in Nederland gebruiken www.tvgids.nl als bronsysteem, maar er zijn ook alternatieven.

Zorg ervoor dat je de XMLTV-software op je systeem hebt staan.

zenders - hier staat info over zenders in Nederland en hoe ze in mythTV te krijgen

Hieronder een overzicht van de grabbers die je in Nederland kunt gebruiken.

[bewerk] Overzicht grabbers

Indien je niet kunt kiezen tussen grabber en niet weet welke grabber je moet gebruiken, kijk dan even bij de gebruikers_ervaringen..

Naam Bronsysteem Onderhoud Cache Zenderlogo's Instelbaar dagen Categorie/Kleur imdb ondersteuning Code Opmerking
tv_grab_nl tvgids.nl minimaal Ja Nee Ja Nee Nee Perl Voorheen onderdeel van XMLTV pakket
tv_grab_nl_py tvgids.nl perfect Ja Ja Ja Ja Nee Python
tv_grab_upc upc.nl Uitstekend Ja Ja Ja Ja Ja Ruby Extra UPC zenders en erg snel
tv_grab_nl_gert xmltv.assies.info minimaal Ja Ja Nee Ja Nee Perl Feitelijk geen grabber maar een XMLTV data ontvanger!
tv_grab_nl_wolf wolf.xs4all.nl minimaal Nee Nee Ja Beperkt Nee Perl Voorheen onderdeel van XMLTV pakket. Feitelijk geen grabber maar een XMLTV data ontvanger!
tv_grab_nl_C tvgids.nl en/of upclive.nl goed Ja Ja Ja Ja Ja (star-rating) C compileren van source(make uitvoeren, evt. make install).
 Sinds juni 2011 geen actieve ontwikkeling meer. 
JavaXmlTvCore tvgids.nl goed Ja Ja Ja Ja Ja (star-rating) Java Very configurable. Produces xmltv xml file. Platform independent. KijkWijzer support.
mc2xml microsoft epg goed Ja Ja Ja Ja Nee Closed Gebruikt Microsoft als bron - closed source - bestaat vanaf zomer 08 - erg snel - geen config voor xmltvid
tv_grab_file een valide xmltv file goed nvt nvt nvt nvt nvt Opensource bash script Gebruikt een valide XMLTV file als "bron" en geeft deze 1 op 1 door aan een syteem dat deze wil ontvangen.

[bewerk] XMLTV-grabber installeren

Hieronder is beschreven hoe je de tv_grab_nl_py installeert.

- Download tvgrabnlpy

- Installatie van tvgrabnlpy bij de bron.

  • Download de laatste versie en hernoem deze zo nodig naar: tv_grab_nl_py
  • Maak een backup van je bestaande grabber: mv /usr/bin/tv_grab_nl /usr/bin/tv_grab_nl.backup
  • Maak een symlink naar de nieuwe grabber: ln -s /waar/ik/de/grabber/neerzet/tv_grab_nl_py /usr/bin/tv_grab_nl
  • Maak de grabber executable: chmod ugo+x /waar/ik/de/grabber/neerzet/tv_grab_nl_py

[bewerk] XMLTV-configuratiebestand aanmaken

  • Start MythTV Setup
  • Kies voor Video Sources.
  • Kies voor (Nieuwe videobron).

Er wordt nu eerst gezocht naar geïnstalleerde grabbers. Als je op dit punt geen nieuwe grabbers ziet behalve "North America" en "EIT" dan moet je eerst een "xmltv-util" pakket installeren: sudo apt-get install xmltv-util

Nadat dit klaar is, moet jij terug naar het begin van de vorige hoofdstuk (XMLTV-grabber installeren).

  • Naam videobron: Mijn videobron
  • Listings grabber: The Netherlands (tv_grab_nl_py...)
  • Klik op Beëindigen

Je krijgt onderstaande melding:

Uw grabber levert geen kanaalnummers, die moet u handmatig invoeren.

Dit klopt en is geen probleem; de kanaalnummers verschillen per regio. Verderop is beschreven hoe we de kanalen toevoegen.

Het kan zijn dat de lijst van geinstalleerde grabbers leeg blijft (behoudens de internal, transmitted en no grabber entries). Het probleem is dat Mythtv tegenwoordig met zoveel grabbers geinstalleerd komt dat het niet lukt deze allemaal te parsen binnen de gestelde timeout van ca 30 seconden. De oplossing hiervoor is veel ongebruikte tv_grab_xxx files uit /usr/bin te verwijderen en nogmaals te proberen.

[bewerk] Koppelen aan zenders (XMLTV ID)

Om de zenderindeling te koppelen aan de Elektronische Programma Gids (EPG) gebruikt mythTV een op XML gebaseerd TeleVisie IDentificatie nummer, ofwel een XML'TV'ID. De XMLTVID is een van de belangrijkste punten om de EPG goed te laten functioneren.


Helaas is de XMLTVID afhankelijk van de grabber die je gebruikt en maakt dit het lastig.


Algemeen

Elke grabber komt met een configuratiebestand waar de verschillende zenders in staan. Het configuratie bestand voor de grabber staat voor de meeste grabbers in ~./mythtv or ~./xmltv. In het configuratie bestand staan de zender en zendernummers zoals ze van het bronsysteem (bv tvgids.nl) afkomen.

Tip: tv_grab_nl_py gebruikt standaard ~/.xmltv/tv_grab_py.conf

Voorbeeld van een willekeurig aantal zenders:

cat tv_grab_py.conf

1 Nederland 1

2 Nederland 2

3 Nederland 3

4 RTL 4

36 SBS6

7 BBC 1

8 BBC 2

25 MTV


De nummers die je in het configuratiebestand ziet staan, zijn de XMLTVID. Je kunt ze in mythtv-setup bij de zenders invullen. Het nummer dat je hier ziet zegt niets over het kanaal nummer waarop de zender staat. Voorbeeld: MTV mag bij jou op zender 10 staat, terwijl de XMLTVID 25 is.


XMLTVID is de lijm tussen de zendertabel en de EPG die je van de grabber krijgt.


Hieronder volgt een voorbeeld mysql commando om een overzicht te krijgen van de zender tabel en de xml tv id's.

mysql commando:

mysql -uusername -ppassword mythconverg  -e 'SELECT chanid, channum, callsign, name, sourceid, freqid, xmltvid FROM `channel` ';

voorbeeld van een aantal kanalen uit mijn tabel, kijk naar xmltvid

+--------+---------+----------------------+-----------------------------+----------+--------+---------+
| chanid | channum | callsign             | name                        | sourceid | freqid | xmltvid |
+--------+---------+----------------------+-----------------------------+----------+--------+---------+
|      1 | 1       | Nederland 1          | Nederland 1                 |        1 | 768000 | 1       |
|      2 | 2       | Nederland 2          | Nederland 2                 |        1 | 776000 | 2       |
|      3 | 3       | Nederland 3          | Nederland 3                 |        1 | 784000 | 3       |
|      4 | 4       | RTL 4                | RTL 4                       |        1 | 752000 | 4       |
|      6 | 6       | SBS 6                | SBS 6                       |        1 | 736000 | 36      |
|     17 | 17      | BBC 1                | BBC 1                       |        1 | 648000 | 7       |
|     18 | 18      | BBC 2                | BBC 2                       |        1 | 656000 | 8       |
|     26 | 26      | MTV                  | MTV                         |        1 | 480000 | 25      |
+--------+---------+----------------------+-----------------------------+----------+--------+---------+


De XMLTVID's in de channel tabel van de mythconverg database moeten hetzelfde zijn als de nummers in het configuratie bestand van je grabber (bv tv_grab_py.conf)


De XMLTVID in de database kun je met 3 verschillende tools wijzingen:


1. mythtv-setup

Kies opties 5 channel editor en geef enter op een zender om XMLTVID te zien/wijzigen


2. mythweb

Zorg ervoor dat mythweb draait.

http://<<your IP address>>/mythweb/settings/tv/channels


3. phpMyAdmin

Zorg ervoor dat phpMyAdmin op je systeem staat en draait.

a) Selecteer mythconverg als database b) Selecteer de channel tabel c) Kies Browse

[bewerk] Automatisch toevoegen van kanalen met zendernummers (TVfreq)

Hieronder is beschreven hoe je geheel automatisch de kanalen voor jouw regio, mét zendernummers kunt toevoegen aan de MythTV-database met behulp van de online LauPro's TVfreq tool.

Download een zendertabel (channels.sql) voor jouw regio

Maak een zender-databestand aan via LauPro's TVFreq, de zenderoverzichtconfiguratieaanmaker.

Kies de juiste aanbieder en gemeente uit de lijst. Kies als exportformaat MythTV: channels.sql. Klik op Verder >> en vervolgens op Download. Bewaar het channels.sql-bestand in de ~/.mythtv-directory onder de originele bestandsnaam.

( De .mythtv is een verborgen directory en wellicht niet zichtbaar wanneer je gaat opslaan. Klik rechts in de opslaan als-dialoog en vink verborgen bestanden tonen aan. )

Map de xmltvid uit de zendertabel op de kanalenlijst van je grabber

mapxmltvid is een (php) scriptje dat de SQL code van channels.sql aanvult met de xmltvid's van je grabber (in Mijn videobron.xmltv) De uitvoer is channels.sql.out. Als je dit gebruikt, in plaats van channels.sql, dan heb je in één keer de namen en de xmltvid's in je mythtv database, zodat je zonder meer mythfilldatabase kunt draaien.


Ga op de commandline naar de .mythtv directory waar je net ook channels.sql hebt opgeslagen. In de setup is hier (door de grabber) achter de schermen een configuratiebestand aangemaakt (Mijn videobron.xmltv).

cd ~/.mythtv
ls channels.sql
ls Mijn\ videobron.xmltv   

Deze twee heb je allebei nodig.

Let op: het kan ook zijn dat je .xmltv bestand tv_grab_nl_py.xmltv heet! Maak in dat geval even een linkje:

ln -s tv_grab_nl_py.xmltv Mijn\ videobron.xmltv
ls -l ls Mijn\ videobron.xmltv

Haal nu het mapxmltvid script op en voer het uit. De uitvoer komt te staan in channels.sql.out.

sudo apt-get install php5-cli
wget http://nfvpinball.com/mythtv/mapxmltvid
chmod +x mapxmltvid
./mapxmltvid

Let op: soms worden niet alle namen gevonden! In dat geval kun je het mapxmltvid script aanpassen om de mapping van de kanaalnamen te veranderen. De niet gevonden namen worden niet toegevoegd aan channels.sql.out. Gevolg is dus dat deze channels dus niet kan kijken.

Merge de nieuwe en de oude channels.sql

Met dit tooltje van BozeWolf is het mogelijk de originele channels.sql met die van channels.sql.out te mergen. De channels die weggelaten zijn, door mapxmltvid, worden met dit script weer toegevoegd. De nieuw toegevoegde zender namen matchen nog niet met Mijn Videobron.xmltv en zullen dus geen tvgids ingeladen krijgen. Dit moet (nog) handmatig gefixed worden in phpmyadmin. Dit kun je doen door in de mythconverg database de channels tabel te editen.

wget http://mediaserver.koelkast.net/~roel/misc/mergechannelssql.py
chmod +x mergechannelssql.py
nano -w mergechannelssql.py

Check of deze gegevens naar het juiste bestand verwijzen.

sql = "./channels.sql"

sqlout = "./channels.sql.out"

newSQLout = "./channels-merged.sql"

sluit af met ctrl-W ctrl-X.

./mergechannelssql.py

Dit genereert channels-merged.sql. Deze kun je toevoegen aan je database. Bij duplicate entry warnings moet je eerst de channels table leeg maken. Dit doe je in MythTV BackEnd Stetup -> Channels -> Delete.

Toevoegen van de aangepaste zendertabel (channels-merged.sql aan de mythconverg database)
mysql -u mythtv -p mythconverg < channels-merged.sql
Controleren welke zenders niet herkend worden voor de tvgids

Voor het volgende commando uit:

mysql -u mythtv -p mythconverg -e "select chanid, callsign, name, xmltvid from channel;"

De tabel laat zien welke zenders bij welk xmltvid hoort. Op plekken waar xmltvid leeg is, is er geen gevonden. Kijk dan in Mijn\ videobron.xmltv welk nummer er voor dat kanaal staat. Voeg dit handmatig toe aan de channel table, via phpmyadmin, of door het kanaal op te zoeken en dan 'e' te drukken. In het vakje xmltvid kan het nummer ingevuld worden.

+--------+----------------------+------------------------------+---------+
| chanid | callsign             | name                         | xmltvid |
+--------+----------------------+------------------------------+---------+
|      1 | Nederland 1          | Nederland 1                  | 1       | 
|      2 | Nederland 2          | Nederland 2                  | 2       | 
|      3 | Nederland 3          | Nederland 3                  | 3       | 
|      4 | RTL 4                | RTL 4                        | 4       | 
|      5 | RTL 5                | RTL 5                        | 31      | 
|      6 | SBS 6                | SBS 6                        | 36      | 
|      7 | RTL 7                | RTL 7                        | 46      | 
|      8 | RTL 8                | RTL 8                        | 92      | 
|      9 | Net 5                | Net 5                        | 37      | 
|     10 | Veronica / Jetix     | Veronica / Jetix             | 34      | 
|     11 | Discovery Channel    | Discovery Channel            | 29      | 
|     12 | National Geographic  | National Geographic / CNBC   | 18      | 
|     13 | Animal Planet        | Animal Planet                | 65      | 
|     14 | Een                  | één                        | 5       | 
|     15 | Ketnet / Canvas      | Ketnet / Canvas              | 6       | 
|     16 | Nickelodeon / Comedy | Nickelodeon / Comedy Central | 91      | 
|     17 | Regio TV Utrecht     | Regio TV Utrecht             | 100     | 
|     18 | Eurosport            | Eurosport                    | 19      | 
|     19 | MTV                  | MTV                          | 25      | 
|     20 | Ziggo Service Kanaa  | Ziggo Service Kanaal         |         | 
|     21 | TMF                  | TMF                          | 35      | 
|     22 | BBC 1                | BBC 1                        | 7       | 
|     23 | BBC 2                | BBC 2                        | 8       | 
|     24 | ARD                  | ARD                          | 9       | 
|     25 | ZDF                  | ZDF                          | 10      | 
|     26 | Etalagekanaal        | Etalagekanaal                |         | 
|     27 | TV5 Monde            | TV5 Monde                    | 17      | 
|     28 | CNN International    | CNN International            | 26      | 
|     29 | BBC World            | BBC World                    | 86      | 
|     30 | Het Gesprek          | Het Gesprek                  | 84      | 
|     31 | Rai Uno              | Rai Uno                      | 27      | 
|     32 | ERT Sat              | ERT Sat                      | 28      | 
|     33 | arte                 | arte                         | 38      | 
|     34 | Stads TV Utrecht     | Stads TV Utrecht             |         | 
+--------+----------------------+------------------------------+---------+

[bewerk] Grabber testen

Hierbij halen we programma-informatie op voor een enkele zender. Vervolgens controleren we in MythTV of de informatie is opgenomen in de Electronische Porgrammagid (EPG).

  • Zenders uitschakelen

We wijzigen het XMLTV-configuratiebestand om er voor te zorgen dat er alleen van Nederland 1 informatie wordt opgehaald.

cd .mythtv
pico Mijn videobron.xmltv

Zet een # voor elke regel, behalve die met Nederland 1.

1 Nederland 1
#2 Nederland 2
#3 Nederland 3
#4 RTL 4
...
  • Programma-informatie ophalen
sudo /etc/init.d/mythbackend start
mythfilldatabase -v all --refresh-today

Dit kan even duren de eerste keer dat je informatie ophaalt. Als het te snel afloopt en jij geen "Now fetching Nederland 1" in de terminal-scherm ziet, dan is er iets fout. Controlleer of er in de ~/.mythtv map een bestand bestaat met hetzelfde naam als de "Video Source" (videobron.xmltv) die jij had aangemaakt in de Mythtv backend (zie "XMLTV-configuratiebestand aanmaken").

Uitleg van de flags:

-v all: verbose, laat alle messages zien, hier is zichtbaar op hoeveel % mythfilldatabase is.

--refresh-today: haal alleen de programma informatie van vandaag op.

Na afloop is de database gevuld met de programmering van Nederland 1 voor vandaag.


  • Controleren in MythTV

Starten MythTV

mythfrontend

Kies voor TV kijken, druk op M en kies vervolgens voor Programmagids.

Op de regel met Nederland 1 zie je nu de programmering met gekleurde blokken.

Als het bovenstaande gelukt is kun je het commentaar-teken (#) voor alle zenders waarin je geïnteresseerd bent weer weghalen en mythfilldatabase opnieuw uitvoeren.

[bewerk] Zender logo's

Zoals in je de grabber tabel kunt zien halen de meeste grabbers de logo's van de zenders automatisch voor je op. Indien je grabber dit niet voor je doet, kun je de logo's zelf downloaden en in ~/.mythtv/channels bewaren.

- Fambus logos

- TU Delft Paul

- Wobbo PNG Logo's

- Lyngsat Logo - Netherlands (Television)

- Lyngsat Logo - Netherlands (Radio)

[bewerk] IMDB waardering toevoegen aan de EPG

Een onderdeel van de XMLTV software is tv_imdb. De tv_imdb module kan de XMLTV informatie verrijken met informatie uit de Internet Movie Database. Hierdoor krijg je o.a. de waardering volgens imdb in je filmoverzicht en kun je b.v. selecties doen op waardering en/of acteurs.

- Internet Movie Database

STAP 1 - Maak een lokale kopie van de IMDB database
tv_imdb --imdbdir /myimdbdir --prepStage all --download


STAP 2 - Verander de mythfilldatabase procedure

Het volgende script gaat ervan uit dat je tv_grab_nl_py gebruik

/path_to_grabber/tv_grab_nl_py --output /tempdir/epg.xml --days 14
tv_imdb --imdbdir /myimdbdir --stats --quiet --output /tempdir/epg_imdb.xml /tempdir/epg.xml
mythfilldatabase --file 1 -1 /tempdir/epg_imdb.xml

= = Online TV Guides

Here is a list of online TV guides in Netherlands

Sjabloon:Web Sjabloon:Web www.tvgids.nl|TVGids.nl Sjabloon:Web www.tv-vanavond.nl|TV Vanavond Sjabloon:Web Sjabloon:Web Sjabloon:Web Sjabloon:Web Sjabloon:Web

[bewerk] Handige scripts en commandline voorbeelden

[bewerk] check epg dagen in db

SQL='SELECT TO_DAYS(max(endtime)) - TO_DAYS(now()) FROM program;'
EPG_DB_DAYS=`mysql -uuser -ppassword --skip-column-names -B -D mythconverg --execute "$SQL"`
if [ $EPG_DB_DAYS -lt 8 ];
then
  # mythfilldatabase ofzo
  echo "Grabber moet draaien"
else
  # alles is ok
  echo "$EPG_DB_DAYS dagen in de database."
fi

zie ook

- Mythvosd mythTV wiki page

[bewerk] filmoverzicht

mysql -uuser -ppassword mythconverg -e 'SELECT title, airdate, stars, starttime  FROM `program`  WHERE category_type = "movie"  ';

[bewerk] zender overzicht

mysql -uuser -ppassword mythconverg -e 'SELECT name, freqid, chanid, channum, xmltvid  FROM `channel`  WHERE sourceid = "1"  ';

[bewerk] opgenomen films

Overzicht opgenomen films en hun bestandsnamen

mysql -uuser -ppassword mythconverg -B --exec 'SELECT basename,title FROM `recorded` WHERE category = "movies" or category = "movie" ';

[bewerk] Dagelijkse download van tv_grab_nl_py

Het volgende script heet grab-tv_grab_nl_py.py. Ik heb besloten het shellscript grab-tv_grab_nl_py.sh van de vorige auteur te vervangen, omdat het niet meer werkte. Met een kleine wijziging was het wel weer werkend te krijgen, maar ik wilde een robuustere oplossing. Daarom heb ik besloten om van reguliere expressies (regex) gebruik maken. Ik vind dat ik met regex-en flexibeler kan werken en als er kleine wijzigingen in de webpagina van tv_grab_nl_py zijn, dan heeft dat geen gevolgen voor grab-tv_grab_nl_py.py.

Deze versie haalt de meest recente gepubliceerde versie op van tv_grab_nl_py:

#!/usr/bin/env python

import re

import urllib
import operator
import os
import stat
import shutil

# Read the page with all revisions of tv_grab_nl_py
f = urllib.urlopen("http://code.google.com/p/tvgrabnlpy/downloads/list")
page_content = f.read()

pat1 = "<a\s+href\s*=\s*['\"](.*tv_grab_nl_py[^'\"]+)"
prog1 = re.compile(pat1, re.IGNORECASE | re.MULTILINE)

# Get all urls to the *tv_grab_nl_py* files
file_urls = re.finditer(pat1, page_content)

filenames = []
# Create 3 values for each file: full url; filename only; revision number.
for file_url in file_urls: 
  filenames.append([file_url.group(1), file_url.group(1).split('/')[-1], int(re.search("-r([0-9]*)[^-r]*$", file_url.group(1)).group(1))])

# Sort the files by revision number
filenames = sorted(filenames, key=operator.itemgetter(2), reverse=True)
# print "Found latest revision: " + filenames[0][0]

if not os.path.exists("./" + filenames[0][1]):
  # Download file 
  webFile = urllib.urlopen(filenames[0][0])
  localFile = open(filenames[0][1], 'w')
  localFile.write(webFile.read())
  webFile.close()
  localFile.close()
  # Rename the damn thing to the normal filename, and make it executable :-)
  os.chmod(filenames[0][1], 0777)
  os.remove('tv_grab_nl_py')
  os.symlink(os.getcwd() + '/' + filenames[0][1], 'tv_grab_nl_py')

  # Print something fancy...
  print "Retrieved " + filenames[0][1] + " from Google Code and created a sym link to it as \"tv_grab_nl_py\"!"

# We're done...

Zet het script bijvoorbeeld in dezelfde directory als waar je tv_grab_nl_py had staan. Bij mij is dit /home/mythtvuser/.mythtv. Nu worden hier voortaan de nieuwste versie van tv_grab_nl_py gedownload met het revisienr in de naam (bv tv_grab_nl_py.py-r104). Vervolgens wordt hier een symbolic link aangemaakt die verwijst naar de laatste versie. Plaats in /etc/cron.daily een symlink naar grab-tv_grab_nl_py.py om automatisch iedere dag een check te doen voor de nieuwste versie.

LET OP: het script in deze vorm parkeert tv_grab_nl_py in de huidige directory --Michel 9 sep 2008 21:21 (CEST)

Als je tv_grab_nl_py op een andere plaats wilt hebben, wijzig dan de regel met os.symlink en os.remove. Plaats het pad vóór tv_grab_nl_py

Het dagelijks downloaden van tv_grab_nl_py kan m.i. (gjtv) een stuk eenvoudiger, maar let op dat dit de SubVersioN versie van de grabber download. Dit is mogelijk niet wat je altijd wilt!

#!/bin/sh

wget --quiet http://tvgrabnlpy.googlecode.com/svn/tv_grab_nl_py
# of als je provider geen wget ondersteunt maar wel curl:
#curl --silent http://tvgrabnlpy.googlecode.com/svn/tv_grab_nl_py > tv_grab_nl_py
chmod 755 tv_grab_nl_py

[bewerk] Gebruikers ervaringen

dec 2007 Moosy gebruikt tv_grab_nl_py, inclusief imdb waardering. Een script checked aantal dagen in DB voordat grabber draait. Indien er het aantal dagen in DB < 8 blijft dan update ik de grabber met een wget.

dec 2007 Michel gebruikt tv_grab_nl_py en is daar erg over te spreken. Binnenkort de imdb support even aanslingeren...

Aspecten/acties
Persoonlijke instellingen