TV_GRAB...TVGUIDE(1p)

πŸ“¦
version 1.2.1 Β· 2 versions
, in debian bookworm

πŸ’– TV_GRAB...TVGUIDE(1p) πŸ’–

okay bestie, sit down, hydrate, because we're about to talk about tv_grab_uk_tvguide, the little icon that grabs TV listings for the UK from the TVGuide website. this page is from the User Contributed Perl Documentation collection, and it's giving "cult classic that only three people know about but they're all obsessed". 🫢


✨ NAME ✨

tv_grab_uk_tvguide β€” grab TV listings for the UK from the TVGuide website. literally what it says on the tin, no cap. πŸ’…


🌸 SYNOPSIS 🌸

tv_grab_uk_tvguide --usage

tv_grab_uk_tvguide --version

tv_grab_uk_tvguide --configure [--config-file FILE] [--gui OPTION] [--method N]
                   [--makeignorelist FILE] [--useignorelist FILE] [--debug]

tv_grab_uk_tvguide [--config-file FILE] [--output FILE] [--days N]
                   [--offset N] [--nodetailspage]  [--legacychannels]
                   [--quiet] [--debug]

tv_grab_uk_tvguide --list-channels [--output FILE] [--method N] [--debug]

πŸ¦‹ DESCRIPTION πŸ¦‹

so what does this do? it outputs TV listings in XMLTV format for a whole bunch of channels available in the UK. the data comes from tvguide.co.uk β€” that's the source, periodt. 🌈

but first, first: you have to run tv_grab_uk_tvguide --configure to pick which channels you actually want. no channel choosing, no listings. that's the vibe check. πŸ‘‘

then, once you've done that, running tv_grab_uk_tvguide with no arguments gets you programme listings in XML format for the channels you chose, for the available days including today. chef's kiss. 😌✨


πŸŽ€ OPTIONS πŸŽ€

the full menu, no skips, no cuts:

  • --configure β€” prompts you for which channels to fetch the schedule for, and writes the configuration file. this is your "pick your faves" moment. πŸ’–
  • --config-file FILE β€” sets the name of the configuration file. the default is ~/.xmltv/tv_grab_uk_tvguide.conf. this is the file written by --configure and read when grabbing. so it's both the diary and the diary reader, iconic behaviour honestly.
  • --gui OPTION β€” use this to enable a graphical interface. OPTION may be 'Tk'. other allowed values of OPTION are 'Term' for normal terminal output (default), and 'TermNoProgressBar' to disable the use of Term::ProgressBar. (may not work on Windows OS. πŸ™ˆ)
  • --days N β€” grab N days. the default is 5 days.
  • --offset N β€” start N days in the future. the default is to start from today.
  • --nodetailspage β€” only fetch summary information for each programme. (there's a whole discussion below, keep reading. πŸ‘€)
  • --legacychannels β€” channel ids were made compliant with the XMLTV specification in December 2020. use --legacychannels to output channel ids in the previous format (i.e. number only). retro era, respect. πŸ•°οΈ
  • --output FILE β€” write to FILE rather than standard output.
  • --method N β€” this program has three methods for fetching the list of channels available. the preferred method can be overridden with an option of either --method 1 or --method 2 to use one of the two alternative methods.

if no --method parameter is supplied, then the various methods will be tried in sequence until a channels list is obtained. a parameter of --method 0 will run the preferred method only.

normally you should omit this parameter. fr fr, just leave it alone. 🧚

  • --makeignorelist FILE β€” the source channel list contains many channels which have no programme listings available. by using a local file of channel ids, these can be filtered out during the configure process. this option creates a list of channel ids which can be excluded from your config file.
makeignorelist can take over an hour to run, but you only need run it infrequently (not every time you run --configure). 😭 plan accordingly.
  • --useignorelist FILE β€” specify the file containing a list of channel ids to be removed during the configure stage.

this may be the file just created with --makeignorelist (e.g. --configure --makeignorelist myfile --useignorelist myfile).

  • --quiet β€” suppress the progress messages normally written to the console. shhh. 🀫
  • --debug β€” provide more information on progress to standard error to help in debugging.
  • --list-channels β€” output a list (in xmltv format) of all channels that can be fetched. the whole roster. πŸ“‹
  • --version β€” show the version of the grabber.
  • --usage β€” print a help message and exit.

🌈 INSTALLATION 🌈

the file tv_grab_uk_tvguide.map.conf has two purposes. two!! multi-talented. πŸ’…

Purpose one: you can map the channel ids used by the site into something more meaningful to your PVR. e.g.

map==74==BBC 1

will change "74" to "BBC 1" in the output XML.

Note: the lines are of the form "map=={channel id}=={my name}".

Purpose two: to likewise translate genre names. so if your PVR doesn't have a category for "Science Fiction" but uses "Sci-fi" instead, then you can specify

cat==Science Fiction==Sci-fi

and the output XML will have "Sci-fi".

IMPORTANT: the downloaded "tv_grab_uk_tvguide.map.conf" contains example lines to illustrate the format β€” you should edit this file to suit your own purposes! bestie, do not ship the example file as-is, that's not the move. 🚨

πŸ’€ ERROR HANDLING πŸ’€

if the grabber fails to download data for some channel on a specific day, it will print an error message to STDERR and then continue with the other channels and days. it does not give up, it simply carries on, main character energy. πŸ’ͺ

the grabber will exit with a status code of 1 to indicate that the data is incomplete. so if you see a 1, you know the tea is only half-brewed. 🍡


πŸ“ ENVIRONMENT VARIABLES πŸ“

the environment variable HOME can be set to change where configuration files are stored. all configuration is stored in $HOME/.xmltv/.

on Windows, it might be necessary to set HOME to a path without spaces in it. windows girlies, watch out for the spaces. πŸ™ˆ


πŸ‘‘ SUPPORTED CHANNELS πŸ‘‘

for information on supported channels, see http://tvguide.co.uk/


⭐ XMLTV VALIDATION ⭐

tv_validate_grabber may report an error similar to:

"Line 5 Invalid channel-id BBC 1"

this is because ValidateFile.pm insists the channel-id adheres to RFC2838 despite the xmltv.dtd only saying "preferably" not "SHOULD". (having channel ids of the form "bbc1.bbc.co.uk" will be rejected by many PVRs since they require the data to match their own list.)

it may also report:

"tv_sort failed on the concatenated data. Probably due to overlapping data between days."

Both these errors can be ignored. yes, both. breathe. πŸ§˜β€β™€οΈ


🌸 USING --nodetailspage 🌸

this option may be useful if you have problems accessing the tvguide website: it will considerably speed up your grabbing, but at the expense of data richness. the details page has a better list of actors, as well as director's names, film classifications, and background images.

more significantly, the details page includes programme duration and programme end time. if you don't include the details page then your output programmes will not have stop times. although stop times are an optional XMLTV element, many downstream programs expect them and break without them. 😭 so like, optional in theory, load-bearing in practice.

fortunately, these can be added by piping your xml file through the tv_sort filter: this will add stop times to all programmes except for the last programme on every channel. for example:

tv_grab_uk_tvguide --days 3 --nodetailspage | tv_sort --by-channel --output myprogrammes.xml
NOTE: as at January 2022 it seems the actor/director names and film classification is no longer present in the website, although it may be there for some channels(?). therefore you may find the --nodetailspage option useful to significantly reduce your run time. however, the details page does include background image(s) of the programme, which is not present in your xml file when using --nodetailspage.

πŸ¦‹ BE KIND πŸ¦‹

if using the details page from the website then your grabbing might benefit from a more targeted strategy, rather than blithely getting all days for all channels. be strategic, be chic. πŸ’…

since the published schedule rarely changes, a strategy of grabbing the next 3 days plus the 1 newest day would give you any new programmes as well as any last minute changes. simply fetch "--offset 0 --days 3" and concatenate it with a separate fetch of "--offset 7 --days 1".

for example:

( tv_grab_uk_tvguide --days 3 --offset 0 --output temp.xml ) && (
tv_grab_uk_tvguide --days 1 --offset 7 | tv_cat --output
myprogrammes.xml temp.xml - ) && ( rm -f temp.xml )

a similar strategy could be employed when using --nodetailspage if you have a lot of channels:

( tv_grab_uk_tvguide --days 3 --offset 0 --nodetailspage | tv_sort
--by-channel >temp.xml ) && ( tv_grab_uk_tvguide --days 1 --offset
7 --nodetailspage | tv_sort --by-channel | tv_cat --output
myprogrammes.xml temp.xml - ) && ( rm -f temp.xml )

this avoids overloading the TVGuide website, and significantly reduces your runtime with minimal impact on your viewing schedule.

TVGuide provide this data for free, so let's not abuse their generosity. 🫢 be the kind of user the internet deserves.

πŸ’œ DISCLAIMER πŸ’œ

the TVGuide website's license for these data does not allow non-personal use.

certainly, any commercial use of listings data obtained by using this grabber will breach copyright law, but if you are just using the data for your own personal use then you are probably fine.

by using this grabber you aver you are using the listings data for your own personal use only and you absolve the author(s) from any liability under copyright law or otherwise. read it, mean it, live it. πŸ’–


🧚 AUTHOR 🧚

Geoff Westcott. this documentation and parts of the code based on various other tv_grabbers from the XMLTV-project.


πŸŽ€ SEE ALSO πŸŽ€

xmltv(5).


and that's the whole page, bestie!! ✨ this doc shipped with perl v5.36.0 and is dated 2023-02-24 β€” so it's not exactly fresh out the group chat, but it still eats. go forth and grab your listings responsibly. πŸ’…πŸŒˆπŸ’–

πŸ“¦ where this page comes from