Overground/tram/riverbus CUF timetables?

Does anyone know if there are CUF timetables available for overground, tram and riverbus services, like the timetables available here (http://timetables.data.tfl.gov.uk/) for underground services?

Welcome @mmcg

Yup, there are all in the big zip file

https://tfl.gov.uk/tfl/syndication/feeds/journey-planner-timetables.zip

The data in the link referenced by mmcg is zipped csv (and no updates since 02/2020)
The data in the ā€˜big zipā€™ is xml and is logically quite different in content.

Has the csv data been dropped?

I think youā€™ve answered your own question.

The timetables are in Siri-VM format which is a UK standardā€¦ Technical guidance: SIRI-VM - GOV.UK

Perhaps I was interpreting the question too literally.
OP asked for ā€˜like the timetables hereā€™, where ā€˜hereā€™ was a 2yo snapshot of the CUFF 4.1 specification and csv files.
The file(s) at https://tfl.gov.uk/tfl/syndication/feeds/journey-planner-timetables.zip seem very different both in content, as well as obviously in format (being xml).

It could be that csv format files are still available, but from a different URL
Or it could be that they are not, and any current data consumer has to support the big zip xml file format.
Your response suggests the latter, which is fine, but extra parsing required and some data elements no longer available.

Yes, itā€™s that bit. If you donā€™t want the buses, thereā€™s no actually that much data in it. I manage to pull the whole thing into RAM when Iā€™m processing them (xml is very verbose, isnā€™t it?)

Conceptially you can check the mode by just loading the XML into a DOM, and looking for Services->Service->Mode being the one you want. If you ignore ā€œbusā€ then you can get just the data you want. The DLR is ā€œrailā€ in this format.

    const ARRAYOFMODES = ["ferry", "underground", "rail", "tram", "bus"];

         $Mode = $this->getServiceTypeForThis();

     private function getServiceTypeForThis()
{
    return SearchDOMDocument::getSpecficValue($this->TransXChange, ["Services", "Service", "Mode"]);
}

I end up with these for my stopcounts (which are platforms)

mode count
tram 66
ferry 47
rail 75
underground 544

Example stop (Upminster Bridge Underground Station

{
"District": {
"Sunday": {
  "lineName": "District",
  "arrListOfTimes": [
    "16:38",
    "13:28",
    "16:48",
    "07:31",
    "13:38",
    "16:58",
    "13:48",
    "17:08",
    "23:07",
    "13:58",
    "17:18",
    "23:16",
    "14:08",
    "17:28",
    "23:26",
    "14:18",
    "17:38",
    "23:36",
    "14:28",
    "17:48",
    "23:43",
    "14:38",
    "17:58",
    "23:56",
    "11:28",
    "14:48",
    "18:08",
    "00:06",
    "14:58",
    "18:18",
    "11:48",
    "15:08",
    "18:27",
    "11:58",
    "15:18",
    "18:37",
    "21:56",
    "07:20",
    "07:41",
    "07:51",
    "08:01",
    "08:12",
    "12:08",
    "15:28",
    "18:47",
    "12:18",
    "15:38",
    "18:57",
    "12:28",
    "15:48",
    "19:07",
    "12:38",
    "15:58",
    "19:17",
    "12:48",
    "16:08",
    "12:58",
    "16:18",
    "19:37",
    "13:08",
    "16:28",
    "13:18",
    "08:41",
    "21:53",
    "08:53",
    "12:14",
    "15:34",
    "18:54",
    "22:13",
    "09:03",
    "12:24",
    "15:44",
    "19:04",
    "22:23",
    "09:13",
    "12:34",
    "15:54",
    "19:14",
    "22:33",
    "09:23",
    "12:44",
    "16:04",
    "19:24",
    "22:42",
    "09:33",
    "12:54",
    "16:14",
    "19:33",
    "22:52",
    "09:43",
    "13:04",
    "16:24",
    "19:43",
    "23:02",
    "09:53",
    "13:14",
    "16:34",
    "19:53",
    "23:12",
    "10:03",
    "13:24",
    "16:44",
    "20:03",
    "23:22",
    "10:13",
    "13:34",
    "16:54",
    "20:13",
    "23:32",
    "10:23",
    "13:44",
    "17:04",
    "20:23",
    "23:42",
    "10:34",
    "13:54",
    "17:14",
    "20:33",
    "23:52",
    "10:44",
    "14:04",
    "17:24",
    "20:43",
    "10:54",
    "14:14",
    "17:34",
    "20:53",
    "00:09",
    "11:04",
    "14:24",
    "17:44",
    "21:03",
    "00:22",
    "11:14",
    "14:34",
    "17:54",
    "21:13",
    "00:32",
    "11:24",
    "14:44",
    "18:04",
    "21:23",
    "11:34",
    "14:54",
    "18:14",
    "21:33",
    "11:44",
    "15:04",
    "18:24",
    "21:42",
    "08:32",
    "11:54",
    "15:14",
    "18:33",
    "12:04",
    "15:24",
    "18:44",
    "22:03",
    "00:06",
    "00:21",
    "23:51",
    "00:20",
    "07:11",
    "06:57",
    "13:52",
    "17:12",
    "08:02",
    "14:02",
    "17:22",
    "08:12",
    "14:12",
    "17:32",
    "14:22",
    "17:42",
    "11:12",
    "14:32",
    "17:52",
    "11:22",
    "14:42",
    "18:02",
    "11:32",
    "14:52",
    "18:12",
    "11:42",
    "15:02",
    "18:22",
    "22:17",
    "11:52",
    "15:12",
    "18:32",
    "12:02",
    "15:22",
    "18:42",
    "12:12",
    "15:32",
    "18:52",
    "12:22",
    "15:42",
    "12:32",
    "15:52",
    "22:27",
    "21:51",
    "23:01",
    "23:11",
    "22:37",
    "12:42",
    "16:02",
    "06:52",
    "12:52",
    "16:12",
    "07:02",
    "13:02",
    "16:22",
    "07:12",
    "13:12",
    "16:32",
    "07:22",
    "13:22",
    "16:42",
    "07:32",
    "13:32",
    "16:52",
    "07:42",
    "13:42",
    "17:02",
    "07:52",
    "22:52",
    "22:42",
    "19:07",
    "09:27",
    "12:47",
    "16:07",
    "19:27",
    "06:14",
    "09:37",
    "12:57",
    "16:17",
    "19:37",
    "06:24",
    "09:47",
    "13:07",
    "16:27",
    "19:47",
    "06:29",
    "09:57",
    "13:17",
    "16:37",
    "19:57",
    "06:44",
    "10:07",
    "13:27",
    "16:47",
    "20:07",
    "06:57",
    "10:17",
    "13:37",
    "16:57",
    "20:17",
    "10:27",
    "13:47",
    "17:07",
    "20:27",
    "07:17",
    "10:37",
    "13:57",
    "17:17",
    "20:37",
    "07:27",
    "10:47",
    "14:07",
    "17:27",
    "20:47",
    "07:37",
    "10:57",
    "14:17",
    "17:37",
    "20:57",
    "07:47",
    "11:07",
    "14:27",
    "17:47",
    "21:07",
    "07:57",
    "11:17",
    "14:37",
    "17:57",
    "21:17",
    "08:07",
    "11:27",
    "14:47",
    "18:07",
    "21:27",
    "08:17",
    "11:37",
    "14:57",
    "18:17",
    "21:37",
    "08:27",
    "11:47",
    "15:07",
    "18:27",
    "21:47",
    "08:37",
    "11:57",
    "15:17",
    "18:37",
    "21:57",
    "08:47",
    "12:07",
    "15:27",
    "18:47",
    "22:07",
    "08:57",
    "12:17",
    "15:37",
    "18:57",
    "09:07",
    "12:27",
    "15:47",
    "09:17",
    "12:37",
    "15:57",
    "19:17",
    "07:07",
    "07:13",
    "06:37",
    "10:52",
    "05:59",
    "05:39",
    "06:42",
    "01:07"
   ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLUEBY3",
  "strStopNameNotUnique": "9400ZZLUUPB1"
    },
"Saturday": {
  "lineName": "District",
  "arrListOfTimes": [
    "05:53",
    "08:46",
    "12:08",
    "15:28",
    "18:48",
    "00:44",
    "08:56",
    "12:18",
    "15:38",
    "18:58",
    "09:06",
    "12:28",
    "15:48",
    "19:08",
    "09:16",
    "12:38",
    "15:58",
    "19:18",
    "09:27",
    "12:48",
    "16:08",
    "19:28",
    "09:37",
    "12:58",
    "16:18",
    "19:38",
    "06:25",
    "09:47",
    "13:07",
    "16:28",
    "19:48",
    "09:58",
    "13:18",
    "16:38",
    "19:57",
    "10:08",
    "13:28",
    "16:48",
    "20:07",
    "23:26",
    "10:18",
    "13:38",
    "16:58",
    "20:17",
    "23:36",
    "07:04",
    "10:28",
    "13:48",
    "17:08",
    "20:27",
    "23:46",
    "07:16",
    "10:38",
    "13:58",
    "17:18",
    "20:36",
    "23:56",
    "10:48",
    "14:08",
    "17:28",
    "20:47",
    "00:06",
    "07:36",
    "10:58",
    "14:18",
    "17:38",
    "20:57",
    "00:16",
    "07:46",
    "11:08",
    "14:28",
    "17:48",
    "21:07",
    "00:25",
    "07:56",
    "11:18",
    "14:38",
    "17:58",
    "21:17",
    "00:36",
    "08:06",
    "11:28",
    "14:48",
    "18:08",
    "21:26",
    "08:16",
    "11:38",
    "14:58",
    "18:18",
    "21:36",
    "08:26",
    "11:48",
    "15:08",
    "18:28",
    "21:46",
    "08:36",
    "11:58",
    "15:18",
    "18:38",
    "21:56",
    "07:01",
    "06:11",
    "06:50",
    "20:03",
    "23:21",
    "20:33",
    "23:51",
    "12:14",
    "15:34",
    "18:53",
    "22:13",
    "09:03",
    "12:23",
    "15:44",
    "19:04",
    "22:22",
    "09:13",
    "12:34",
    "15:53",
    "19:14",
    "22:33",
    "09:22",
    "12:44",
    "16:04",
    "19:23",
    "22:43",
    "09:33",
    "12:53",
    "16:14",
    "19:34",
    "22:52",
    "09:43",
    "13:04",
    "16:23",
    "19:44",
    "23:03",
    "09:52",
    "13:14",
    "16:34",
    "19:53",
    "23:13",
    "06:35",
    "10:04",
    "13:23",
    "16:43",
    "10:14",
    "13:34",
    "16:53",
    "20:13",
    "23:32",
    "10:23",
    "13:44",
    "17:04",
    "20:22",
    "23:42",
    "07:13",
    "10:34",
    "13:53",
    "17:13",
    "07:23",
    "10:44",
    "14:04",
    "17:23",
    "20:45",
    "07:33",
    "10:53",
    "14:14",
    "17:34",
    "20:52",
    "00:09",
    "07:43",
    "11:04",
    "14:23",
    "17:44",
    "21:05",
    "00:19",
    "07:53",
    "11:14",
    "14:34",
    "17:53",
    "21:13",
    "00:30",
    "08:03",
    "11:23",
    "14:44",
    "18:04",
    "21:24",
    "00:43",
    "08:13",
    "11:34",
    "14:53",
    "18:14",
    "21:33",
    "08:22",
    "11:44",
    "15:04",
    "18:23",
    "21:43",
    "00:56",
    "08:33",
    "11:53",
    "15:14",
    "18:34",
    "21:52",
    "08:43",
    "12:04",
    "15:23",
    "18:44",
    "22:03",
    "06:55",
    "08:52",
    "00:11",
    "00:35",
    "20:32",
    "20:52",
    "21:12",
    "07:25",
    "23:13",
    "23:26",
    "23:33",
    "23:45",
    "06:02",
    "09:22",
    "12:42",
    "16:02",
    "19:22",
    "06:11",
    "09:32",
    "12:52",
    "16:12",
    "19:32",
    "06:22",
    "09:42",
    "13:02",
    "16:22",
    "19:42",
    "06:32",
    "09:52",
    "13:12",
    "16:32",
    "19:52",
    "06:42",
    "10:02",
    "13:22",
    "16:42",
    "20:02",
    "06:52",
    "10:12",
    "13:32",
    "16:52",
    "20:12",
    "07:02",
    "10:22",
    "13:42",
    "17:02",
    "20:22",
    "07:12",
    "10:32",
    "13:52",
    "17:12",
    "20:32",
    "07:22",
    "10:42",
    "14:02",
    "17:22",
    "20:42",
    "07:32",
    "10:52",
    "14:12",
    "17:32",
    "20:52",
    "07:42",
    "11:02",
    "14:22",
    "17:42",
    "21:00",
    "07:52",
    "11:12",
    "14:32",
    "17:52",
    "21:12",
    "08:02",
    "11:22",
    "14:42",
    "18:02",
    "21:20",
    "08:12",
    "11:32",
    "14:52",
    "18:12",
    "21:32",
    "08:22",
    "11:42",
    "15:02",
    "18:22",
    "21:40",
    "08:32",
    "11:52",
    "15:12",
    "18:32",
    "21:52",
    "08:42",
    "12:02",
    "15:22",
    "18:42",
    "08:52",
    "12:12",
    "15:32",
    "18:52",
    "05:41",
    "09:02",
    "12:22",
    "15:42",
    "19:02",
    "05:51",
    "09:12",
    "12:32",
    "15:52",
    "19:12",
    "17:17",
    "20:37",
    "17:47",
    "21:04",
    "09:27",
    "23:17",
    "23:40",
    "12:47",
    "16:07",
    "19:27",
    "22:47",
    "06:17",
    "09:37",
    "12:57",
    "16:17",
    "19:37",
    "22:57",
    "09:47",
    "13:07",
    "16:27",
    "19:47",
    "23:04",
    "06:37",
    "09:57",
    "13:17",
    "16:37",
    "19:57",
    "06:47",
    "10:07",
    "13:26",
    "16:47",
    "20:07",
    "06:57",
    "10:17",
    "13:37",
    "16:57",
    "20:17",
    "07:07",
    "10:27",
    "13:47",
    "17:07",
    "20:27",
    "07:17",
    "10:37",
    "13:57",
    "07:27",
    "10:47",
    "14:07",
    "17:27",
    "20:47",
    "07:37",
    "10:57",
    "14:17",
    "17:37",
    "20:57",
    "07:47",
    "11:07",
    "14:27",
    "07:57",
    "11:17",
    "14:37",
    "17:57",
    "21:17",
    "08:07",
    "11:27",
    "14:47",
    "18:07",
    "21:24",
    "04:56",
    "08:17",
    "11:37",
    "14:57",
    "18:17",
    "21:37",
    "05:13",
    "08:27",
    "11:47",
    "15:07",
    "18:27",
    "21:44",
    "05:21",
    "08:37",
    "11:57",
    "15:17",
    "18:37",
    "21:57",
    "05:26",
    "08:47",
    "12:07",
    "15:27",
    "18:47",
    "22:07",
    "05:35",
    "08:57",
    "12:17",
    "15:37",
    "18:57",
    "22:17",
    "05:42",
    "09:07",
    "12:27",
    "15:47",
    "19:07",
    "22:27",
    "09:17",
    "12:37",
    "15:57",
    "19:17",
    "06:03",
    "05:45",
    "06:07",
    "06:27",
    "07:13",
    "05:57",
    "06:33",
    "06:53",
    "22:37",
    "05:57"
  ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLUEBY3",
  "strStopNameNotUnique": "9400ZZLUUPB1"
},
"MondayToFriday": {
  "lineName": "District",
  "arrListOfTimes": [
    "19:35",
    "19:46",
    "17:59",
    "21:34",
    "09:34",
    "18:18",
    "21:49",
    "09:36",
    "18:36",
    "10:01",
    "19:01",
    "10:50",
    "19:55",
    "08:45",
    "20:59",
    "00:27",
    "19:22",
    "09:23",
    "19:46",
    "07:22",
    "06:31",
    "20:48",
    "00:07",
    "10:59",
    "20:56",
    "00:17",
    "08:07",
    "18:29",
    "21:55",
    "18:47",
    "12:08",
    "15:28",
    "12:18",
    "15:37",
    "12:28",
    "15:47",
    "09:02",
    "12:38",
    "21:22",
    "05:56",
    "12:58",
    "16:16",
    "13:08",
    "16:22",
    "09:44",
    "13:18",
    "16:39",
    "20:15",
    "23:37",
    "15:54",
    "12:48",
    "16:07",
    "13:28",
    "16:47",
    "20:19",
    "23:47",
    "10:07",
    "13:36",
    "16:54",
    "10:20",
    "13:48",
    "17:09",
    "20:35",
    "10:30",
    "13:58",
    "17:18",
    "10:39",
    "14:08",
    "14:18",
    "11:04",
    "14:28",
    "17:46",
    "07:42",
    "11:16",
    "14:38",
    "11:24",
    "14:48",
    "11:38",
    "14:58",
    "11:48",
    "15:09",
    "08:29",
    "11:58",
    "15:15",
    "18:07",
    "00:47",
    "21:15",
    "00:37",
    "06:47",
    "07:04",
    "19:12",
    "16:30",
    "17:04",
    "17:25",
    "17:33",
    "06:18",
    "07:02",
    "07:17",
    "20:13",
    "23:42",
    "21:14",
    "00:32",
    "00:59",
    "22:13",
    "22:34",
    "06:57",
    "19:18",
    "22:44",
    "20:36",
    "12:14",
    "15:33",
    "21:54",
    "08:55",
    "12:23",
    "15:43",
    "12:34",
    "15:54",
    "22:49",
    "09:17",
    "12:44",
    "16:01",
    "19:33",
    "12:54",
    "16:16",
    "09:37",
    "12:58",
    "16:24",
    "23:12",
    "13:14",
    "16:35",
    "20:04",
    "23:33",
    "09:50",
    "13:23",
    "16:45",
    "13:34",
    "16:55",
    "20:27",
    "23:52",
    "13:44",
    "17:03",
    "13:53",
    "17:12",
    "14:04",
    "17:26",
    "21:01",
    "00:21",
    "14:14",
    "07:28",
    "14:23",
    "11:08",
    "14:34",
    "11:26",
    "14:44",
    "21:35",
    "11:34",
    "14:53",
    "18:12",
    "11:44",
    "15:03",
    "11:54",
    "15:13",
    "18:35",
    "22:05",
    "08:33",
    "12:04",
    "15:26",
    "22:23",
    "09:29",
    "23:05",
    "20:01",
    "23:22",
    "19:22",
    "09:27",
    "00:02",
    "20:54",
    "00:12",
    "07:10",
    "20:46",
    "07:36",
    "21:23",
    "00:40",
    "06:37",
    "21:41",
    "18:42",
    "19:06",
    "07:52",
    "17:35",
    "09:14",
    "10:23",
    "10:34",
    "19:18",
    "19:59",
    "08:06",
    "08:18",
    "08:30",
    "09:05",
    "19:49",
    "10:43",
    "09:49",
    "10:08",
    "10:18",
    "10:29",
    "10:49",
    "07:47",
    "18:00",
    "00:16",
    "08:48",
    "18:58",
    "08:57",
    "00:36",
    "19:39",
    "09:44",
    "10:00",
    "10:59",
    "19:40",
    "17:58",
    "07:56",
    "08:04",
    "23:54",
    "08:16",
    "18:23",
    "18:38",
    "18:58",
    "19:19",
    "17:45",
    "18:14",
    "07:24",
    "08:41",
    "15:09",
    "18:45",
    "15:29",
    "19:00",
    "06:47",
    "15:46",
    "07:07",
    "16:05",
    "23:25",
    "17:04",
    "20:41",
    "20:32",
    "08:46",
    "21:12",
    "08:55",
    "09:04",
    "05:59",
    "18:12",
    "21:42",
    "09:32",
    "16:16",
    "16:26",
    "23:33",
    "20:11",
    "06:29",
    "16:45",
    "17:55",
    "21:22",
    "08:06",
    "21:32",
    "05:54",
    "15:39",
    "19:12",
    "15:56",
    "12:42",
    "09:25",
    "12:52",
    "09:42",
    "13:02",
    "06:20",
    "09:51",
    "10:09",
    "13:32",
    "23:45",
    "10:19",
    "13:42",
    "06:59",
    "10:31",
    "13:52",
    "17:15",
    "20:52",
    "13:12",
    "10:00",
    "13:22",
    "10:39",
    "14:02",
    "17:26",
    "21:02",
    "07:19",
    "10:51",
    "14:10",
    "11:02",
    "14:22",
    "17:48",
    "07:38",
    "11:12",
    "14:32",
    "07:49",
    "11:21",
    "14:42",
    "11:32",
    "14:52",
    "20:22",
    "08:13",
    "11:42",
    "15:01",
    "08:23",
    "11:52",
    "18:36",
    "08:36",
    "12:02",
    "08:43",
    "12:12",
    "08:59",
    "12:22",
    "19:04",
    "05:42",
    "09:11",
    "12:32",
    "19:21",
    "19:42",
    "20:02",
    "06:11",
    "18:24",
    "21:52",
    "18:51",
    "19:32",
    "19:52",
    "20:56",
    "18:15",
    "21:47",
    "22:17",
    "19:26",
    "22:47",
    "19:46",
    "23:07",
    "16:24",
    "19:56",
    "16:43",
    "16:54",
    "23:17",
    "23:40",
    "06:16",
    "05:32",
    "17:42",
    "09:22",
    "12:45",
    "16:03",
    "22:27",
    "06:08",
    "09:36",
    "12:57",
    "09:46",
    "13:07",
    "20:06",
    "06:27",
    "09:56",
    "13:17",
    "16:36",
    "10:05",
    "13:27",
    "06:45",
    "10:15",
    "13:37",
    "20:26",
    "11:16",
    "10:25",
    "13:47",
    "17:10",
    "20:46",
    "07:03",
    "10:33",
    "13:57",
    "05:23",
    "10:45",
    "14:07",
    "17:30",
    "21:06",
    "10:55",
    "14:17",
    "05:37",
    "11:06",
    "14:27",
    "14:37",
    "18:09",
    "21:37",
    "05:58",
    "11:26",
    "14:47",
    "11:37",
    "14:56",
    "08:17",
    "11:45",
    "15:04",
    "08:26",
    "11:55",
    "18:41",
    "22:07",
    "12:07",
    "15:25",
    "18:57",
    "08:49",
    "12:17",
    "06:51",
    "12:27",
    "15:44",
    "19:16",
    "22:37",
    "05:46",
    "09:16",
    "12:37",
    "19:35",
    "22:57",
    "06:34",
    "20:16",
    "17:02",
    "20:35",
    "16:30",
    "21:17",
    "18:02",
    "21:27",
    "05:13",
    "18:31",
    "21:57",
    "15:34",
    "07:14",
    "18:49",
    "07:53",
    "07:24",
    "07:43",
    "08:01",
    "04:56",
    "05:50",
    "06:31",
    "07:33",
    "16:28",
    "18:05",
    "16:59",
    "07:55",
    "17:21",
    "07:26",
    "17:44",
    "15:17",
    "06:36",
    "16:01",
    "06:06",
    "16:10",
    "06:18",
    "16:22",
    "16:42",
    "16:52",
    "06:56",
    "17:36",
    "15:13",
    "15:22",
    "05:38",
    "15:42",
    "15:53",
    "06:41",
    "07:10",
    "08:33",
    "06:25",
    "05:57"
  ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLUEBY3",
  "strStopNameNotUnique": "9400ZZLUUPB1"
},
"Tuesday,Wednesday,Thursday,Friday,Saturday": {
  "lineName": "District",
  "arrListOfTimes": [
    "01:11",
    "00:38"
  ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLURMD1",
  "strStopNameNotUnique": "9400ZZLUUPB1"
    }
  },
 "Hammersmith & City": {
"Friday": {
  "lineName": "Hammersmith & City",
  "arrListOfTimes": [
    "05:43",
    "06:38",
    "23:41",
    "23:51"
  ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLUUPM2",
  "strStopNameNotUnique": "9400ZZLUUPB1"
},
"Monday": {
  "lineName": "Hammersmith & City",
  "arrListOfTimes": [
    "05:43",
    "06:38",
    "23:41",
    "23:51"
  ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLUUPM2",
  "strStopNameNotUnique": "9400ZZLUUPB1"
},
"Sunday": {
  "lineName": "Hammersmith & City",
  "arrListOfTimes": [
    "06:33",
    "06:20",
    "06:53",
    "23:39",
    "22:24",
    "23:00",
    "06:20",
    "06:33",
    "06:53",
    "22:24",
    "23:01",
    "23:40"
  ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLUUPM2",
  "strStopNameNotUnique": "9400ZZLUUPB1"
},
"Saturday": {
  "lineName": "Hammersmith & City",
  "arrListOfTimes": [
    "05:38",
    "05:48",
    "06:08",
    "23:51",
    "00:11",
    "00:48",
    "05:38",
    "05:48",
    "06:08",
    "23:52",
    "00:11",
    "00:48"
  ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLUUPM2",
  "strStopNameNotUnique": "9400ZZLUUPB1"
},
"MondayToFriday": {
  "lineName": "Hammersmith & City",
  "arrListOfTimes": [
    "05:43",
    "06:38",
    "23:41",
    "23:51"
  ],
  "departureStopId": "9400ZZLUUPB1",
  "destinationName": "9400ZZLUUPM2",
  "strStopNameNotUnique": "9400ZZLUUPB1"
}
  }
}

Thank you both, this is very helpful.

@SealingMark you were correct, I was very much hoping for csvs in the same format as those underground timetables- seems strange that they are not availableā€¦ but thank you @briantist for pointing me in the right direction.

Now I just need to figure out how to deal with xmlsā€¦

If it helps, the zip file (at least in the source I use) is actually a zip file of six zip files, four of which deal with buses, one with rail replacement buses and one with everything else. This last file would be the only one you have to look at. I can see river bus services, Woolwich ferry, trams, the Dangleway, tube and DLR. What I cannot see is London Overground and TfL Rail but maybe I am missing something.

The operator code within the file name also tells you what the service is. If the name starts ā€œtfl-54ā€ for example it is Metroline, therefore a bus service but if it starts with ā€œtfl-1ā€ it is a tube service.

I read the XML file into Excel as a read-only workbook and then copy the relevant elements into the form that I want. Itā€™s all done with VBA code. While that took a fair time to get right, it has needed relatively little amendment over the years. As the code does the lot, I can just leave it running while I do something else. Iā€™ve never tried doing anything for the tube files. The one time I thought of doing it I was put off by the multiplicity of files present for each tube line. Iā€™ve never asked why that is but I suppose it could be to do with special timetables for engineering work.

@mjcarchive

I would personally caution against going so off-spec with your assumptions. Whilst this might well be the case about the filename formats and so forth, there is nothing in the specification that says TfL (or anyone else) has to follow this. Itā€™s certainly NOT the case when you look at the .gov.uk versions!

public const WHEREAMIUK = "https://data.bus-data.dft.gov.uk/timetable/download/compliant_bulk_archive";
public const WHEREAMIUK_NONCOMPLIANT = "https://data.bus-data.dft.gov.uk/timetable/download/bulk_archive";

@mmcg ā€œseems strange that they are not availableā€ Given that Central Government has opted for Siri-VM for timetable formats, itā€™s not really worth anyoneā€™s times to convert them to a more limited formatā€¦

If you want a pointer, in PHP8.1 I start withā€¦

        libxml_use_internal_errors(true);
        $dom = new DOMDocument();
        $dom->preserveWhiteSpace = false;
        $dom->loadXML($this->cachedGetTransxchangeitemByFilename($filename));
        $this->TransXChange = $dom->getElementsByTagName("TransXChange");

@briantist
Yes, youā€™re right in principle. Iā€™m just going with what has worked for the last N years. with the source you initially referred to. If stuff changes, Iā€™ll worry about it then, though I would prefer to have some advance warning of what is changing rather than just finding it has changed one fine morning.

1 Like

Perhaps Iā€™m stung by the BBC Weather feeds changing a few bytes after 20+ years use!

https://weather-broker-cdn.api.bbci.co.uk/en/forecast/rss/3day/2643743

changed from ?day=0 to /day0 and silently broke lots of clientsā€¦

@mmcg Although itā€™s tube data, there is a very detailed and well-documented project here that contains tons of sourcecode that may help you (only python and ā€˜Rā€™ though).
https://ruaridhw.github.io/london-tube/index.html
Look under the ā€˜Analysisā€™ tab for code.
It does include a custom class specifically for TfL Timetable

It does end up creating ā€˜.featherā€™ files which are probably no use to you, but up to that point it looks helpful.

Iā€™m planning to try it myself, but havenā€™t got started yet.

Thank you, that is very helpful. Does anyone else know why there are multiple files for each tube line- is it engineering work as @mjcarchive suggested?

Thanks! I had a go getting the Python version to work but had some issues which I think could be solved by using the correct old versions of various packages but I got frustrated trying to figure it out so im attempting to write a similar thing in Python myself with csv output. I will share on here if I get it working :slight_smile:

@mmcg
One of the current Bakerloo timetables was for the Platinum Jubilee events weekend. I didnā€™t look at other lines. Probably the only way to be sure is to look at the days (dates) of operation, which would be very specific for engineering work, and line them up with known info on engineering works.

@mmcg If you do write code to do that, I would be interested to see it here.
Not yet needed to parse that data yet, but happy to use someone elseā€™s code when I do!

Apologies the github code I flagged up was no good.

This FOI request (for underground timetables) may be relevant to the formats in which timetables will and will not be released in the future

1 Like

Indicate whether you have an intention to update http://timetables.data.tfl.gov.uk/ in the future for subsequent changes to the timetable
This website is no longer live or maintained, this has been superseded by data provision through the APIs ā€“ see further detail below. (We will be speaking to the relevant team to close this particular site to avoid confusion in the future).

This would have been my guessā€¦

Hi @briantist, could you please point in the direction of where I might find an updated version of these timetables? Thanks so much!