вывод RSS на форум

Автор Customize, 31 марта 2006, 14:20:52

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

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

Customize

Где взять для публикации на главной в Портале SMF ? Подскажите ссылочки  :o пжалуста )) ...

Скрипты адреса и т.д. ...

Спасибо ...

Mavn

http://magpierss.sourceforge.net/
при помощи этого скриптика можно выводить rss новости на форуме или сайте с других ресурсов.
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Patricik

#2
Цитата: Mavn от 05 июня 2006, 13:16:21
http://magpierss.sourceforge.net/
при помощи этого скриптика можно выводить rss новости на форуме или сайте с других ресурсов.

А как и куда онс тавится, если не секрет? Форум не захотел его

Пакет, который Вы пытаетесь загрузить, не является пакетом модификации или поврежден. Здесь:    1.

      How do I install MagpieRSS?

      See: http://laughingmeme.org/magpie_blog/?p=80

все мертво нынче.


Mavn

а с чего ты взял что он устанавливается как мод? это просто обычный парсер руками прикручивается к smf после чего в нужном место прописывается код и получаешь парсер rss твои новости выводятся в нужном месте в нужном количестве
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Patricik

у них не работает ссылка, где сказано как ставить этот парсер(

Mavn

#5
файл  index.php вставить

//RSS-mod
require_once('magpierss/rss_fetch.inc');
//RSS-mod

в случае если скрипт находится в директории с форумом в папке magpierss

Потом в index.template.php сделать что то типа этого в нужном месте


//RSS-mod
echo '
<table width="100%" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td>';

$url = 'http://www.simplemachines.ru/index.php?type=rss;action=.xml';
$rss = fetch_rss($url);

echo "Site: ", $rss->channel['title'], "<br>
";
foreach ($rss->items as $item ) {
$title = $item[title];
$url   = $item[link];
echo "<a href=$url>$title</a></li><br>
";
}
echo '
</td>
  </tr>
</table>
';
//RSS-mod


Настройки делаются в самом парсере
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Patricik


alex_r

Приветствую всех!!!

Скажите плиз, есть информер и хотелось-бы чтобы те новости, которые пробегают в информере отображались и на форуме, код информера такой:  <script src='http://информер.php?num=5'></script>

Понятно, что адрес был изменен 

Желательно, чтобы это было сбоку, если таколе низя, то где угодно...

Расскажите где и что нужно изменить

Файла header или типа этого нет, а куда прописать это все не понятно  >:(

Mavn

внимательно посмотрите на форуме есть решение данной задачи. Достаточно прикрутить rss парсер что в общем не сложно и пример приведен. Относительно размещения самого блока это уж как говорится как сделаете так и будет
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

alex_r

Видел нашел: http://www.simplemachines.ru/index.php?topic=422.0, но он меня переадресовывает на адрес: http://www.simplemachines.ru/index.php так что трабла осталась!

Mavn

SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

alex_r

Понятно, спасибо, теперь далее, как его установить?
Т.е. Я беру заливаю к примеру по фтп на свой сервак?
А, потом?
Если можно то распишите что за чем делать

Mavn

1. качаешь сам rss парсер распаковываешь его в директорию magpierss
2. закачиваешь директорию в корень форума
3. следуешь вышеприведеной инструкции
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

valaridz

Цитата: Mavn от 19 ноября 2006, 23:10:56
1. качаешь сам rss парсер распаковываешь его в директорию magpierss
2. закачиваешь директорию в корень форума
3. следуешь вышеприведеной инструкции
Вроде все ок. Единственно проблемы с кодировкой при отображении rss на форуме - все вопросики.
Хотя локально без проблем по русски, также просмотр rss-канала дает нормальный русский.
Где-то в скрипте MagpieRSS копаться? или в чем может быть проблема.
Форум версии 1.1.1

valaridz

Разобрался немного, оказывается MagpieRSS не поддерживает win1251.
Значит данное решение только для форума в кодировке utf-8.
Или все-таки можно решить?

valaridz

перерыл несколько форумов, где пытались прикрутить MagpieRSS в кодировке win-1251.
Ничего из предложенных решений не помогло.
В конце концов поставил совсем простой парсер, состоящий из одного файла - RSS Fetch Version 0.4.3.
Может кому пригодится.

Mavn

не принципиально какой rss парсер использовать ! можно использовать обсалютно любой парсер и в частности прикрутить его так чтобы через админку все делалось
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

dillinger

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

спасибо

Iscander

На локальном кодировка в UTF-8, пытаюсь отобразить собственные новости.
Новости идут нормально:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="0.92" xml:lang="ru-RU.utf8">

А при выводе через RSS парсер - только вопросы.
Поменял в классе:
    var $encoding       = '';       // output encoding of parsed rss
на
    var $encoding       = 'UTF-8';     
те же самые вопросы
Как от этого избавиться?
Я против Режь Публику.
Мой ответ Михаилу Романову: Конституционная Монархия

adold

Вопрос Mavn. Я не силен в ПХП, а в какое именно место в файле index.template.php вставлять этот код? если я хочу выводить RSS в одной из тем?

//RSS-mod
echo '
<table width="100%" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td>';

$url = 'http://www.simplemachines.ru/index.php?type=rss;action=.xml';
$rss = fetch_rss($url);

echo "Site: ", $rss->channel['title'], "<br>
";
foreach ($rss->items as $item ) {
$title = $item[title];
$url   = $item[link];
echo "<a href=$url>$title</a></li><br>
";
}
echo '
</td>
  </tr>
</table>
';
//RSS-mod
Всякое бывает, но не с каждым...

adold

Подскажите, как в этом скрипте сделать, чтобы заголовки RSS лент, показывались не как ссылки, а как простой текст...?
т.е. чтобы нельзя было перейти на сайт "донор RSS"...


class rss_parser {
  var $update_interval = 60;
  /* How often to fetch the rss file
     A cached version will be used between updates    */

  var $data_directory = "/home/neoprog/www/code/rss";
  /* Where to store the rss data from the feeds
     Note: an absolute path is better than a relative path here
     unless you plan on keeping the script to display the feeds
     in the same folder as this file and the feeds.   */



  /* NO NEED TO EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING  */


  var $rss_url;
  var $num_to_show;
  var $offset;  //added in version 0.4.3
  var $do_update;
  var $tags = array();
  var $content;
  var $rss = array();

  var $feed_title;
  var $feed_link;
  var $feed_description;

  var $my_html;

  function rss_parser($url, $numtoshow = 10, $html = "", $update = FALSE, $offset = 1)
  {
    $this->rss_url = $url;
    $this->num_to_show = $numtoshow;
    $this->do_update = $update;
    $this->my_html = preg_replace("/(#{.*?):(.*?})/", "\\1__\\2", $html); //xx:xx tag workaround
    $this->offset = --$offset;

    $this->content = $this->fetch_feed();
    $this->parse_feed();
    $this->show();
  }


  /* string */
  function fetch_feed()
  {
    $url_parts = parse_url($this->rss_url);

    $filename = $url_parts['host'] . str_replace("/", ",", $url_parts['path']) . "_" . @$url_parts['query'];
    if(file_exists($this->data_directory . "/$filename")) {
      $last = filemtime($this->data_directory . "/$filename");
      $create = 0;
      if(time() - $last > $this->update_interval * 60 || $this->update_interval == 0) {
        $update = 1;
      } else {
        $update = 0;
      }
    } else {
      $create = 1;
      $update = 1;
    }

    if($create == 1 || ($this->do_update == TRUE && $update == 1)) {
      $fp = @fsockopen($url_parts['host'], 80, $errno, $errstr, 5);
      if (!$fp) {
        echo "Couldn't open rss feed {$this->feed_url} in {$_SERVER['PHP_SELF']}<br />\n";
        return;
      }

      fputs($fp, "GET {$this->rss_url} HTTP/1.0\r\n"
                ."Host: " . $url_parts['host'] . "\r\n"
                ."User-Agent: Drew's RSS Reader 0.1\r\n"
                ."Connection: Close\r\n\r\n");

      while(!feof($fp)) {
        $rss_data .= @fread($fp, 1024);
      }

      list(, $rss_data) = explode("\r\n\r\n", $rss_data, 2);

      $output = @fopen($this->data_directory . "/$filename", "w+b");
      if(!$output) {
        return $rss_data;
      } else {
        flock($output, LOCK_EX);
        fputs($output, $rss_data);
        flock($output, LOCK_UN);
        fclose($output);
      }
    } //update

    return file_get_contents($this->data_directory . "/$filename");
  }

  /* void */
  function parse_feed()
  {
    preg_match("/<title>(.*?)<\/title>/", $this->content, $title);
    $this->feed_title = @$title[1];

    preg_match("/<link>(.*?)<\/link>/", $this->content, $link);
    $this->feed_link = @$link[1];

    preg_match("/<description>(.*?)<\/description>/", $this->content, $description);
    $this->feed_description = @$description[1];

    preg_match_all("/<item[^>]*>(.*?)<\/item>/s", $this->content, $items);
    if (sizeof($items[0]) == 0) {
      echo "No item elements found in rss feed.<br />\n";
    }

    for($i = 0; $i < sizeof($items[0]); ++$i) {
      preg_match_all("/(?:<([\w:]*)[^>]*>\s*(?:<!\[CDATA\[)?(.*?)(?:]]>)?\s*<\/\\1>)+?/si", preg_replace("/<item[^>]*>/", "", $items[0][$i]), $elements);
      for($j = 0; $j < sizeof($elements[0]); ++$j) {
        $elements[1][$j] = str_replace(":", "__", $elements[1][$j]);  //regex fix for items with : like dc:date
        $this->rss[$i][$elements[1][$j]] = trim($this->unhtmlentities($elements[2][$j]));
      }
    }
  }


  /* void */
  function show()
  {
    if($this->my_html == "") {
      $this->show_html();
    } else {
      $this->show_user_html();
    }
  }

  function show_html()
  {
    $show = (sizeof($this->rss)  > $this->num_to_show ? $this->num_to_show : sizeof($this->rss));
    for($i = $this->offset; $i < $this->offset + $show; ++$i) {
      echo "- <a href=\"{$this->rss[$i]['link']}\" target=\"_new\">{$this->rss[$i]['title']}</a><br />\n";
    }
  }

  function show_user_html()
  {
    $show = (sizeof($this->rss) > $this->num_to_show + $this->offset ? $this->num_to_show : sizeof($this->rss));
    $show = ($this->offset + $this->num_to_show > sizeof($this->rss) ? sizeof($this->rss) - $this->offset : $this->num_to_show);
    for($i = $this->offset; $i < $this->offset + $show; ++$i) {
      extract($this->rss[$i]);
      $item = preg_replace("/#\{([^}]+)}/e", "$\\1", $this->my_html);
      echo $item;
    }
  }

  function unhtmlentities($string)
  {
    // replace numeric entities
    $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
    $string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string);
    // replace literal entities
    $trans_tbl = get_html_translation_table(HTML_ENTITIES);
    $trans_tbl = array_flip($trans_tbl);
    return strtr($string, $trans_tbl);
  }

} // end class

?>
Всякое бывает, но не с каждым...

RKA KriK

А как это чудо встроить в "блок новостей" на форуме?