В настоящее время я работаю над тем, чтобы проверить, соответствует ли данный URL-адрес правильно отформатированному подкастному каналу.
Сейчас у меня есть двухфазный подход, который, по-видимому, действует как достаточно достаточный. Первый - это просто использование CURL для проверки ответа, но затем я использую DOMDocument validateOnParse для проверки форматирования, т.е.
$dom = new DOMDocument();
$dom->validateOnParse = true;
if($dom->load($url, LIBXML_NOERROR)){
Который, кажется, немного сверхчувствителен и иногда будет отклонять плохо структурированные подкасты. Он также передает регулярные, не подкасты rss-каналы.
Примечание. Я уверен, что плохо структурированные подкасты по-прежнему приемлемы, поскольку я тестировал их, подписываясь на них через приложение подкаста.
Очевидно, validateOnParse специально не предназначен для проверки подкастов, но есть ли другой метод или библиотека? Похоже, что очень мало соответствует каким-либо стандартам со стороны производителей подкастов.
-- ОБНОВИТЬ --
Любой, кто искал и рассматривал этот вопрос, скорее всего, найдет дубликат в качестве подходящего решения. Однако в моем случае оказалось, что вместо плохого форматирования я получал ошибки, потому что некоторые запросы на $ url блокировались на основе того, что мой сервер предоставлял в качестве User Agent.
Проще говоря, решение этого заключалось в том, чтобы подделать User Agent, что-то вроде этого:
$options = array('http' => array('user_agent' => 'some user agent string'));
$context = stream_context_create($options);
$file = file_get_contents($url,false,$context);
Это, казалось, решает все случаи ложноотрицания, и дубликат, похоже, фиксирует ложные срабатывания.
Используйте знак "@" следующим образом:
@$dom->validateOnParse = true;
Поскольку вы не всегда найдете проверенные документы, знак "@" будет игнорировать любые предупреждения, которые могут возникнуть.
$dom->validateOnParse = true;
никогда не выдаст предупреждение (если $dom
правильно инициализирован), поэтому размещение оператора управления ошибками в лучшем случае вводит в заблуждение.