2009-12-14 4 views
1

Я пытаюсь прочитать данные из RSS-канала, который содержит 25 элементов. Когда я запрашиваю файл RSS через HTTP, он говорит, что есть только 20 элементов.Reddit RSS-канал, возвращающий меньше предметов по запросу через HTTP?

function test($location) 
{ 
    $doc = new DomDocument(); 
    $doc->load($location); 
    $items = $doc->getElementsByTagName('item'); 
    return $items->length; 
} 

// Prints 20 
echo test('http://www.reddit.com/r/programming/new/.rss?after=t3_'); 

// Prints 25 
echo test('programming.xml'); 

Я пробовал RSS-каналы из других субредадов с тем же результатом.

+0

@Kevin, как вы получаете 'programming.xml' файл? Через какой метод? –

+0

Я получаю доступ к RSS-каналу через мой браузер и делаю File> Save to programming.xml. Приведенный выше код загружает один и тот же файл xml дважды, но один из них находится на сервере reddit, другой - локальный. – Kevin

ответ

2

Я вижу, что проблема сейчас ... Если вы посещаете sub-reddit, как /r/programming/, и перейдите на вкладку «новые», чтобы увидеть новейшие материалы, есть два варианта сортировки. Первый вариант - «повышение», в котором отображаются только входящие и исходящие записи, альтернативный порядок сортировки - «новый».

Поскольку я выбрал «новый» порядок сортировки в своем браузере, он сохранил файл cookie и впоследствии использовался как порядок сортировки по умолчанию. Однако доступ к странице с помощью кода по-прежнему использовал порядок сортировки по умолчанию, который возвращал переменную величину результатов.

я решил проблему путем добавления строки запроса порядок сортировки для запроса URL: http://www.reddit.com/r/programming/new/.rss?sort=new

0

Если возникли проблемы с загрузкой корма, это, вероятно, выдает предупреждение.

Прямо сейчас, ваш пример кода для reddit feed показывает, что у него 14 предметов. Количество элементов в этом канале не является постоянным. Поэтому проблема заключается в том, что ваша локальная копия отличается от той, которую вы загружали с reddit.

+0

Точно моя точка. Если вы перейдете на URL-адрес канала и сохраните его локально. Затем загрузите THAT в скрипт, который он будет работать. Но запрос одного и того же файла через HTTP, похоже, имеет разные результаты. – Kevin

+0

Я только что протестировал доступ к файлу 3 различными способами: Дать тест URL напрямую, загрузить из браузера и загрузить с помощью wget. И 3 раза он показал мне ту же сумму 16. Этот фид, похоже, довольно часто меняет его содержимое, вы не можете полагаться на местную копию, чтобы иметь тот же контент, что и онлайн-версия. – Juan

+0

Просмотр rss-канала в моем браузере всегда показывает 25 пунктов. Когда я обращаюсь к нему с помощью других средств, число является переменной. Интересно, связано ли это с их API. – Kevin