avatar_Manson

Вывод новостей на сайт из форума

Автор Manson, 2009 Авг. 05, 16:44

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlineВеб-сайтымодулифорумновостипрограммирование

Manson

Однажды сам столкнулся с такой проблемой что мне ненравится система новостей на DSW, MuWeb и тд. Посидел, подумал, сделал. Теперь делюсь с вами :)

Как это выглядит?
-Вот мы написали новость на форуме:


- А она появилась на сайте:


Нам понадобится:
- Любой рабочий парсер rss (свой я выложу в конце).
- Одинаковая кодировка у сайта и у форума (я использовал IPB3.0 с UTF-8).
- Доступ в админку форума и к файлам сайта.

Начинаем:
- Заходим в админку IPB, Forums>Manage Forums создаем глобальную категорию а в ней форум "Новости". Это именно то место откуда мы будем экспортировать новости на главный сайт.
- Далее Forums>RSS Management>RSS Export и там создаем новый rss канал (у меня это Create New RSS Export Stream).
Опции которые вам надо знать:
RSS Export Stream (Channel) Title - название нашего канала, пишем что угодно.
RSS Description - описание, можно оставить пустым.
RSS Export Stream Image - нам это не нужно, идем дальше.
RSS Export Enabled - конечно Yes :)
RSS Export Includes First Post of Topic - выбираем Yes, тоесть он будет выводить название + первое сообщение топика. Именно то что нам и нужно для новостей.
RSS Export No. Items - количество новостей к експорту. Я ставил 10.
RSS Export Order By Field - выбираем Topic start date. Вывод по очередности.
RSS Export Sort By - ставим Descending (9-0), переводится как "по убывающей".
Export Topics From Forum(s) - вот тут выбираем нужный нам форум "Новости".
RSS Export Cache Frequency - кеширование, нам это не нужно, оставляем пустым.
- Создали? Молодцы :) Запоминаем ссылку на канал, будет что-то ввиде "https://forum.muonline.ru/index.php?app=core&module=global&section=rss&type=forums&id=1"

С самым сложным закончили. Начинаем мучать сайт:
- Ищем файл который выводит новости на сайте. У меня это news.php в папке /sub-pages/.
- Открываем файл, полностью стераем содержимое и копируем туда код rss парсера (дам ниже).
- Закрываем, сохраняем, тестируем, изменяем внешний вид (там где теги <html>) и т.д. Радуемся жизни :)

Вот он парсер:
Спойлер
<?php
function startElement($parser, $name, $attrs) {
global $tag, $rss;
if ($name == 'RSS')
$rss = '^RSS';
elseif ($name == 'RDF:RDF')
$rss = '^RDF:RDF';

$tag .= '^' . $name;
}

function endElement($parser, $name) {
global $tag;
global $itemCount, $items;
if ($name == 'ITEM') {
$itemCount++;
if (!isset($items[$itemCount]))
$items[$itemCount] = array('title' => '', 'link' => '', 'desc' => '', 'pubdate' => '');
}

$tag = substr($tag, 0, strrpos($tag, '^'));
}

function characterData($parser, $data) {
global $tag, $chanTitle, $chanLink, $chanDesc, $rss, $imgTitle, $imgLink, $imgUrl;
global $items, $itemCount;


$rssChannel = '';
if ($data) {
if ($tag == $rss . '^CHANNEL^TITLE') {

$chanTitle .= $data;
} elseif ($tag == $rss . '^CHANNEL^LINK') {

$chanLink .= $data;
} elseif ($tag == $rss . '^CHANNEL^DESCRIPTION') {

$chanDesc .= $data;
}
if ($rss == '^RSS') $rssChannel = '^CHANNEL';


if ($tag == $rss . $rssChannel . '^ITEM^TITLE') {

$items[$itemCount]['title'] .= $data;
} elseif ($tag == $rss . $rssChannel . '^ITEM^LINK') {

$items[$itemCount]['link'] .= $data;
} elseif ($tag == $rss . $rssChannel . '^ITEM^DESCRIPTION') {

$items[$itemCount]['desc'] .= $data;
} elseif ($tag == $rss . $rssChannel . '^ITEM^PUBDATE') {

$items[$itemCount]['pubdate'] .= $data;
} elseif ($tag == $rss . $rssChannel . '^IMAGE^TITLE') {

$imgTitle .= $data;
} elseif ($tag == $rss . $rssChannel . '^IMAGE^LINK') {

$imgLink .= $data;
} elseif ($tag == $rss . $rssChannel . '^IMAGE^URL') {

$imgUrl .= $data;
}
}

}

function parseRSS($url) {

global $tag, $chanTitle, $chanLink, $chanDesc, $rss, $items, $itemCount, $imgTitle, $imgLink, $imgUrl;
$chanTitle = '';
$chanLink = '';
$chanDesc = '';
$imgTitle = '';
$imgLink = '';
$imgUrl = '';
$tag = '';
$rss = '';


global $items, $itemCount;

$itemCount = 0;
$items = array(0 => array('title' => '', 'link' => '', 'desc' => '', 'pubdate' => ''));


$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");


@$fp = fopen($url, "r");
$data = "";
while (true) {

@$datas = fread($fp, 4096);
if (strlen($datas) == 0) {

break;
}
$data .= $datas;
}

@fclose($fp);

if ($data != '') {

$xmlresult = xml_parse($xml_parser, $data);
$xmlerror = xml_error_string(xml_get_error_code($xml_parser));
$xmlcrtline = xml_get_current_line_number($xml_parser);

if ($xmlresult)

displayData();
else
print("Error parsing this feed !<br />Error: $xmlError , at line: $xmlCrtline");
} else {

print("Error while retriving feed $url");
}

xml_parser_free($xml_parser);
}

function displayData() {
global $chanTitle, $chanLink, $chanDesc, $rss, $items, $itemCount, $imgTitle, $imgLink, $imgUrl;
global $items, $itemCount;

?>
<html>
<body>

<td><div style="width: 480px;">
<div id="content"><br>
<table width="480" cellpadding="2" cellspacing="0"><tbody>
<?php
for($i = 0;$i < count($items)-1;$i++) {

echo "<tr valign='top'><td width='40' valign='top'></td><td style='border-bottom: 1px dotted;' width='380' valign='top'><div style='color: rgb(128, 199, 79); font-size: 13px; font-weight: bold;'>".$items[$i]['title']."</div>";
echo "<br>".$items[$i]['desc']."<br></td>";
echo "<td style='border-bottom: 1px dotted; padding-left: 1px;' width='60' valign='top'><a href=".$items[$i]['link'].">Комментировать</a></td></tr>";
}

?>
</tbody></table></div>
</div>
</td>
</body></html>

<?php }

$url=Вот тут какраз та ссылочка на rss канал, с форума;
parseRSS($url);

?>
[свернуть]

Удачи :)

DjSound


Manson

Для воблы и других форумов действия практически идентичны. Парсеру пофиг что у тебя, он кушает только инфу с rss канала.

Барклай

Manson если нетрудна можеш вылажить скрени то что в конечном итоги выходит?

Manson

Цитата: Барклай от 2009 Авг. 05, 17:32  Manson если нетрудна можеш вылажить скрени то что в конечном итоги выходит?
Добавил скриншоты.

DjSound

#5
Manson можеш  обяснить как ленты в белетене добавлять=( а то у меня чет не получается
а лучше в аську напиши=) там удобней будит 7402267

Manson

С воблой 100 лет не работал.

Вообще поидее изначально rss там выключен.
В админке ищи External Data Provider options и врубай там ф-цию RSS. Должно появится новое меню - что-то вроде "RSS Feeds".

Everybody

Цитата: DjSound от 2009 Авг. 06, 09:49  Manson можеш  обяснить как ленты в белетене добавлять=( а то у меня чет не получается
а лучше в аську напиши=) там удобней будит 7402267
Обезательно чтоб за вас ктото делал чтото!?
Поисковик в помощь - https://www.google.lv/search?hl=ru&clie...ta=lr%3Dlang_ru

DjSound

#8
у меня вот что получилось=(
Спойлер
https://217.114.239.183/1/
[свернуть]

Спойлер
адрес до ленты  <noindex>https://217.114.239.183/forum/yarss.php?forum=4</noindex>
[свернуть]

Помогите! зараниие спасибо

Manson

Линк не рабочий, форум закрыт.
Вообще ты по подобному линку сам должен видеть работает rss или нет. Вот смотри как у меня - тырк

Everybody

в корне сайта создать файл rssko.php с кодом.
<?php
function startElement($parser$name$attrs) {
global 
$tag$rss;
if (
$name == 'RSS')
$rss '^RSS';
elseif (
$name == 'RDF:RDF')
$rss '^RDF:RDF';

$tag .= '^' $name;
}

function 
endElement($parser$name) {
global 
$tag;
global 
$itemCount$items;
if (
$name == 'ITEM') {
$itemCount++;
if (!isset(
$items[$itemCount]))
$items[$itemCount] = array('title' => '''link' => '''desc' => '''pubdate' => '');
}

$tag substr($tag0strrpos($tag'^'));
}

function 
characterData($parser$data) {
global 
$tag$chanTitle$chanLink$chanDesc$rss$imgTitle$imgLink$imgUrl;
global 
$items$itemCount;


$rssChannel '';
if (
$data) {
if (
$tag == $rss '^CHANNEL^TITLE') {

$chanTitle .= $data;
} elseif (
$tag == $rss '^CHANNEL^LINK') {

$chanLink .= $data;
} elseif (
$tag == $rss '^CHANNEL^DESCRIPTION') {

$chanDesc .= $data;
}
if (
$rss == '^RSS'$rssChannel '^CHANNEL';


if (
$tag == $rss $rssChannel '^ITEM^TITLE') {

$items[$itemCount]['title'] .= $data;
} elseif (
$tag == $rss $rssChannel '^ITEM^LINK') {

$items[$itemCount]['link'] .= $data;
} elseif (
$tag == $rss $rssChannel '^ITEM^DESCRIPTION') {

$items[$itemCount]['desc'] .= $data;
} elseif (
$tag == $rss $rssChannel '^ITEM^PUBDATE') {

$items[$itemCount]['pubdate'] .= $data;
} elseif (
$tag == $rss $rssChannel '^IMAGE^TITLE') {

$imgTitle .= $data;
} elseif (
$tag == $rss $rssChannel '^IMAGE^LINK') {

$imgLink .= $data;
} elseif (
$tag == $rss $rssChannel '^IMAGE^URL') {

$imgUrl .= $data;
}
}

}

function 
parseRSS($url) {

global 
$tag$chanTitle$chanLink$chanDesc$rss$items$itemCount$imgTitle$imgLink$imgUrl;
$chanTitle '';
$chanLink '';
$chanDesc '';
$imgTitle '';
$imgLink '';
$imgUrl '';
$tag '';
$rss '';


global 
$items$itemCount;

$itemCount 0;
$items = array(=> array('title' => '''link' => '''desc' => '''pubdate' => ''));


$xml_parser xml_parser_create();
xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"characterData");


@
$fp fopen($url"r");
$data "";
while (
true) {

@
$datas fread($fp4096);
if (
strlen($datas) == 0) {

break;
}
$data .= $datas;
}

@
fclose($fp);

if (
$data != '') {

$xmlresult xml_parse($xml_parser$data);
$xmlerror xml_error_string(xml_get_error_code($xml_parser));
$xmlcrtline xml_get_current_line_number($xml_parser);

if (
$xmlresult)

displayData();
else
print(
"Error parsing this feed !<br />Error: $xmlError , at line: $xmlCrtline");
} else {

print(
"Error while retriving feed $url");
}

xml_parser_free($xml_parser);
}

function 
displayData() {
global 
$chanTitle$chanLink$chanDesc$rss$items$itemCount$imgTitle$imgLink$imgUrl;
global 
$items$itemCount;

?>

<html>
<body>

<td><div style="width: 480px;">
<div id="content"><br>
<table width="480" cellpadding="2" cellspacing="0"><tbody>
<?php
for($i 0;$i count($items)-1;$i++) {

echo 
"<tr valign='top'><td width='40' valign='top'></td><td style='border-bottom: 1px dotted;' width='380' valign='top'><div style='color: rgb(128, 199, 79); font-size: 13px; font-weight: bold;'>".$items[$i]['title']."</div>";
echo 
"<br>".$items[$i]['desc']."<br></td>";
echo 
"<td style='border-bottom: 1px dotted; padding-left: 1px;' width='60' valign='top'><a href=".$items[$i]['link'].">Комментировать</a></td></tr>";
}

?>

</tbody></table></div>
</div>
</td>
</body></html>

<?php }

$url="https://news.yandex.ru/computers.rss"// tjanem novosti s yandex lenti o computerah
parseRSS($url);

?>

ЦитироватьС самым сложным закончили. Начинаем мучать сайт:
- Ищем файл который выводит новости на сайте. У меня это news.php в папке /sub-pages/.
- Открываем файл, полностью стераем содержимое и копируем туда код rss парсера (дам ниже).
в самом файле news.php пропишем инклюд рсско.
после <?php
include(rssko.php);
Сохранить и посмотреть результат.
п.с. сначало на нормальной ленте проверить и тгда с форумом эксперементировать советую.

Человек

Хоть у меня и вместо новостей получилась чёрная страница но всёж спасиб ))))
Вариант Эврибади более похож на правду но вот только такой эррор даёт error while retriving feed и дальше http адрес.
Буду благадарен тому кто напишет правильный сособ вывода новостей под IPB 2.3.5/6 )))))

DjSound

Цитата: Everybody от 2009 Авг. 06, 17:31  в корне сайта создать файл rssko.php с кодом.
<?php
function startElement($parser$name$attrs) {
global 
$tag$rss;
if (
$name == 'RSS')
$rss '^RSS';
elseif (
$name == 'RDF:RDF')
$rss '^RDF:RDF';

$tag .= '^' $name;
}

function 
endElement($parser$name) {
global 
$tag;
global 
$itemCount$items;
if (
$name == 'ITEM') {
$itemCount++;
if (!isset(
$items[$itemCount]))
$items[$itemCount] = array('title' => '''link' => '''desc' => '''pubdate' => '');
}

$tag substr($tag0strrpos($tag'^'));
}

function 
characterData($parser$data) {
global 
$tag$chanTitle$chanLink$chanDesc$rss$imgTitle$imgLink$imgUrl;
global 
$items$itemCount;


$rssChannel '';
if (
$data) {
if (
$tag == $rss '^CHANNEL^TITLE') {

$chanTitle .= $data;
} elseif (
$tag == $rss '^CHANNEL^LINK') {

$chanLink .= $data;
} elseif (
$tag == $rss '^CHANNEL^DESCRIPTION') {

$chanDesc .= $data;
}
if (
$rss == '^RSS'$rssChannel '^CHANNEL';


if (
$tag == $rss $rssChannel '^ITEM^TITLE') {

$items[$itemCount]['title'] .= $data;
} elseif (
$tag == $rss $rssChannel '^ITEM^LINK') {

$items[$itemCount]['link'] .= $data;
} elseif (
$tag == $rss $rssChannel '^ITEM^DESCRIPTION') {

$items[$itemCount]['desc'] .= $data;
} elseif (
$tag == $rss $rssChannel '^ITEM^PUBDATE') {

$items[$itemCount]['pubdate'] .= $data;
} elseif (
$tag == $rss $rssChannel '^IMAGE^TITLE') {

$imgTitle .= $data;
} elseif (
$tag == $rss $rssChannel '^IMAGE^LINK') {

$imgLink .= $data;
} elseif (
$tag == $rss $rssChannel '^IMAGE^URL') {

$imgUrl .= $data;
}
}

}

function 
parseRSS($url) {

global 
$tag$chanTitle$chanLink$chanDesc$rss$items$itemCount$imgTitle$imgLink$imgUrl;
$chanTitle '';
$chanLink '';
$chanDesc '';
$imgTitle '';
$imgLink '';
$imgUrl '';
$tag '';
$rss '';


global 
$items$itemCount;

$itemCount 0;
$items = array(=> array('title' => '''link' => '''desc' => '''pubdate' => ''));


$xml_parser xml_parser_create();
xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"characterData");


@
$fp fopen($url"r");
$data "";
while (
true) {

@
$datas fread($fp4096);
if (
strlen($datas) == 0) {

break;
}
$data .= $datas;
}

@
fclose($fp);

if (
$data != '') {

$xmlresult xml_parse($xml_parser$data);
$xmlerror xml_error_string(xml_get_error_code($xml_parser));
$xmlcrtline xml_get_current_line_number($xml_parser);

if (
$xmlresult)

displayData();
else
print(
"Error parsing this feed !<br />Error: $xmlError , at line: $xmlCrtline");
} else {

print(
"Error while retriving feed $url");
}

xml_parser_free($xml_parser);
}

function 
displayData() {
global 
$chanTitle$chanLink$chanDesc$rss$items$itemCount$imgTitle$imgLink$imgUrl;
global 
$items$itemCount;

?>

<html>
<body>

<td><div style="width: 480px;">
<div id="content"><br>
<table width="480" cellpadding="2" cellspacing="0"><tbody>
<?php
for($i 0;$i count($items)-1;$i++) {

echo 
"<tr valign='top'><td width='40' valign='top'></td><td style='border-bottom: 1px dotted;' width='380' valign='top'><div style='color: rgb(128, 199, 79); font-size: 13px; font-weight: bold;'>".$items[$i]['title']."</div>";
echo 
"<br>".$items[$i]['desc']."<br></td>";
echo 
"<td style='border-bottom: 1px dotted; padding-left: 1px;' width='60' valign='top'><a href=".$items[$i]['link'].">Комментировать</a></td></tr>";
}

?>

</tbody></table></div>
</div>
</td>
</body></html>

<?php }

$url="https://news.yandex.ru/computers.rss"// tjanem novosti s yandex lenti o computerah
parseRSS($url);

?>


в самом файле news.php пропишем инклюд рсско.
после <?php
include(rssko.php);
Сохранить и посмотреть результат.
п.с. сначало на нормальной ленте проверить и тгда с форумом эксперементировать советую.


У меня вот что получилось...
Спойлер
https://217.114.239.183/1/
[свернуть]

kr1v

странно.. у меня в место лова "коментировать" вот что ?????????????????????

f1UZ


kr1v

подскажи как правельно будет и куда вписать )

cokpat


Человек

Цитата: cokpat от 2009 Окт. 12, 19:58  Error while retriving feed https://news.yandex.ru/computers.rss

чего ему не хватает
Не хватает включенного allow_url_fopen .

cokpat

Цитата: serz от 2009 Нояб. 01, 16:23  Не хватает включенного allow_url_fopen .

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

Stela

#19
Однажды сам столкнулся с такой проблемой что мне ненравится система новостей на DSW, MuWeb и тд. Посидел, подумал, сделал. Теперь делюсь с вами :)

Как это выглядит?
-Вот мы написали новость на форуме:


- А она появилась на сайте:


Нам понадобится:
- Любой рабочий парсер rss (свой я выложу в конце).
- Одинаковая кодировка у сайта и у форума (я использовал IPB3.0 с UTF-8).
- Доступ в админку форума и к файлам сайта.

Начинаем:
- Заходим в админку IPB, Forums>Manage Forums создаем глобальную категорию а в ней форум "Новости". Это именно то место откуда мы будем экспортировать новости на главный сайт.
- Далее Forums>RSS Management>RSS Export и там создаем новый rss канал (у меня это Create New RSS Export Stream).
Опции которые вам надо знать:
RSS Export Stream (Channel) Title - название нашего канала, пишем что угодно.
RSS Description - описание, можно оставить пустым.
RSS Export Stream Image - нам это не нужно, идем дальше.
RSS Export Enabled - конечно Yes :)
RSS Export Includes First Post of Topic - выбираем Yes, тоесть он будет выводить название + первое сообщение топика. Именно то что нам и нужно для новостей.
RSS Export No. Items - количество новостей к експорту. Я ставил 10.
RSS Export Order By Field - выбираем Topic start date. Вывод по очередности.
RSS Export Sort By - ставим Descending (9-0), переводится как "по убывающей".
Export Topics From Forum(s) - вот тут выбираем нужный нам форум "Новости".
RSS Export Cache Frequency - кеширование, нам это не нужно, оставляем пустым.
- Создали? Молодцы :) Запоминаем ссылку на канал, будет что-то ввиде "https://forum.muonline.ru/index.php?app=core&module=global&section=rss&type=forums&id=1"

С самым сложным закончили. Начинаем мучать сайт:
- Ищем файл который выводит новости на сайте. У меня это news.php в папке /sub-pages/.
- Открываем файл, полностью стераем содержимое и копируем туда код rss парсера (дам ниже).
- Закрываем, сохраняем, тестируем, изменяем внешний вид (там где теги <html>) и т.д. Радуемся жизни :)

===============================

Всё зделал как ты описывал выдаёт Error

Error parsing this feed !
Error: , at line:

Подскажыте что тут нада зделать за рание спасибо.

Похожие темы (5)