Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Php: Rss/xml Парсер - Может кому надо (https://forum.antichat.xyz/showthread.php?t=17963)

Utochka 20.04.2006 16:56

Php: Rss/xml Парсер - Может кому надо
 
PHP код:

<?php
$lenta 
$_GET['lenta'];
$xmlfile $_GET['xmlfile'];

set_time_limit(0);

$file "http://$lenta/$xmlfile";
$rss_channel = array();
$currently_writing "";
$main "";
$item_counter 0;
function 
startElement($parser$name$attrs) {
       global 
$rss_channel$currently_writing$main;
       switch(
$name) {
           case 
"RSS":
           case 
"RDF:RDF":
           case 
"ITEMS":
               
$currently_writing "";
               break;
           case 
"CHANNEL":
               
$main "CHANNEL";
               break;
           case 
"IMAGE":
               
$main "IMAGE";
               
$rss_channel["IMAGE"] = array();
               break;
           case 
"ITEM":
               
$main "ITEMS";
               break;
           default:
               
$currently_writing $name;
               break;
       }
}
function 
endElement($parser$name) {
       global 
$rss_channel$currently_writing$item_counter;
       
$currently_writing "";
       if (
$name == "ITEM") {
           
$item_counter++;
       }
}
function 
characterData($parser$data) {
    global 
$rss_channel$currently_writing$main$item_counter;
    if (
$currently_writing != "") {
        switch(
$main) {
            case 
"CHANNEL":
                if (isset(
$rss_channel[$currently_writing])) {
                    
$rss_channel[$currently_writing] .= $data;
                } else {
                    
$rss_channel[$currently_writing] = $data;
                }
                break;
            case 
"IMAGE":
                if (isset(
$rss_channel[$main][$currently_writing])) {
                    
$rss_channel[$main][$currently_writing] .= $data;
                } else {
                    
$rss_channel[$main][$currently_writing] = $data;
                }
                break;
            case 
"ITEMS":
                if (isset(
$rss_channel[$main][$item_counter][$currently_writing])) {
                    
$rss_channel[$main][$item_counter][$currently_writing] .= $data;
                } else {
                    
//print ("rss_channel[$main][$item_counter][$currently_writing] = $data");
                    
$rss_channel[$main][$item_counter][$currently_writing] = $data;
                }
                break;
        }
    }
}
$xml_parser xml_parser_create();
xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"characterData");
if (!(
$fp fopen($file"r"))) {
    die(
"could not open XML input");
}
while (
$data fread($fp4096)) {
    if (!
xml_parse($xml_parser$datafeof($fp))) {
        die(
sprintf("XML error: %s at line %d",
                    
xml_error_string(xml_get_error_code($xml_parser)),
                    
xml_get_current_line_number($xml_parser)));
    }
}
xml_parser_free($xml_parser);
if (isset(
$rss_channel["ITEMS"])) {
    if (
count($rss_channel["ITEMS"]) > 0) {
        for(
$i 0;$i count($rss_channel["ITEMS"]);$i++) {
            
$title $rss_channel["ITEMS"][$i]["TITLE"];
            
$dest $rss_channel["ITEMS"][$i]["DESCRIPTION"];
//  Тут можно сделать вывод на страницу, или ввод в БД
// $rss_channel["ITEMS"][$i]["элемент"];
        
}
    } else {
        print (
"<b>Нет ничего.</b>");
    }
}
exit;
?>


Talisman 23.04.2006 17:33

Вери биг сенкс! (уже сам половину написал, и тут твою нашел :) )

nerezus 23.04.2006 17:58

ой, а не легче ли просто сделать так:

PHP код:

<?php 
/* 
====================================================================== 
lastRSS usage DEMO 3 - Simple RSS agregator 
---------------------------------------------------------------------- 
This example shows, how to create simple RSS agregator 
    - create lastRSS object 
    - set transparent cache 
    - show a few RSS files at once 
====================================================================== 
*/ 

function ShowOneRSS($url) { 
    global 
$rss
    if (
$rs $rss->get($url)) { 
        echo 
"<big><b><a href=\"$rs[link]\">$rs[title]</a></b></big><br />\n"
        echo 
"$rs[description]<br />\n"

            echo 
"<ul>\n"
            foreach (
$rs['items'] as $item) { 
                echo 
"\t<li><a href=\"$item[link]\" title=\"$item[description]\">$item[title]</a></li>\n"
            } 
            if (
$rs['items_count'] <= 0) { echo "<li>Sorry, no items found in the RSS file :-(</li>"; } 
            echo 
"</ul>\n"
    } 
    else { 
        echo 
"Sorry: It's not possible to reach RSS file $url\n<br />"
        
// you will probably hide this message in a live version 
    



// =============================================================================== 

// include lastRSS 
include "./lastRSS.php"

// List of RSS URLs 
$rss_left = array( 
    
'http://freshmeat.net/backend/fm.rdf'
    
'http://slashdot.org/slashdot.rdf' 
); 
$rss_right = array( 
    
'http://www.freshfolder.com/rss.php'
    
'http://phpbuilder.com/rss_feed.php' 
); 

// Create lastRSS object 
$rss = new lastRSS

// Set cache dir and cache time limit (5 seconds) 
// (don't forget to chmod cahce dir to 777 to allow writing) 
$rss->cache_dir './temp'
$rss->cache_time 1200


// Show all rss files 
echo "<table cellpadding=\"10\" border=\"0\"><tr><td width=\"50%\" valign=\"top\">"
foreach (
$rss_left as $url) { 
    
ShowOneRSS($url); 

echo 
"</td><td width=\"50%\" valign=\"top\">"
foreach (
$rss_right as $url) { 
    
ShowOneRSS($url); 

echo 
"</td></tr></table>"
?>


nerezus 23.04.2006 18:01

lastRSS - зачотный модуль )

Trinux 26.04.2006 04:17

Цитата:

lastRSS - зачотный модуль )
ну ну =)))
http://ru.php.net/manual/ru/ref.xml.php

Talisman 28.04.2006 21:22

Цитата:

Сообщение от Trinux

люди... а где этот... lastRSS взять то??? подскажите, плиз..

nerezus 28.04.2006 21:35

Talisman, докатились. Вбей в гугл это слово и нажми на первую ссылку.

Trinux 28.04.2006 21:38

Цитата:

люди... а где этот... lastRSS взять то??? подскажите, плиз..
2-мя постами выше =)))))))))))))))))))))))))))))))

Talisman 28.04.2006 21:57

Цитата:

Сообщение от nerezus
Talisman, докатились. Вбей в гугл это слово и нажми на первую ссылку.

Спасибо :) а я не в первую тыкал... т.е. не сразу нашел http://lastrss.webdot.cz/ :)


Время: 11:12