-
Notifications
You must be signed in to change notification settings - Fork 9
sourcefile
- The root keywords
- Keywords inside data_defs
- More about the data_defs
- Recognized data_def return-values
Go to the DataTreeGrab pages
Go to the DataTreeGrab data_def language page
Go to the data_def language URL extension
Go to the DataTreeGrab Glossary
Go to the DataTreeGrab Examples
Go to the xmltv.dtd
The core of tv_grab_py_API is the DataTreeGrab module. It manages all data retrieval, returning this data in a consistent way. A source file is a JSON dict consisting of several values used by tv_grab_py_API to identify and set-up the source and several DataTreeGrab data_defs defining how and what to fetch from that source. Under Allowed data_def return-values you can find a per data_def list of required/allowed return values. Tv_grab_py_API itself merges this data from the several source into one programme-listing and creates the xmltv outputfile.
These DataTreeGrab data_defs are:
- "channels": containing a data_def defining how to collect a list of the channels supplied by this source. Alternative it can contain a dict listing the available channels. It must return at least a "channelid" and a "name" for every channel and optional a (channel) "group", an "icon" (as a 2 part tuple) and whether it is an "HD" channel. If the channels are grouped on several pages (url-type 3, 7, 11 and 15) it also must contain a "fetch_grp".
- "base-channels": Like "channels", but it must contain a data_defs that is applicable to the base-pages. Normally it is only used when "channels" is absent, but if you have set the write_info_files debug option, instead of fetching a separate page this data_def is used to check on line-up changes.
- "base": containing a data_def defining how to collect the base programme information. The current list of allowed return keywords can be found in tv_grab_API.json under the "data_keys" keyword ordered by the expected data-type. Minimal a "start-time", a "stop-time", a "channelid" and a "name" must be returned.
- "detail": containing a data_def defining how to collect a detail-page. To enable detail-page fetching this source must be present in "detail_sources" and the "detail_processor" keyword must be set True in this file. It must in the root contain a "provides" keyword with a list of its return values. You should leave out "prog_ID", "start-time", "stop-time", "channelid" and "name" from this list.
- "detail2": containing an alternative data_def defining how to collect a detail-page. At present not activated.
At least "base" and either "channels" or "base-channels" must be present, except for the virtual source which should only have a "channels" data_def with a simple list of the supplied channels.
See More about the data_defs and keywords inside data_defs further down.
Any not required keyword can be ommited. The value given as default is then assumed.
- type: list of integer
- default: [1,0,0]
- As of version: 1.0.0
The API version this source file is written for and expecting.
- type: string
- default: None
- As of version: 1.0.0
The name of the sourcefile without the .json extension. It should consist of "source-" followed by the base url, e.g. "source-horizon.tv"
- type: string
- default: ""
- As of version: 1.0.0
A string to identify the source in log messages. Should normally be the base url.
- type: integer
- default: 0
- As of version: 1.0.0
The same version number as in sources
- type: dict|dict of dicts
- default: {}
- As of version: 1.0.0
Before the user enabled catrans function can be applied the genres as supplied by the several sources must be to some extend unified. Its format depends on the "cattrans type" set in sources:
- None: It is ignored
- 1: It should be a dict of dicts. The keywords from every item are the genres that can be found on this source. The containing dict has at least the "default" keyword containing a two part list of a genre and subgenre to use. If the subgenre is an empty string the on the source found subgenre is substituted. Next to the default item other items can be supplied. If any of those keywords matches the subgenre found the containing two part list of a genre and subgenre is in stead of the default item used.
- 2: It should be a dict, where the keywords are the subgenres found on the site and the values the genres that should get added.
- type: boolean
- default: False
- As of version: 1.0.0
Whether this source has detail-pages
- type: list of channelids
- default: []
- As of version: 1.0.0
Often a list of channels supplied by a site contains old IDs that do not contain any programme info or even raise an error. Those channelids can be added to this list.
- type: two char string
- default: "en"
- As of version: 1.0.0
- type: dict
- default: {}
- As of version: 1.0.0
This is a dict to translate rating values found on this site to the ones defined in rating. The keys are strings or chars found the values are the single char keys in rating.
- type: string
- default: "UTC"
- As of version: 1.0.0
The timezone used by this site for its start and stop times. It is copied into the data_defs as the timezone
- type: dict
- default: {}
- As of version: 1.0.0
Sometimes a source uses two (or even more) channelids for one listing if that is shared by more broadcasters depending on which one is broadcasting. Add all secondary channelids as keyword with a two part list as value consisting of the main channelid and the main name.
- type: dict
- default: {}
- As of version: 1.0.0
Only applicable to "cattrans type" 2 sources. Whenever an unknown subgenre is encountered it is checked for keywords and when one is encountered the associated genre is added. The keys in this dict are those keywords where the values are the genres.
- type: list of strings
- default: None
- As of version: 1.0.0
Just a text describing the file. It is not read.
- type: list
- default:
[None, ""] - As of version: 1.0.0
This is a DataTreeGrab value and is copied into the data_defs as empty-values. It is used to identify empty values. Some sites for instance use a "-" to indicate no data.
- type: boolean
- default: False
- As of version: 1.0.0
Marking this as the virtual source containing the virtual channels as set in combined_channels. There should only be one virtual source per grabber. It is a stripped source file in essence only containing a "channels" section defining the supplied chanids.
- type: integer
- default: 0
- As of version: 1.0.0
Some sites supply the data from the previous day till somewhere in the morning. Set this value to the hour the site generally starts supplying the data for the current day. Use the site-timezone.
- type: list of channelids
- default: []
- As of version: 1.0.0
In the old Dutch/Flemish grabber we also used a generic way on genre to catch some missed matches. This also gave a lot of false matches. This is a list of channelids to not apply generic matching on. As we have not implemented this generic matching mechanism in this API it is at present not used.
- type: boolean
- default: False
- As of version: 1.0.0
HTML pages often only supply a start-time without a date. The date for the page is found at some central place. This means some extra checking is needed on passing the midnight hour raising the date by one day.
Inside the data_defs some keywords deviating from the DataTreeGrab data_def language are recognized. All value_defs described below start their search at the start_node defined by the "init-path".
- data_def keyword(s): "base", "base-channels", "channels", "detail", "detail2"
- type: integer
- default: 0
- As of version: 1.0.0
url-type is an integer value, telling more about how the needed data should be retrieved. For all but the base-pages it should be set to 0. It consists of two values that are logically added telling how days are retrieved and how channels are retrieved.
For the channels
- 1: Every channel has its own page
- 2: All channels are together in one page. This can be either by default or by supplying a list of the wanted channels.
- 3: The channels are grouped on two or more pages. In this case the channels data_defs must return for every channel the group-page they are on through the "fetch_grp" keyword.
And for the days:
- 0: Every day has its own page
- 4: All days can be fetched on one single page
- 8: A set number of days is fetched, for instance a week from Monday till Sunday or starting today or 4 days starting today
- 12: Every fetch returns a set number of records
At present not all combinations are fully implemented or tested.
Values of (1, 2, 3, 6, 9, 13) have been tested.
A value of 5 should work.
Values of (7, 10, 11, 14, 15) won't work jet.
See the data_def language URL extension for more about the other available keywords.
- data_def keyword(s): "base"
- type: integer or 'week'
- default: None
- As of version: 1.0.0
This is for sites returning a set number of days (url-type 9, 10 and 11). You can either set the number of days starting from the requested day or use the keyword "week". In the latter case you can specify the first day of the week with: url-date-week-start.
- data_def keyword(s): "base"
- type: integer
- default: 1
- As of version: 1.0.0
This is for sites returning a set number of dayss (url-type 9, 10 and 11). It specifies the integer weekday any page starts from 0 to 6 where 0 is Sunday.
- data_def keyword(s): "detail", "detail2"
- type: list of keywords
- default: []
- As of version: 1.0.0
This is for detail pages. It should hold a list of the keywords it can return, so we can check on whether it could potentially add for the current programme to the already known values. If not we won't fetch it. Do not include "prog_ID", "start-time", "stop-time", "channelid" and "name".
- data_def keyword(s): "base", "base-channels", "channels", "detail", "detail2"
- type: list of list
- default: 14
- As of version: 1.0.2
This is a list of lists with two string values, where every incidence of the first found in the page should get replaced by the second before processing it with DataTreeGrab. This mostly for correcting known errors in the page. For instance one of the Dutch websites uses an indiscriminate search and replace to add links into their descriptions. When search-words are a subset of another, text inside the first added link also can get replaced, creating an invalid set. I use this to reverse it:
"text_replace":[
["<a href=\"/op-tv/[-a-z]*?\" title=\"[\\s\\w]*?\" class=\"inconspicuous\">([\\s\\w]*?)</a>", "\\g<1>"]],
It replaces any found link with just the text found in between the opening and closing tag.
- data_def keyword(s): "base"
- type: integer
- default: 14
- As of version: 1.0.0
The maximum number of days into the future that this source can supply. We never go further then 14 days as even when they do (like the rtl.nl site) it will not be reliable or complete. Also It can be that the source does not supply the same number of days for every channel. It is your choice on whether you set it to a value where every channel is covered or to the maximum value that it only covers for some channels.
- data_def keyword(s): "base"/"data"
- type: value_def
- default: None
- As of version: 1.0.0
Especially HTML sources often only give a start time for the programmes. They don't give a date or an end time. Also they do mostly not switch to the new day at midnight but somewhere later. Often there is a central place on the page with what the pages sees as the current date. This value_def should return this date value, so we can check if they have already made the day-switch. Only applicable to url-type 1, 2, and 3.
- data_def keyword(s): "base"/"data"
- type: value_def
- default: None
- As of version: 1.0.0
Similar as the previous but it should give the date this page covers. We haven't jet implemented it. You should point to it from your programme definition, so you can there combine it with the start time. There are some techniques to detect past midnight start times we will explain later. Only applicable to url-type 1, 2, and 3.
- data_def keyword(s): "base"
- type: integer
- default: 0
- As of version: 1.0.0
This is for sites returning a set number of records (url-type 13, 14 and 15). It should hold this integer number.
- data_def keyword(s): "base"/"data"
- type: value_def
- default: None
- As of version: 1.0.0
This is for sites returning a set number of records (url-type 13, 14 and 15). It should return from the page the total number of records your request count.
- data_def keyword(s): "base"/"data"
- type: value_def
- default: None
- As of version: 1.0.0
This is for sites returning a set number of records (url-type 13, 14 and 15). It should return from the page the current number of records returned on your request. We can use it to compare with default-item-count. If it is lower then we know we have reached the last page.
Primarily we point to the DataTreeGrab data_def language page for the syntax in these data_defs. Here we only focus on the extras. See also keywords inside data_defs for some add-ons. For the URLs we follow the data_def language URL extension and only use the default functions. For the data_def language Link extension we have defined some extra functions:
-
input:
- 0: a full url pointing to an channel-icon or logo
- output: a two part tuple
This function is for the "icon" keyword in "channels" and "base-channels".
It compares the start of the url on whether it matches any of the values in logo_provider. If a match is found it returns a two part tuple with first the second part of the URL and second the ID of the logo_provider. If no match is found ('',-1) is returned.
-
input:
- 0: a list of names or a comma separated string with names
- 1: a list with the coresponding roles or a single role as in roletrans
- 2: an optional list with the coresponding character an actor impersonates
- or:
- 0: a list of dicts with the key being a role in roletrans and the value a list or comma separated string of names.
- output: a credits dict as used by tv_grab_py_API
Extract roles from a set of lists or named dicts
An example from humo.be. First item 14, 15 and 16 of ["base"]["data"]["values"] and next the link_def in ["base"]["values"]
[{"key":"program"},
{"key":"credits"},
{"path":"all"},
{"key":"role","type":"list"}],
[{"key":"program"},
{"key":"credits"},
{"path":"all"},
{"key":"name","type":"list"}],
[{"key":"program"},
{"key":"credits"},
{"path":"all"},
{"key":"character","type":"list"}],
"credits":{"funcid":102, "data":[{"varid":15},{"varid":14},{"varid":16}], "default":{}},
A simpler version where you know what role is returned by {"varid":7}, {"varid":8} and {"varid":9}:
"director":{"funcid":102, "data":[{"varid":7},"director"], "default":{}},
"presenter":{"funcid":102, "data":[{"varid":8}, "presenter"], "default":{}},
"actor":{"funcid":102, "data":[{"varid":9},"actor"], "default":{}},
And here from the primo.eu detail pages {"varid":1} is a dict as a result from using the DataTreeGrab name keyword
[{"tag":"div", "attrs":{"class":null}},
{"tag":"label"},
{"path":"parent", "name":{"select":"text", "rstrip":":", "lower":""}},
{"tag":"span", "select":"text"}],
"credits":{"funcid":102, "data":[{"varid":1}]},
-
input:
- 0: a string, for instance the description or a list of strings
- 1: optionally a list or a single string to look for specifically. (those do not need to be followed by a ":")
- output: a credits dict as used by tv_grab_py_API
Extract roles from a string by looking for keywords.
The string is first scanned for words followed by a ":" and the strings given in data[1] and an itermediate dict with the following strings is returned. Next the keywords in this dict are compared with the role-names in roletrans.
An example where the description is scanned for credits:
"credits":{"funcid":103, "data":[{"varid":5}], "default":{}},
And looking for a specific keyword (meaning in english "with among others"):
"credits":{"funcid":103, "data":[{"varid":6}, "met oa"], "default":{}},
Process a rating item
-
input:
- 0: a string or list containing rating item(s)
- 1: optional the "as_list" keyword
- 2: an integer value defaulting to
1
- output: A rating list
Process a rating item
- If a string is offered and the "as_list" keyword is given the string is character by character searched for the keywords as given in the "rating" dict. Data[2] denotes the maximum length of sub-string that is looked for.
- If just a string is given that string is compared to the key values in "rating"
- If a list of strings is given every string is compared.
"rating":{"funcid":104, "data":[{"varid":10},"as_list", 2]}}},
-
input:
- 0: A dict of keywords and genres
- 1: the string to scan for the keywords.
- output: a Genre
Check the text in data[1] for the presence of keywords to determine genre
An example from oorboekje.nl: {"varid":0} is the name of the programme and {"varid":5} the description. {"varid":7} is a boolean indicating the presence of a logo for non-stop music. "funcid":7 returns data[1] if data[0] is True else data[2]
"genre":{"funcid":7, "data":[{"varid":7},"muziek",{"funcid": 105, "data":[
{"muziek": "muziek", "nieuws": "nieuws/actualiteiten", "sport": "sport", "actualiteiten": "nieuws/actualiteiten"},
{"varid":5}, {"varid":0}], "default": "overige"}]},
-
input:
- 0: A string value
- 1: An integer giving the length of the genric part
- output: A two part list containing genre and subgenre
split a genre code in a generic part of known length and a specific part
"genres":{"funcid":106, "data":[{"varid":8}, 5]},
-
input:
- 0: A dict
- 1: A list of known keywords
- output: None
Return a message to infofiles if a keyword in the data[0] dict is not in the data[1] list
Originaly 107 which is also accepted, but by moving it to a 200 number it won't give a warning as it does not return a value. It returns unlisted values to infofiles in a dict through the DataTreeGrab name keyword
"--log-unknown--":{"funcid":201, "data":[{"varid": 1},
["programmanaam","datum en tijd","zender","genre","synopsis","titel aflevering",
"nr. aflevering","seizoen","jaar","land","samenvatting","minimumleeftijd","rating"]]}
These are the keywords used for the link_defs as defined in the data_def language Link extension.
- Type: unique string
This should be the ID to identify the channel, either on a page containing multiple channels or in creating the URL to fetch this channels data.
- Type: string
The name of the channel used in the configuration and in the xmltv output. The name delivered by the prime_source is used. If the name delivered by the source is unsatisfactory (for example because it is old and has changed), you can set an alternative name in your grabber datafile
- Type: string
If this source orders the channels in group-pages, this is the string to identify the right group and used on creating the URL. Only relevant with url-type 3, 7, 11 and 15
- Type: Integer or None/null
- Default: As optionally set for this chanid through channel_grouping
It should be one of the groups defined in channel_groups. You also here can hard set a group like: "group":{"value": 11},. It rules several things also settable in your grabber datafile:
- The ordering in the configuration file, where the groups themselfs are ordered according to group_order
- The prime_source through prime_source_groups
- The language used for ttvdb look-ups through group language
- Whether any ttvdb lookup should be attempted through ttvdb disable groups. Radio stations and often also regional channels do not benefit from ttvdb look-up. So the groups containing those should be excluded.
- Type: Two part tuple or list
- Default: None
Use data_def link function 101 above to create this tuple from a full URL. If an icon for this channel is supplied in logo_names that will take precedence over any value suplied by any of the sources. Next for that channel all logo_sources in the order as set in "logo_source_preference" in tv_grab_API.json are checked for a valid icon, which then is used. Logo_sources not present in that list are added on start-up in ascending order.
You can set an alternative order in your logo_names
- Type: Boolean
- Default: False
If a channel has this set to True, the mark_hd option for this channel is set to True on running --configure and programmes that are marked as HD on retrieval get the HD flag set in the xmltv output. The user can if he whishes next disable this option.
- Type: Boolean
- Default: False
Some sites, instead of removing a channel from the channel list, mark channels as inactive. You can use this keyword. If it is True the channel will be ignored. If False or absent, the channel wil be added to the channel list.
The xmltv.dtd tags: language, org-language, length and review are not implemented.
When a programme is returned without a valid value for these, the API tries to fix it, by looking at neighbouring programmes. A missing name is treated as in between a gap and a groupslot. A missing channelid is fatal unless the source uses one page per channel, than the channelid to request the page is used. (url-type 1, 5, 9 and 13)
- Type: string
They ID within the source for this channel
- Type: String
- xmltv.dtd tag: title with language as lang attribute
The title of a programme
- Type: datetime
- xmltv.dtd tag:
The start time of the programme. See function 4 on combining an extracted time and date value. Use a date value of None/null to use the page-date in case of url-type 1, 2 or 3.
- Type: datetime
- xmltv.dtd tag:
The end time of the programme. See function 4 on combining an extracted time and date value. Use a date value of None/null to use the page-date in case of url-type 1, 2 or 3. Add in this function the start-time as reference time data[3]. If after combining the stop-time is before the start-time we assume passing midnight and we add a day to the stop-time. Page-wide this is for HTML pages handled by setting the without-full-timings keyword to True. All JSON pages I so far have encountered supply full datetime values, they only not always supply an end-time, in which case the last programme is thrown away. For the others after sorting the programmes, the start of the next one is used as stop-time.
- Type: String
Only Required for sources with detail pages and used to uniquely identify the programme. It usally is the ID used in the URL. If an ID covers more programmes like all news shows for that day then use "gen_ID" instead. In the future we'll add support for fetching detail pages through this "gen_ID", fetching it only once.
- Type: String
Only Required for sources with detail pages. It is the value used to construct the detail URL and often also the "prog_ID". However it sometimes next to the ID also for instance contains the title or so, which you can leave out for the "prog_ID".
- Type: datetime
An alternative to start-time in case the first one does not return a value. Sometimes you have two locations on the page you can retrieve the start-time. Put the more reliable in "start-time". You can also point it to the "stop-time" of the previous programme, unless it is a JSON page and the programmes are contained in a dict.
- Type: datetime
An alternative to stop-time in case the first one does not return a value. Sometimes you have two locations on the page you can retrieve the stop-time. Put the more reliable in "stop-time". You can also point it to the "start-time" of the next programme, unless it is a JSON page and the programmes are contained in a dict.
- Type: timedelta
The duration of the programme. If either "start-time" or "stop-time" is missing, it is used to calculate it from the other. This can be more reliable then using the start/stop from the neighbouring programme as there can be a gap in between.
- Type: String
- Default:
- xmltv.dtd tag:
See prog_ID
- Type: date
- Default:
- xmltv.dtd tag: date
If not present and premiere year is, that one is used.
- Type: String
- Default:
- xmltv.dtd tag: audio/stereo
Only added on it being set The actual value is not used. ("" means unset)
- Type: Boolean
- Default: False
- xmltv.dtd tag: video/color
On True a value of "no" is added, else it is ignored
- Type: String
- Default:
- xmltv.dtd tag:
Sometimes a channels shares multiple broadcasters. This string value, if present, is between "()" added to the start of the description.
- Type: dict or list
- Default:
- xmltv.dtd tag: credits/
<credit title>with optional role as attribute
It should be a dict with "director", "actor", "guest", "writer", "composer", "presenter", "reporter", "commentator", "adapter", "producer", "editor" as key and a list of names or name/role-name dicts as content. If you know the kind of credit use that as return-value and the list is enough. Use data_def link function 102 or 103 above to extract/format the list(s) if not already correctly returned.
- Type: list of two letter country codes
- Default:
- xmltv.dtd tag: country
We at precent only add the first country as we do not think any subsequent values will be read.
- Type: String
- Default:
- xmltv.dtd tag: desc with language as lang attribute
The values of subgenre and broadcaster are added to this string before adding it as desc to the xmltv output.
- Type: Integer
- Default: 0
- xmltv.dtd tag: episode-num with xmltv_ns as system attribute
A value of 0 means no value. If episode is not present (bigger then 0) season and episodecount are ignored. Set episode exclude genres to genres that should not include any season/episode numbering. MythTV will if present make it into a series, which you do not want for Sports or Movies.
- Type: String
- Default:
- xmltv.dtd tag: sub-title with language as lang attribute
- Type: Integer
- Default:
- xmltv.dtd tag: episode-num with xmltv_ns as system attribute
We assume this to be a count/season
- Type: String
- Default:
- xmltv.dtd tag: category
If the user has set the cattrans option, the genre together with the subgenre are translated through cattrans else this value is used with language as lang attribute. Use data_def link function 105 to try to extract/guess a genre from the description or title.
- Type: String or list
- Default:
- xmltv.dtd tag:
If you need to separate an item into genre/subgenre use this keyword and use data_def link function 106 to do the separating.
- Type: String
- Default:
Sometimes a group of programmes is marked for repeating through a time periode especialy the night. Any subsequent set of programmes with the same value set for "group" will be repeated into a following Gap.
- Type: Boolean
- Default: False
- xmltv.dtd tag: video/quality
On True a value of "hdtv" is added, else it is ignored. Needs the mark_hd user-option.
- Type: String
- Default:
- xmltv.dtd tag: url
Any url giving more info about the programme
- Type: Boolean
- Default: False
- xmltv.dtd tag: last-chance
Only used on value True
- Type: Boolean
- Default: False
- xmltv.dtd tag: new
Only used on value True
- Type: String
- Default:
- xmltv.dtd tag: title with the first value in country as lang attribute
If present it will be added as an extra title in another language.
- Type: Boolean
- Default: False
- xmltv.dtd tag: premiere
Only used on value True
- Type: String of four numbers
- Default:
- xmltv.dtd tag: date
Only used if airdate is not present
- Type: List
- Default:
- xmltv.dtd tag: rating with system set to the "name" value in rating
Use data_def link function 104 to translate source specific rating to grabber specific using the rating table.
- Type: Boolean
- Default: False
- xmltv.dtd tag: previously-shown
Only used on value True
- Type: Integer
- Default: 0
- xmltv.dtd tag: episode-num with xmltv_ns as system attribute
A value of 0 means no value. If episode is not present (bigger then 0) it is ignored. Set episode exclude genres to genres that should not include any season/episode numbering. MythTV will if present make it into a series, which you do not want for Sports or Movies.
- Type: String
- Default:
- xmltv.dtd tag: star-rating/value
This should be a value from 0 to 10 as used by themoviedb. We add it with "/10" attached. If needed we will add an option for this, but you can use DataTreeGrab functions to recalculate.
- Type: String
- Default:
- xmltv.dtd tag: keyword with language as lang attribute
If the user has set the cattrans option, the genre together with the subgenre are translated through cattrans. Further it is added to the start of the description. Sometimes the use a field alternating as some subgenre or as some kind of description. You then should limit its maximum length like: "subgenre":{"funcid":11, "data":[{"varid": 5}, "genre"], "max length":25},
- Type: Boolean
- Default: False
- xmltv.dtd tag: subtitles with the type set to teletext
Only used on value True We at present do not support other markers for subtitles.
- Type: Boolean
- Default: False
- xmltv.dtd tag: video/aspect
On True a value of "16:9" is added, else it is ignored
The values "group name", "offset", "org-genre", "org-subgenre" and "ttvdbid" are for internal use, they are added to the list in tv_grab_API.json as this also offers field names and types for the database.
They can contain all the above keywords as defined for base data_def, with none being required. However it is good practice to include at least "start-time", "stop-time", "channelid" and "name".
Add to the root of the data_def the keyword "provides" keyword with a list of its return values. You should leave out "prog_ID", "start-time", "stop-time", "channelid" and "name" from this list.
The Options
add_hd_id
add-ttvdb-title
always_use_json
cache
capabilities
cattrans
clean_cache
clear_cache
clear_ttvdb
compat
config_file
configure
days
desc_length
description
disable_detail_source
disable_source
disable_ttvdb
fast
global_timeout
group_active_channels
help
legacy_xmltvids
language
log_level
logos
long_descr
mark_HD
mail_log
mail_log_address
mailport
mailserver
match_log_level
max_overlap
max_simultaneous_fetches
nocattrans
nologos
offset
output_file
output_tz
output-windows-codeset
overlap_strategy
prefered_description
preferredmethod
prime_source
quiet
ratingstyle
save_options
show-detail-sources
show-logo-sources
show-sources
slow
slowdays
ttvdb_lookup_level as of 1.0.5
use-only-cache
utc
use_split_episodes
verbose
version
xmltvid_alias