Как вы собираете определенные данные из поля описания в ленте RSS? - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть RSS-канал, в который я читаю. Мне нужно получить определенные данные из поля в этом фиде.

Это пример подачи данных:

<content:encoded><![CDATA[
    <b>When:</b><br />
    Weekly Event - Every Thursday: 1:30 PM to 3:30 PM (CT)<br /><br />
      <b>Where:</b><br />
      100 West Street<BR>2nd floor<BR>Gainesville<BR>
      <br>.....

Как вытащить данные для Когда: и Где: соответственно? Я пытался использовать регулярное выражение, но я не уверен, правильно ли я получаю доступ к данным или мое выражение регулярного выражения неверно. Я не настроен на использование регулярных выражений.

Это мой код:

    foreach ($x->channel->item as $event) {
    $eventCounter++;
    $rowColor = ($eventCounter % 2 == 0) ? '#FFFFFF' : '#F1F1F1';
    $content = $event->children('http://purl.org/rss/1.0/modules/content/');
    $contents = $content->encoded;
    echo '<tr style="background-color:' . $rowColor . '">';
    echo '<td>';
    //echo "<a id=buttonRed href='$event->link' title='$event->title' target='_blank'>" . $event->title . "</a>";
    echo "" . $event->title . "";
    echo '</td>';
    echo '<td>';
    $re = '%when\:\s*</b>\s*(.|\s)<br \/><br \/>$/i';
    if (preg_match($re, $contents, $matches)) {
        $date = $matches;
    }
    echo $date;
    echo '</td>';
    echo '<td>';
    $re = '/^When\:<\/b>()$/';
    if (preg_match($re, $contents, $matches)) {
        $location = $matches;
    }
    echo $location;
    echo '</td>';
    echo '<td>';
    echo "<a id=buttonRed href='$event->link' title='$event->title' target='_blank'>Click Here To Register</a>";
    echo '</td>';
    echo '</tr>';
}

Два $ res - это просто моя попытка получить данные, используя различные выражения регулярных выражений. Дайте мне знать, где я иду не так. Спасибо

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

У меня была такая проблема, и я использовал YQL .Внимательно посмотрите на приведенный там код очистки страницы, особенно команду select.Затем перейдите на консоль и вставьте свой собственный оператор выбора, указав URL-адрес канала и xpath для нужных вам узлов.Выберите формат JSON.Затем перейдите в конец страницы, получите URL-адрес запроса REST и используйте его в запросе jquery jsonp . MAGIC!

1 голос
/ 08 февраля 2012

Следующее должно отчасти привести вас туда.(Я написал это из головы, и он не совсем соответствует вашему синтаксису XML. Но вы поняли.)

<?php
$str = "<root><b>When:</b> whenwhen <b>Where:</b> wherewhere</root>";

$doc = new DOMDocument();
$doc->loadXML($str);

$when = $where = "";
$target = null;

foreach ($doc->documentElement->childNodes as $node) {
    if ($node->tagName == "b") {
        if (++$i == 1) {
            $target = &$when;
        } else {
            $target = &$where;
        }
    }

    if ($target !== null && $node->nodeType === XML_TEXT_NODE) {
        $target .= $node->nodeValue;
    }
}

var_dump($when, $where);
0 голосов
/ 08 февраля 2012

пожалуйста, не извлекайте данные из XML-документов с помощью регулярных выражений.

Длинный ответ, например, здесь: https://stackoverflow.com/a/335446/313145

Короткий ответ: это не проще в использованиирегулярное выражение и будет часто ломаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...