На днях листал пожелтевшие страницы старых выпусков Зазеркалья и случайно наткнулся на заметку о старте второго сезона подкаста "Радио 1С Энтерпрайз". Сказать, что я был удивлён - это не сказать ничего. Причём меня удивило не то, что уже начался третий сезон этого подкаста и при этом в Зазеркалье до сих пор нет об этом заметки (это не удивило вообще), а то, что я ни сном, ни духом о существовании какого-то подкаста про 1С! А он оказывается есть!
Послушал пару первых выпусков первого сезона, и знаете, мне понравилось. Планирую продолжать слушать и дальше. Ну а поскольку я привык слушать на телефоне оффлайновые файлы через старый-добрый-ламповый проигрыватель VLC, а не с этих-ваших-модно-смузевых подкаст-сервисов, появилась необходимость выкачать все выпуски.
Как известно, "лучше день потерять [на написание кода], потом за пять минут долететь всё скачать!"
Поэтому, собственно, вот она - моя наколенная подделка. Глядишь, кому пригодится. Умеет выводить результат в ТекстовыйДокумент в виде bash-/bat-скрипта с вызовами wget и в виде обычного html-я (не знаю зачем; просто сделал для визуализации результата). Формат вывода результата определяется значением переменной ФорматРезультата в самом начале кода.
Запускать через любую консоль кода (коих тут уже накопилось немногим меньше, чем внешних печатных форм счета-фактуры), или можно создать обработочку и добавить этот код как обработчик нажатия кнопки.
ФорматРезультата = "wget"; // "wget" или "html"
// Получаем данные в виде RSS: https://cloud.mave.digital/37402
Сервер = "cloud.mave.digital";
Порт = 443;
АдресРесурса = "/37402";
// запрос по HTTP
HTTPСоединение = Новый HTTPСоединение(Сервер, Порт,,,,, Новый ЗащищенноеСоединениеOpenSSL);
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Если HTTPОтвет.КодСостояния <> 200 Тогда
ВызватьИсключение "Не удалось получить данные с сервера! Код состояния HTTP = " + HTTPОтвет.КодСостояния;
КонецЕсли;
ТекстRSS = HTTPОтвет.ПолучитьТелоКакСтроку();
// XML -> XDTO
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекстRSS);
ОбъектRSS = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
ЧтениеXML.Закрыть();
// разбор XDTO
ВыпускиПодкаста = Новый Массив;
Для Каждого СтрокаItem Из ОбъектRSS.channel.item Цикл
ОписаниеВыпуска = Новый Структура;
ОписаниеВыпуска.Вставить("Сезон", ?(СтрокаItem.Свойства().Получить("season") <> Неопределено, СтрокаItem.season, "?"));
ОписаниеВыпуска.Вставить("Эпизод", ?(СтрокаItem.Свойства().Получить("episode") <> Неопределено, СтрокаItem.episode, "?"));
ОписаниеВыпуска.Вставить("ДатаВыхода", СтрокаItem.pubDate);
ОписаниеВыпуска.Вставить("Описание", ?(СтрокаItem.Свойства().Получить("summary") <> Неопределено, СтрокаItem.summary, "?"));
ОписаниеВыпуска.Вставить("АдресФайла", СтрокаItem.enclosure.url);
ВыпускиПодкаста.Добавить(ОписаниеВыпуска);
КонецЦикла;
// вывод результата
ТД = Новый ТекстовыйДокумент;
КоличествоВыпусков = ВыпускиПодкаста.Количество();
НомерВыпуска = КоличествоВыпусков;
ФорматНомераВыпуска = СтрШаблон("ЧЦ=%1; ЧВН=; ЧГ=", Макс(СтрДлина(Формат(КоличествоВыпусков, "ЧГ=")), 3));
Для Каждого ОписаниеВыпуска Из ВыпускиПодкаста Цикл
Сезон = ОписаниеВыпуска.Сезон;
Эпизод = ОписаниеВыпуска.Эпизод;
Описание = ОписаниеВыпуска.Описание;
АдресФайла = ОписаниеВыпуска.АдресФайла;
ДатаВыхода = ОписаниеВыпуска.ДатаВыхода;
ИмяФайлаДляСохранения = "";
ПозицияПоследнейТочки = СтрНайти(АдресФайла, ".", НаправлениеПоиска.СКонца);
НомерМесяца = (СтрНайти("BAD,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", Сред(ДатаВыхода, 9, 3)) - 1) / 4;
Если ПозицияПоследнейТочки <> 0
И НомерМесяца > 0 Тогда
ДатаВыходаГГГГММДД = Сред(ДатаВыхода, 13, 4)
+ "-" + Формат(НомерМесяца, "ЧЦ=2; ЧВН=; ЧГ=")
+ "-" + Сред(ДатаВыхода, 6, 2);
ИмяФайлаДляСохранения = Формат(НомерВыпуска, ФорматНомераВыпуска) + "_" + ДатаВыходаГГГГММДД + Сред(АдресФайла, ПозицияПоследнейТочки);
КонецЕсли;
Если ПустаяСтрока(ИмяФайлаДляСохранения) Тогда
ВызватьИсключение "Не удалось сформировать имя файла для сохранения!";
КонецЕсли;
Если ФорматРезультата = "wget" Тогда
Стр = СтрШаблон("wget -O %1 %2", ИмяФайлаДляСохранения, АдресФайла);
Иначе
// по умолчанию "html"
Стр = СтрШаблон("<p><b>%1</b><br />%2.%3. %4<br /><a href=""%5"" download=""%6"">%7</a></p>", ДатаВыхода, Сезон, Эпизод, Описание, АдресФайла, ИмяФайлаДляСохранения, АдресФайла);
КонецЕсли;
ТД.ДобавитьСтроку(Стр);
НомерВыпуска = НомерВыпуска - 1;
КонецЦикла;
ТД.Показать("Список выпусков Радио 1С Энтерпрайз", ?(ФорматРезультата = "wget", "download-podcast-1c.sh", "index-podcast-1c.html"));