С БД как раз проще. Я бы предложил завести пару таблиц: в одной хранить названия (можно отдельно те, что на Vida.ru и те, что надо выводить - не суть) и даты обновления программ интересующих нас каналов. Во второй - программы: канал (id из первой таблицы), дата, время, название программы.
Когда происходит обращение к странице, запрашиваем даты обновления тех каналов, которые хотим вывести. Если они совпадают с сегодняшней - просто запрашиваем из базы программу на нужный день и выводим. Если не совпадают - начинаем хитрить.
Во-первых, удаляем из базы вчерашние (и позавчерашние, и т. д.) программы; во-вторых, грузим ту же Vidу.Ru (возможно, не одну страницу) и начинаем парсить. С этим, вроде бы, тоже особых проблем нет.
В цикле парсим канал за каналом. Для этого находим, к примеру, очередную строку
CODE:http://www.vida.ru/blob/Channel/logo/
Эта строка, вроде бы, встречается только в начале программы каждого из каналов. После этого выдёргиваем имя канала - между
И
Если это имя отсутствует в базе - этот канал нас не интересует, переходим к следующему. Затем парсим записи программы - они будут между
И
Время находится между
И
Название передачи - между
CODE:style="color:black; text-decoration: underline">
И концом строки. С тем, чтобы добавить записи в базу, проблем быть не должно.
Разумеется, если на сайте сменится дизайн, парсер придётся переписать.
Сортировать записи при выводе надо не по времени, а по очерёдности добавления в базу (id), потому что телевизионщики имеют обыкновение относить то, что до шести утра, как правило, к вчерашнему дню.