Форум

Ошибка при чтении 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 = $item->getElementsByTagName("description");
$tnl = $tnl->item(0);
$description = $tnl->firstChild->data;
$ tnl - объект DOM типа NodeList. Он содержит список предметов. $ tnl-> item (0) и первый в списке. $ tnl -> firstChild - первый элемент, содержащийся в этом пункте. и data, теперь замененный textContent - это текст, содержащийся в теге. Все это используется для получения содержимого тега описания в потоке.
На моем ярости есть следующий плакат: "Голкипер Тайгер Вудс в пятницу после того, как он... Есть способ правильно показать символы?
Проблема с ДОКТайпом. 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, я был в пути, я постараюсь сделать это в эти выходные и дам вам ссылку.