Лучший способ проанализировать RSS / Atom-каналы с помощью PHP [закрыто]

Если вы сохраняете текст в BLOB-объекте, вы должны сделать его blob sub_type text (он же blob sub_type 1) вместо blob (он же blob sub_type binary, он же blob sub_type 0). Хотя это не гарантия (некоторые драйверы Firebird не различают подтипы BLOB-объектов).

Чтобы преобразовать двоичный BLOB-объект в текстовый BLOB-объект, используйте

select cast(binblob as blob sub_type text character set utf8) from blobtbl

или без предложения набора символов:

select cast(binblob as blob sub_type text) from blobtbl

В качестве альтернативы, вы можете привести к VARCHAR, но сделать убедитесь, что вы указали достаточно длинный varchar для хранения всего значения, иначе вы получите ошибку усечения. Например:

select cast(binblob as varchar(1000) character set utf8) from blobtbl

В обоих случаях предложение набора символов является необязательным; он будет использовать набор символов соединения, если он выключен. Помните, что если вы используете неправильный набор символов, вы можете получить ошибку транслитерации.

133
задан Dan Lowe 6 May 2017 в 14:46
поделиться

6 ответов

30
ответ дан 24 November 2019 в 00:01
поделиться

Я всегда привык функции SimpleXML, встроенные для PHP для парсинга XML-документов. Это - один из нескольких универсальных синтаксических анализаторов там, который имеет интуитивную структуру к нему, которая делает чрезвычайно легким создать значимый класс для чего-то определенного как канал RSS. Кроме того, это обнаружит предупреждения XML и ошибки, и после нахождения любого, что Вы могли просто выполнить источник через что-то как Опрятный HTML (как ceejayoz упомянутый), чтобы очистить его и делать попытку его снова.

Считайте это очень грубое, простое использование класса SimpleXML:

class BlogPost
{
    var $date;
    var $ts;
    var $link;

    var $title;
    var $text;
}

class BlogFeed
{
    var $posts = array();

    function __construct($file_or_url)
    {
        $file_or_url = $this->resolveFile($file_or_url);
        if (!($x = simplexml_load_file($file_or_url)))
            return;

        foreach ($x->channel->item as $item)
        {
            $post = new BlogPost();
            $post->date  = (string) $item->pubDate;
            $post->ts    = strtotime($item->pubDate);
            $post->link  = (string) $item->link;
            $post->title = (string) $item->title;
            $post->text  = (string) $item->description;

            // Create summary as a shortened body and remove images, 
            // extraneous line breaks, etc.
            $post->summary = $this->summarizeText($post->text);

            $this->posts[] = $post;
        }
    }

    private function resolveFile($file_or_url) {
        if (!preg_match('|^https?:|', $file_or_url))
            $feed_uri = $_SERVER['DOCUMENT_ROOT'] .'/shared/xml/'. $file_or_url;
        else
            $feed_uri = $file_or_url;

        return $feed_uri;
    }

    private function summarizeText($summary) {
        $summary = strip_tags($summary);

        // Truncate summary line to 100 characters
        $max_len = 100;
        if (strlen($summary) > $max_len)
            $summary = substr($summary, 0, $max_len) . '...';

        return $summary;
    }
}
166
ответ дан 24 November 2019 в 00:01
поделиться

Если канал не является правильно построенным XML, Вы, как предполагается, отклоняете его, никакие исключения. Вы наделены правом назвать создателя канала типом.

Иначе Вы прокладываете способ смешать тот HTML, законченный в.

12
ответ дан 24 November 2019 в 00:01
поделиться

Я использую SimplePie для парсинга канала Google Reader, и он работает вполне прилично и имеет достойный набор функций.

Конечно, я не протестировал его с неправильно построенным RSS / Atom-ленты, таким образом, я не знаю, как это справляется с ними, я предполагаю, что Google является справедливо совместимыми стандартами!:)

2
ответ дан 24 November 2019 в 00:01
поделиться

Библиотека HTML Tidy может зафиксировать некоторые уродливые XML-файлы. Выполнение Вашей подачи через это перед передачей их к синтаксическому анализатору может помочь.

6
ответ дан 24 November 2019 в 00:01
поделиться

Лично я использую BNC Advanced Feed Parser- мне нравится система шаблонов, которая очень проста в использовании

{{1} }
1
ответ дан 24 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: