A service that translates from broadcast crids and dvb urls to resolvable programmes urls
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Resolve a crid


See Project Baird (spec: 
http://projectbaird.com/specs/draft-mcroberts-uri-resolver.html) for an 
explanation. It currently works only for BBC content, and in some cases 
only for the West regional variations. It's not yet complete with 
respect to the specification. You can find crids from newer versions of 
MythTV (programid in the program table). They are not the same as the 
crids in the BBC backstage data

Example queries using curl are below.


    * Only today's data is available
    * Duration is not implemented
    * BBC-related channels only
    * Regional variations are for the West
    * There are probably a bunch of bugs

Examples using Curl


If a url that's a crid is present, just go ahead and look up that, 
resolve to /programmes version.

curl "http://services.notu.be/resolve?uri\[\]=crid://fp.bbc.co.uk/5a6s49&fmt=rdf"

if you don't set the format using the accept header or fmt=rdf it 
resolves to the html version of the page, which itself is then resolved 
by the /programmes site to the Episode (rather than the Version) - you 
could equally use:

curl -H 'Accept: application/rdf+xml'

The same but following the redirect

curl -L "http://services.notu.be/resolve?uri\[\]=crid://fp.bbc.co.uk/5a6s49&fmt=rdf"

Result: 301, http://www.bbc.co.uk/programmes/b00tk8lm#programme

Dvb urls

If there's no crid, if there's a dvb url in the query, look up that, 
resolve to programmes

These follow the format: 

curl "http://services.notu.be/resolve?uri\[\]=dvb://233a.1041.1041;cde9~20100825T233500Z--PT00H05M00S&fmt=rdf"

Result: 301, http://www.bbc.co.uk/programmes/b00tk8lm#programme

Host and start time

If there's no dvb url and if the host header is present and matches the 
TVDNS format, and start is available as a parameter, resolve to 

curl -H "Host: 3098.1041.1041.233a.dvb.tvdns.net" "http://services.notu.be/resolve?start=2010-08-26T19:00:00Z"

Similarly, a transmisisonTime can be set, including defauling to now:

curl -H "Host: 3098.1041.1041.233a.dvb.tvdns.net" "http://services.notu.be/resolve?transmissionTime="

Eventid and Serviceid

If crid, dvb urls and start are not available, but eventid and serviceid 
are both present as parameters, resolve to programmes

curl "http://services.notu.be/resolve?serviceid=1041&eventid=cde9"

Result: 301, http://www.bbc.co.uk/programmes/b00tk8lm#programme
No Redirect

If you don't want it to redirect use noredirect=true as a parameter:

curl "http://services.notu.be/resolve?uri\[\]=crid://fp.bbc.co.uk/5a6s49&noredirect=true"

Programmes and Pips

These do not resolve, but just return the crid and dvb urls if 
available. Note that both versions and episodes will resolve.

Example of a working version programmes url

curl "http://services.notu.be/resolve?uri\[\]=http://www.bbc.co.uk/programmes/b00tk8lm#programme"

Example of a working programme Episode url

curl "http://services.notu.be/resolve?uri\[\]=http://www.bbc.co.uk/programmes/b00tk8my#programme"

Example of a tag url

curl "http://services.notu.be/resolve?uri\[\]=tag:feeds.bbc.co.uk,2008:PIPS:b00tk8lm"

How it works

I use a patched version of MythTV created by Mo, and a script runs on my machine once a day, uploading the crid and dvb mapppings to an RDF database, creating a 'sameAs' relationship between them. Meantime, a mini crawler runs nightly, grabbing the schedule and version data from /programmes for that day in RDF. The resolver does a variety of Sparql queries on the merged data to attempt to respond to requests, mostly matching on time and a hardcoded list of channel callsigns to urls mappings.

The code

The code is in github. It's fairly involved to set up and the 
documentation isn't complete - but these are very simple and work 
without setting up any RDF server, and could trivially be rewritten in 
python or whatever:


and you could easily implement the rest of it it without using RDF at all.

If you don't want to patch MythTV you can still get everything except 
the eventids - use exportdata.rb

Todays's crids

Are here: http://services.notu.be/crids