Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

RSS мод

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Аватара пользователя
Diesel
phpBB 1.4.1
Сообщения: 45
Стаж: 17 лет 9 месяцев

RSS мод

Сообщение Diesel »

Люди, помогите пожалуйста!
С phpbbhacks ка4нул шикарный мод. Стро4ка новостей бежит сверху на форуме. Мышкой подводишь- останавливается. Цвета поменял, ссылки настроил и т.д. Коро4е мод раскожный.
Но есть проблемма в том, 4то русский он не понимает, а т.е. пишет вместо того 4то надо такие вещи: СДГСРСЕРТЕРТ.. Где менять с UTF8 на win1251 не нашел. Те люди, 4ьи мэйлы указанны как разработ4ики или не отве4ают или понятия не имеют в 4ём дело..
Помогите пожалуйста кто знает. спасибо !
Вот мод:
http://www.phpbbhacks.com/downloads/3401.zip
Вот код:

Код: Выделить всё

<?

    #
    # rss2array
    #
    # example usage:
    #
    #       require("rss2array.php");
    #       $rss_array = rss2array("http://news.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml");
    #       print "<pre>";
    #       print_r($rss_array);
    #       print "</pre>";
    #
    # author: dan@freelancers.net
    #

    #
    # global vars
    #

    global $rss2array_globals;

    #
    # fetch_feed
    #

    function rss2array($url){

        global $rss2array_globals;

        #
        # empty our global array
        #

        $rss2array_globals = array();

        #
        # if the URL looks ok
        #

        if(preg_match("/^http:\/\/([^\/]+)(.*)$/", $url, $matches)){

            $host = $matches[1];
            $uri = $matches[2];

            $request = "GET $uri HTTP/1.0\r\n";
            $request .= "Host: $host\r\n";
            $request .= "User-Agent: RSSMix/0.1 http://www.rssmix.com\r\n";
			$request .= "Connection: close\r\n\r\n";

            #
            # open the connection
            #

            if($http = fsockopen($host, 80, $errno, $errstr, 5)){

                #
                # make the request
                #

                fwrite($http, $request);

                #
                # read in for max 5 seconds
                #

                $timeout = time() + 5;

                while(time() < $timeout && !feof($http)) {

                    $response .= fgets($http, 4096);

                }

                #
                # split on two newlines
                #

                list($header, $xml) = preg_split("/\r?\n\r?\n/", $response, 2);

                #
                # get the status
                #

                if(preg_match("/^HTTP\/[0-9\.]+\s+(\d+)\s+/", $header, $matches)){

                    $status = $matches[1];

                    #
                    # if 200 OK
                    #

                    if($status == 200){

                        #
                        # create the parser
                        #

                        $xml_parser = xml_parser_create();

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

                        #
                        # parse!
                        #

                        xml_parse($xml_parser, trim($xml), true) or $rss2array_globals[errors][] = xml_error_string(xml_get_error_code($xml_parser)) . " at line " . xml_get_current_line_number($xml_parser);

                        #
                        # free parser
                        #

                        xml_parser_free($xml_parser);

                    }

                    else {

                        $rss2array_globals[errors][] = "Can't get feed: HTTP status code $status";

                    }

                }

                #
                # Can't get status from header
                #

                else {

                    $rss2array_globals[errors][] = "Can't get status from header";

                }

            }

            #
            # Can't connect to host
            #

            else {

                $rss2array_globals[errors][] = "Can't connect to $host";

            }

        }

        #
        # Feed url looks wrong
        #

        else {

            $rss2array_globals[errors][] = "Invalid url: $url";

        }

        #
        # unset all the working vars
        #

        unset($rss2array_globals[channel_title]);

        unset($rss2array_globals[inside_rdf]);
        unset($rss2array_globals[inside_rss]);
        unset($rss2array_globals[inside_channel]);
        unset($rss2array_globals[inside_item]);

        unset($rss2array_globals[current_tag]);
        unset($rss2array_globals[current_title]);
        unset($rss2array_globals[current_link]);
        unset($rss2array_globals[current_description]);

        return $rss2array_globals;

    }

    #
    # this function will be called everytime a tag starts
    #

    function startElement($parser, $name, $attrs){

        global $rss2array_globals;

        $rss2array_globals[current_tag] = $name;

        if($name == "RSS"){

            $rss2array_globals[inside_rss] = true;

        }

        elseif($name == "RDF:RDF"){

            $rss2array_globals[inside_rdf] = true;

        }

        elseif($name == "CHANNEL"){

            $rss2array_globals[inside_channel] = true;
            $rss2array_globals[channel_title] = "";

        }

        elseif(($rss2array_globals[inside_rss] and $rss2array_globals[inside_channel]) or $rss2array_globals[inside_rdf]){

            if($name == "ITEM"){

                $rss2array_globals[inside_item] = true;

            }

            elseif($name == "IMAGE"){

                $rss2array_globals[inside_image] = true;

            }

        }

    }

    #
    # this function will be called everytime there is a string between two tags
    #

    function characterData($parser, $data){

        global $rss2array_globals;

        if($rss2array_globals[inside_item]){

            switch($rss2array_globals[current_tag]){

                case "TITLE":
                $rss2array_globals[current_title] .= $data;
                break;
                case "DESCRIPTION":
                $rss2array_globals[current_description] .= $data;
                break;
                case "LINK":
                $rss2array_globals[current_link] .= $data;
                break;

            }

        }

        elseif($rss2array_globals[inside_image]){

        }

        elseif($rss2array_globals[inside_channel]){

            switch($rss2array_globals[current_tag]){

                case "TITLE":
                $rss2array_globals[channel_title] .= $data;
                break;

            }

        }

    }

    #
    # this function will be called everytime a tag ends
    #

    function endElement($parser, $name){

        global $rss2array_globals;

        #
        # end of item, add complete item to array
        #

        if($name == "ITEM"){

            $rss2array_globals[items][] = array(title => trim($rss2array_globals[current_title]), link => trim($rss2array_globals[current_link]), description => trim($rss2array_globals[current_description]));

            #
            # reset these vars for next loop
            #

            $rss2array_globals[current_title] = "";
            $rss2array_globals[current_description] = "";
            $rss2array_globals[current_link] = "";

            $rss2array_globals[inside_item] = false;

        }

        elseif($name == "RSS"){

            $rss2array_globals[inside_rss] = false;

        }

        elseif($name == "RDF:RDF"){

            $rss2array_globals[inside_rdf] = false;

        }

        elseif($name == "CHANNEL"){

            $rss2array_globals[channel][title] = trim($rss2array_globals[channel_title]);

            $rss2array_globals[inside_channel] = false;

        }

        elseif($name == "IMAGE"){

            $rss2array_globals[inside_image] = false;

        }

    }

?>
Аватара пользователя
Diesel
phpBB 1.4.1
Сообщения: 45
Стаж: 17 лет 9 месяцев

Сообщение Diesel »

уважаемые профи, помогите пожалуйста разобраться.
О4ень нужно!
вот полезная ссылка:
http://lastrss.webdot.cz/lastRSS.phps
я там крутил крутил и... :(
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

iconv
Поиск вам поможет.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
direqtor
phpBB 1.4.1
Сообщения: 43
Стаж: 17 лет 10 месяцев
Откуда: Владивосток

Re: RSS мод

Сообщение direqtor »

Diesel писал(а):Где менять с UTF8 на win1251 не нашел. Те люди, 4ьи мэйлы указанны как разработ4ики или не отве4ают или понятия не имеют в 4ём дело..
Помогите пожалуйста кто знает. спасибо !
Судя по коду массив items заполняется в функции function endElement($parser, $name) при обработке завершающего тега ITEM. Там и надо менять кодировку элементов description и title. К примеру для экспорта новостей из win1251 на сайт с кодировкой utf8 код надо заменить на такой:

Код: Выделить всё

$rss2array_globals[items][] = array(title => @iconv('WINDOWS-1251', 'UTF-8', trim($rss2array_globals[current_title])), link => trim($rss2array_globals[current_link]), description => @iconv('WINDOWS-1251', 'UTF-8', trim($rss2array_globals[current_description]))); 

Кодировку link менять не надо - это ссылка с набором символов Latin-1
Аватара пользователя
Diesel
phpBB 1.4.1
Сообщения: 45
Стаж: 17 лет 9 месяцев

Сообщение Diesel »

direqtor

не работает к сожлению :(
пишет, 4то в этой стро4ке ошибка.
посмотрите пожалуйста.
от сюда пытаюсь экспортировать:
http://www.sem40.ru/lenta/yandex/ya-news.html
в windows-1251.
пишу:

Код: Выделить всё

$rss2array_globals[items][] = array(title => @iconv('KOI8-R', 'WINDOWS-1251', trim($rss2array_globals[current_title])), link => trim($rss2array_globals[current_link]), description => @iconv('KOI8-R', 'WINDOWS-1251', trim($rss2array_globals[current_description]))); 
т.е. поменял кодировки, но сна4ала пробовал без всяких изменений.

Добавлено спустя 8 минут 34 секунды:

еще я вы4итал, 4то iconv работает с php5. http://ru.php.net/iconv
может из-за этого проблеммы?
вот:
http://forum.sem40.ru/misc/test/test.php
Аватара пользователя
direqtor
phpBB 1.4.1
Сообщения: 43
Стаж: 17 лет 10 месяцев
Откуда: Владивосток

Сообщение direqtor »

По phpinfo видно, что модуль iconv не загружен. Попробуй подгрузить его самостоятельно, через .htaccess или прямо из кода php. Если не выйдет, то надо просить у твоих хостеров, чтобы они это сделали сами. Мои поставили все по просьбе в течении дня.
Аватара пользователя
Diesel
phpBB 1.4.1
Сообщения: 45
Стаж: 17 лет 9 месяцев

Сообщение Diesel »

direqtor,
нижаший Вам поклон!
Всё работает красиво!
Аватара пользователя
Diesel
phpBB 1.4.1
Сообщения: 45
Стаж: 17 лет 9 месяцев

Сообщение Diesel »

direqtor и кто знает,
помогите еще раз пожалуйста.
история такая:
умолял и ругался с хостером, 4тоб поставил iconv. Он кри4ал, 4то не будет переберать PHP, но в конце под давлением на4альства поставил. - это предисловие.
Суть: лента работала, бегала о4ень хорошо 3 дня. В4ера при входе на форум открывалась просто пустая страница. Т.е. белый лист, никаких ошибок.
Когда в page_header.php я закоментил код мода:

Код: Выделить всё

	require("rss2array.php");
	$rss_array = rss2array("http://news.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml");
	$smy='<marquee direction="left" behavior="scroll" scrollAmount="5" onMouseover="this.scrollAmount=0" onMouseout="this.scrollAmount=5">';
	for ($i=0; $i<sizeof($rss_array['items']); $i++)
	{
		$mytitle=$rss_array['items'][$i]['title'];
		$mylink=$rss_array['items'][$i]['link'];
		$smy.=" [<a href=$mylink target='_blank'>$mytitle</a>]";
	}
	$smy.="</marquee>";
и после

Код: Выделить всё

'T_SPAN_CLASS3' => $theme['span_class3'],
закоментил

Код: Выделить всё

'RSS_NEWS' => $smy,
всё заработало.
Вопрос:
может ли это быть проделка хостера?
или это какой-то глюк?
Заранее спасибо.
Аватара пользователя
mymp
phpBB 1.4.0
Сообщения: 38
Стаж: 17 лет 10 месяцев

Сообщение mymp »

Я извиняюь, на phpbbhacks.com отсутствует данный мод. Не поделитесь?
Или название полное скажите плиз.
Аватара пользователя
Diesel
phpBB 1.4.1
Сообщения: 45
Стаж: 17 лет 9 месяцев

Сообщение Diesel »

mymp писал(а):.....Не поделитесь?
Или название.......
Коне4но, пожалуйста:
http://phpbbhacks.com/download/6507
Мне о4ень важен этот мод, поэтому если у вас будут какие-то новости по нему, о4ень прошу держите в курсе.
спасибо заранее.
Аватара пользователя
mymp
phpBB 1.4.0
Сообщения: 38
Стаж: 17 лет 10 месяцев

Сообщение mymp »

Diesel писал(а):Коне4но, пожалуйста:
http://phpbbhacks.com/download/6507
Мне о4ень важен этот мод, поэтому если у вас будут какие-то новости по нему, о4ень прошу держите в курсе.
спасибо заранее.
Спасибо за ссылку.
Не вопрос, если будут новости - сообщу.

P.S. Классный мод. Поставил - наслаждаюсь. :) Спасибо.
Аватара пользователя
direqtor
phpBB 1.4.1
Сообщения: 43
Стаж: 17 лет 10 месяцев
Откуда: Владивосток

Сообщение direqtor »

Diesel
Вопрос:
может ли это быть проделка хостера?
или это какой-то глюк?
Попробуй посмотреть исходый код даже ПУСТОЙ страницы. Если для русской
страницы с русскими буквами в заголовке принудительно сменить
кодировку на UTF она может не отобразить кракозябры, а просто
исчезнуть из браузера. Происходит это из-за того, что браузер
воспринимает левую угловую скобку закрывающего тега title, как второй
байт последней буквы заголовка.

И попробуй поставить перед этим участком кода error_reporting (E_ALL),
может выдача ошибок просто отключена.

Добавлено спустя 3 минуты:

Diesel
Нашел ссылку на твой форум, смотрю все работает..... :)
Аватара пользователя
antos
phpBB 1.4.1
Сообщения: 44
Стаж: 18 лет
Откуда: Peterburg

Сообщение antos »

Подскажите , а можно с помощью этого мода выводит ленту новостей с сайта, сделанного на Joomla? и расскажите где брать этот iconv и кужа его надо засунуть ? :lol:
С уважением Антон
Аватара пользователя
Diesel
phpBB 1.4.1
Сообщения: 45
Стаж: 17 лет 9 месяцев

Сообщение Diesel »

antos
не могу точно сказать.
профи придут-скажут.
а тут ничего нет?
http://www.joomlaya.com/component/optio ... h&Itemid=5
iconv - модуль, меняет characters.
http://php.rinet.ru/manual/ru/ref.iconv.php
в PHP5 уже стоит, a если там где лежит ваш сайт стоит более ранняя версия, надо его установить.

Добавлено спустя 3 минуты 2 секунды:

direqtor
а я вам писал, что всё работает. :)
хостер случайно залил старый backup без iconv! :evil:
вам еще раз спасибо!
Аватара пользователя
antos
phpBB 1.4.1
Сообщения: 44
Стаж: 18 лет
Откуда: Peterburg

Сообщение antos »

А куда его надо установить и как проверить есть он или нет на хостинге ?

Вернуться в «Поддержка phpBB 2.0.x»