Форум
Ошибка при чтении RSS-канала
27-11-2009 22:30:25
Чакалака
Во-первых, позвольте мне поблагодарить автора учебника по чтению RSS за хорошую работу (простое и точное tuto). Я пытался использовать код для чтения RSS-канала с нового сайта. У меня есть следующая ошибка: Notice: Trying to get property of non-object in C :\....\flowRSS on line 30 Эта знаменитая строка $ описание = $ tnl-> firstChild-> data; Я проверил в своем .xml, у меня есть описание тега, Qlq1 будет идея, как решить эту ошибку? Другой вопрос: Как ограничить показ (или чтение) только 3 первых новостей RSS-канала? Наконец: я не могу понять, что делают следующие строки кода
$tnl = $item->getElementsByTagName("description"); $tnl = $tnl->item(0); $description = $tnl->firstChild->data;Маленькая деталь (последняя клянусь) На моей ярости у меня следующий дисплей
Гольфист Тайгер Вудс был гостеприимным в пятницу после того, как...Есть способ правильно показать символы? Вот мой PHP-код:
<link rel="alternate" type="application/rss+xml" title="Nouvelles" href="http://www.cyberpresse.ca/rss/178.xml" /> echo RSS_Display("http://www.cyberpresse.ca/rss/178.xml", 15);Merci pour vos réponses :)
29-11-2009 20:47:20
веб-мастер
Я пытался использовать код для чтения RSS-канала с нового сайта. У меня есть следующая ошибка: Notice: Trying to get property of non-object in C :\....\flowRSS .php on line 30 Эта знаменитая строка - $ описание = $ tnl -> firstChild-> data; [/quote Возможно, вопрос совместимости. Попробуйте использовать textContent вместо данных. Другой вопрос: Как ограничить показ (или чтение) только 3 первых новостей RSS-канала?Изменить эту строку :
$recents = array_slice($RSS_Content, 0, $size);
$recents = array_slice($RSS_Content, 1, 3);Вы начинаете с 0 или 1 в зависимости от того, хотите ли вы показать название сайта. Также можно вызвать функцию RSS_Display ($ url, $ size) со значением 3 для параметра $ size .
Не могу понять, что делают следующие строки кода$ tnl - объект DOM типа NodeList. Он содержит список предметов. $ tnl-> item (0) и первый в списке. $ tnl -> firstChild - первый элемент, содержащийся в этом пункте. и data, теперь замененный textContent - это текст, содержащийся в теге. Все это используется для получения содержимого тега описания в потоке.$tnl = $item->getElementsByTagName("description"); $tnl = $tnl->item(0); $description = $tnl->firstChild->data;
На моем ярости есть следующий плакат: "Голкипер Тайгер Вудс в пятницу после того, как он... Есть способ правильно показать символы?Проблема с ДОКТайпом. XML-файл находится в UTF-8, страница, на которой он отображается, должна быть также в UTF-8. Когда на странице, используемой для создания потока, если она не в UTF-8, используется функция PHP преобразования: utf8_encode
$description = utf8_encode($tnl->firstChild->textContent;)
03-12-2009 05:03:57
Чакалака
Бесконечное спасибо;)
25-05-2010 15:25:44
Скорлеон
Здравствуйте, я скачал версию 2010 года и действительно большое браво, это хорошо работает. Спасибо За исключением того, что у меня такая же странная ошибка отображения символов даже после того, как я принудительно кодировал utf8_encode для описания. Например, я тестирую с газетным потоком мир: http://www.lemonde.fr/rss/sequence/0, 2-3208,1-0,0.xml Есть ли у вас решение? Спасибо
25-05-2010 20:14:16
веб-мастер
Здравствуйте, я протестировал ленту с демонстрационным сценарием: https://www.iqlevsha.ru/rss/rss-simple.php Это отображается нормально. Скрипт использует кодировку UTF-8, поэтому проблема должна возникнуть из-за кодировки страницы.
25-05-2010 22:52:23
scorleon1
Привет, Спасибо за быстрый ответ, и dsl я создал новую учетную запись, потому что старая больше не работает даже после инициализации пароля. Ну, я переделал все до нуля, но у меня есть следующая ошибка: фатальная ошибка: Call to undefined method: domdocument-> load () in/homepages/17/d329985513/html/rsslib/rsslib.php on line 77
на этой строке:
$doc->load($url);Мой сайт размещается в 1and1. Спасибо за вашу помощь.
26-05-2010 19:39:19
веб-мастер
Это то, что обычно происходит, когда PHP не в версии 5. Даже если хостинг поддерживает PHP 5, по умолчанию его можно настроить на PHP 4. Проверьте версию с функцией phpinfo ().
<?php echo phpinfo(); ?>
26-05-2010 21:58:36
scorleon1
Вот версия php сервера: PHP Версия 5.2.13 Теперь у меня есть следующие сообщения: Warning: DOMDocument:: load () [domdocument.load]: URL-адрес file-access отключен в серверной конфигурации in/homepages/17/d329985513/html/rsslib/rsslib.php на линии 77 Warning: DOMDocument:: load (http://www.lemonde.fr/rss/sequence/0, 2-3208,1-0,0.xml) [domdocument.load]: failed to open stream: no suitable wrapper cound be found in/homepages/17/d329985513/html/rsslib/rsslib.php on линия 77 Варнинг: DOMDocument:: load () [domdocument.load]: I/O warning: не удалось загрузить внешний объект «http://www.lemonde.fr/rss/sequence/0, 2-3208,1-0,0.xml» in/homepages/17/d329985513/html/rsslib/rsslib.php on линия 77
27-05-2010 19:08:43
веб-мастер
Сообщение указывает, что конфигурация сервера не позволяет загрузить файл в виде URL-адреса. Переменная allow_url_fopen отключена. Никогда не сталкиваясь с этой проблемой, полагаю, она специфична для 1and1. У вас есть доступ к настройке PHP? Вы также можете попробовать заменить в RSS_retrieve
$doc = new DOMDocument(); $doc->load($url);
$data = file_get_contents($url); $doc = new DOMDocument(); $doc->loadXML(data);
27-05-2010 21:35:50
scorleon1
Привет, я пытался, но это не работает, всегда одни и те же ошибки. в противном случае я нашел это:» http://faq.1and1.fr/scripts/php/11.html «я пытался, но это еще не активировано, мне кажется, нужно время. В противном случае я нашел решение (всегда ваш код), но у меня проблемы с символами: Я заменяю этот код:
global $RSS_Content; $doc = new DOMDocument(); $doc->load($url); $channels = $doc->getElementsByTagName("channel"); $RSS_Content = array(); foreach($channels as $channel) { RSS_Channel($channel); }этим:
global $RSS_Content; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_URL, $url); $result = curl_exec($ch); curl_close($ch); $doc = new DOMDocument(); $doc->loadXML($result); $channels = $doc->getElementsByTagName("channel"); $RSS_Content = array(); foreach($channels as $channel) { RSS_Channel($channel); }
28-05-2010 14:27:31
веб-мастер
Почему бы тебе не использовать fsockopen ()?
$fp = fsockopen("www.example.com/rss.xml", 80, $errno, $errstr, 30); $data = ""; while (!feof($fp)) { $data .= fgets($fp, 128); } fclose($fp); $doc = new DOMDocument(); $doc->loadXML($data);По примеру учебника PHP, адаптированного под ситуацию.
29-05-2010 01:18:37
scorleon1
У меня была бесконечная петля: D
29-05-2010 20:40:33
веб-мастер
Я только что протестировал следующий код в сочетании с демо rss-reg.php :
$doc = new DOMDocument(); /* $doc->load($url); */ $fp = fsockopen($url); $data = ""; while (!feof($fp)) { $data .= fgets($fp, 128); } fclose($fp); $doc = new DOMDocument(); $doc->loadXML($data);Это работает идеально, и поток появился. У вас есть возможность проверить сценарий на другом хостере?
30-05-2010 00:28:29
scorleon1
Да, я тестирую на 1and1 и ovh. Но с последним кодом это тоже не работает, его факт сбит IE и firefox, и chrome. Но, как я уже сказал, с этим кодом это работает хорошо, кроме знаков спецификации, которые не отображаются:
global $RSS_Content; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_URL, $url); $result = curl_exec($ch); curl_close($ch); $doc = new DOMDocument(); $doc->loadXML($result); $channels = $doc->getElementsByTagName("channel"); $RSS_Content = array(); foreach($channels as $channel) { RSS_Channel($channel); }
31-05-2010 14:17:08
веб-мастер
Здравствуйте, я пробовал ваш точный код с rss-direct.php и это работает отлично, без проблем со специальными символами. Это должно быть проблемой формата страницы или настройки браузера. Заголовок rss-direct.php :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
02-06-2010 22:13:24
scorleon1
Здравствуйте, это тот же конфиг, что у меня на странице. Я не знаю, почему это не работает.
03-06-2010 10:20:24
веб-мастер
Если бы у меня была ссылка на страницу или демонстрационную страницу (без http ://из-за антиспамового фильтра).
09-06-2010 23:01:53
scorleon1
Здравствуйте, Dsl, я был в пути, я постараюсь сделать это в эти выходные и дам вам ссылку.