[ laponac84 @ 31.05.2011. 19:42 ] @
pokusavam da napravim rss citac

evo koda za index.php fajl

Code:
<header>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</header>
<body style=" font-family: verdana; font-size:12px; width:100%; background:#383838;">
<div style="text-align:justify; padding: 10px; width:400px; margin-left: auto; margin-right: auto; margin-top:25px; background:#ffffff;"><?php>
        
        $rss = new SimpleXMLElement('http://www.naslovi.net/rss/sport/', null, true);
        
        echo "<h1><a href='{$rss->channel->link}'>{$rss->channel->title}</a></h1>".PHP_EOL.'<hr />'.PHP_EOL;
        
        foreach($rss->xpath('channel/item') as $item)
            {
                    echo <<<EOF
                    
                <div style='font-size:14px;'><h2><a href='{$item->link}'>{$item->title}</a></h2></div>
                <div>{$item->description} </br></div>
                <div>{$item->image}</div>
                <div style='font-size:9px;'></br>Objavljeno: {$item->pubDate}</div>
                <hr>

EOF;
}
?>

</div>
</body>


kako da u okviru ovog koda prikazem sliku po svakon naslovu koji postoji u rss?

hvala
[ ivan.a @ 01.06.2011. 03:12 ] @
Ovaj feed je bez slika tako da ćeš ručno morati da "parsiraš" svaki link i prikazuješ sliku odatle, što će usporiti učitavanje rss feed-a. Problem je samo što trebaš znati koju sliku tačno (čini mi se da je ovaj element u pitanju za svaki naslov <div class="img"> )
[ laponac84 @ 01.06.2011. 07:40 ] @
Hvala,

Podpitanje, da li je moguce kodom "uhvatiti" prvu sliku na koju se naidje ? u delu <content:encoded> rss-a su objavljene slike?
[ VladaSu @ 01.06.2011. 09:52 ] @
Mislim da i treba da uhvatis sliku iz content:encoded. Mozes sa regular expression.
[ ivan.a @ 01.06.2011. 15:28 ] @
Code:
Izbrisan kod...

Mada može i bolje.

Dodatak: Sada vidim da ima i content:encoded.

Probaj ovako:
Code:
<header>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</header>
<body style=" font-family: verdana; font-size:12px; width:100%; background:#383838;">
<div style="text-align:justify; padding: 10px; width:400px; margin-left: auto; margin-right: auto; margin-top:25px; background:#ffffff;"><?php>
        
        //$rss = new SimpleXMLElement('http://www.naslovi.net/rss/sport/', null, true);
        
$data = file_get_contents('http://www.naslovi.net/rss/sport/');
    $data = str_replace("content:encoded>","content>",$data);
    $xml = simplexml_load_string($data);
    $item = $xml->channel;
    
    foreach($item->item AS $art)
    {
        echo "<div><a href='".$art->link."'>".$art->title."</a></div>". $art->content."<hr />";
    }
?>

</div>
</body>


[Ovu poruku je menjao ivan.a dana 01.06.2011. u 16:58 GMT+1]
[ Br@nkoR @ 01.06.2011. 15:51 ] @
Nema potrebe za dodatnim učitavanjem posebnih vesti, npr ovo što je napisao @VladaSu
Code:

<header>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</header>
<body style=" font-family: verdana; font-size:12px; width:100%; background:#383838;">
  <div style="text-align:justify; padding: 10px; width:400px; margin-left: auto; margin-right: auto; margin-top:25px; background:#ffffff;">
  <?php
    $rss = new SimpleXMLElement('http://www.naslovi.net/rss/sport/', null, true);
    $ns = $rss->getNamespaces(true);
    echo "<h1><a href='{$rss->channel->link}'>{$rss->channel->title}</a></h1>".PHP_EOL.'<hr />'.PHP_EOL;
    foreach($rss->xpath('channel/item') as $item)
    {
      preg_match('/<img[^>]+>/', $item->children($ns['content'])->encoded, $match);
      $item->image = $match[0];    
      echo <<<EOF
        <div style='font-size:14px;'><h2><a href='{$item->link}'>{$item->title}</a></h2></div>
        <div>{$item->description} </br></div>
        <div>{$item->image}</div>
        <div style='font-size:9px;'></br>Objavljeno: {$item->pubDate}</div>
        <hr>
EOF;
    }
  ?>
</div>
</body>


ili:
Code:

<header>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</header>
<body style=" font-family: verdana; font-size:12px; width:100%; background:#383838;">
  <div style="text-align:justify; padding: 10px; width:400px; margin-left: auto; margin-right: auto; margin-top:25px; background:#ffffff;">
  <?php
    $rss = new SimpleXMLElement('http://www.naslovi.net/rss/sport/', null, true);
    echo "<h1><a href='{$rss->channel->link}'>{$rss->channel->title}</a></h1>".PHP_EOL.'<hr />'.PHP_EOL;
        
    foreach($rss->xpath('channel/item') as $item)
    {
      $result = $item->xpath('content:encoded');
      preg_match('/<img[^>]+>/', $result[0], $match);
      $item->image = $match[0];
      echo <<<EOF
        <div style='font-size:14px;'><h2><a href='{$item->link}'>{$item->title}</a></h2></div>
        <div>{$item->description} </br></div>
        <div>{$item->image}</div>
        <div style='font-size:9px;'></br>Objavljeno: {$item->pubDate}</div>
        <hr>
EOF;
    }
  ?>
</div>
</body>

[ laponac84 @ 01.06.2011. 15:53 ] @
Hvala, problem je resen :)
[ ivan.a @ 01.06.2011. 15:54 ] @
Da, nisam video da u izvornom RSS-u ima content:encoded elemente. Tako je mnogo lakše...
[ laponac84 @ 01.06.2011. 16:43 ] @
http://moravaprom.com/ebchost/

ovde mozete videti rezultat.

Tek sada vidim i ostala dva primera, probacu i njih, hvala najlepse :)
[ ivan.a @ 01.06.2011. 20:55 ] @
Zašto ne keširaš rss feed (snimiš rezultat kao html) na recimo par sati? Mnogo je brže i uzima manje resursa, a nije teško da se uradi.
[ laponac84 @ 03.06.2011. 12:36 ] @
Nesto slicno sam imao na umu

mislim na bazu podataka sa potpuno istim karakteristikamam, izvorima, linkovima... razvrstanu po kategorijama (vrstama sportova) ... sada se trenutno to pokusavam
[ laponac84 @ 05.06.2011. 21:01 ] @
Malo je zakocilo.

pokusavam da prikupljene podatke upisem u bazu ali dobijam sledecu gresku

PHP Parse error: syntax error, unexpected $end in /home/.../main.php on line 33

znam da je problem u delu koda koji sam oznacio izmedju /* tagova */ gde se nalazi kod za konekciju i upis u bazu podataka

kod sam nasao na netu


Code:
<?php
        
        $rss = new SimpleXMLElement('rssizvor', null, true);
        
        foreach($rss->xpath('channel/item') as $item)
            {
            
            $dom = new DOMDocument();
                 @$dom->loadHTMLFile($item->link);
                 $xpath = new DOMXPath($dom);
                 $entries = $xpath->query('//div[@class="img"]//img');
                 foreach($entries as $e)
                 $image = "<img src='".$e->getAttribute("src")."'alt='' width='150'/>";
                 $naslov = $item->title;
            $opis = $item->description;
            $sadrzaj = $item->content;
            $izvor = "<a href='{$item->link}'>{$rss->channel->title}</a>";
            $objavljeno1 = $item->pubDate;
            $objavljeno2 = $item->pubdate;
            $slikaurl = $e->getAttribute("src");

/*
            $konekcija = mysql_connect("", "", "") or die ("Parametri za povezivanje sa bazom nisu dobri, ili baza ne postoji!");
            $baza = mysql_select_db(" ", $konekcija) or die ("Na zalost, server nije u mogucnosti da pronadje bazu podataka!");

                  $podaci = <<<EOF
                INSERT INTO rss_vesti VALUES ('', '', {$item->title}, {$slikaurl}, {$opis}, {$item->link}, {$item->pubdate});
                EOF;
            $req = mysql_query($podaci,$konekcija);*/
                

            }
?>


napomena: podatke za konekciju sam izbacio iz ovog koda
[ ivan.a @ 05.06.2011. 21:06 ] @
Nije baš preporučljivo da stavljaš INSERT u petlji (mada nije strašno).

Bolje prvo pripremi "output" za bazu podataka pa posle ubaci sve odjednom.
Zašto uopšte koristiš bazu podataka? Ako hoćeš da arhiviraš rss feed onda ok, ali ako ti služi samo za prikaz najnovijih tema, onda je mnogo bolje keširati sadržaj u vidu HTML fajla i onda samo proveravati "starost" fajla. Ako je fajl stariji od npr. 1-2 sata ponovo ga keširaj, u suprotnom prikaži stari (keširani) sadržaj. Tako je neuporedivo brže i praktičnije.

Dodatak: Upit ti nije dobar. Ne treba ti EOF i stavljaj navodnike.
Code:
$podaci = "INSERT INTO rss_vesti VALUES ('','', '".$item->title.", '".$slikaurl."', '".$opis."', '".$item->link."', '".$item->pubdate."')";
[ laponac84 @ 05.06.2011. 21:18 ] @
iskreno, zelim da napravim nesto sto bi bio rss katalog sajtova, mesto gde ce svako moci da se registruje i unese svoj rss link da bi reklamirao svoje proizvode, usluge i sl...

takodje zelim da pruzim mogucnost korisniku da uredi same podatke na sjtu

Code:
Bolje prvo pripremi "output" za bazu podataka pa posle ubaci sve odjednom. 


mozes li mi prikazati primer, posto te ne razumem u potpunosti, jer me buni to kako izvesti ucitavanje svih podataka pa ih onda inserovati od jednom

hvala
[ laponac84 @ 05.06.2011. 22:01 ] @
tek sada vidim navedeni kod, na zalost nemam ni jedan upis u tabeli, zato sam i mislio da je potreban EOF, ali sa njim se javlja greska koju sam naveo
Predlog ?
[ laponac84 @ 06.06.2011. 00:33 ] @
Hvala, uspeo sam
Code:

<?php
header('Content-Type: text/html; charset=utf-8');
    $konekcija = mysql_connect("", "", "") or die ("Parametri za povezivanje sa bazom nisu dobri, ili baza ne postoji!");
    $baza = mysql_select_db("", $konekcija) or die ("Na zalost, server nije u mogucnosti da pronadje bazu podataka!");

        
        $rss = new SimpleXMLElement('http://www.naslovi.net/rss/sport/', null, true);
        
        foreach($rss->xpath('channel/item') as $item)
            {
            
            $dom = new DOMDocument();
                 @$dom->loadHTMLFile($item->link);
                 $xpath = new DOMXPath($dom);
                     $entries = $xpath->query('//div[@class="img"]//img');
                     foreach($entries as $e)
                         $image = "<img src='".$e->getAttribute("src")."'alt='' width='150'/>";
                 $naslov = $item->title;
            $opis = $item->description;
            $sadrzaj = $item->content;
            $izvor = "<a href='{$item->link}'>{$rss->channel->title}</a>";
            $url = $item->link;
            $datum1 = $item->pubDate;
            $datum2 = $item->pubdate;
            $urlslike = $e->getAttribute("src");
            echo "$naslov, $opis, $sadrzaj, $izvor,, $url, $datum1, $datum2, $urlslike </br></br>";
            
   $sql="INSERT INTO rss_vesti VALUES('','','$naslov','$urlslike','$opis','$url','$datum2')";
   mysql_query($sql,$konekcija);
                

            }
?>
[ ManInTheBox @ 06.06.2011. 00:50 ] @
Problem sa EOF ti je bio zato sto si imao razmake (space) pre identifikatora EOF
http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

Pokusaj prvo da generises sql pa po izlasku iz foreach izvrsi upit (bulk - mnogo brzi insert):

Code (php):

$sql = "INSERT INTO rss_vesti VALUES ";
foreach ($rss->xpath('channel/item') as $item)
{
    ...
    $sql .= "('','','$naslov','$urlslike','$opis','$url','$datum2'),";
}
// zameni poslednji zarez sa tacka-zarez
$sql{strlen($sql) - 1} = ';';
mysql_query($sql,$konekcija);
 


Napamet pisem pa se nadam da nema gresaka

Pozdrav
[ laponac84 @ 06.06.2011. 07:26 ] @
hvala :)

probacu i ovo
[ laponac84 @ 07.06.2011. 10:55 ] @
Uspeo sam sve sto sam naumio od osnovnih stvari (registracija, prijava, odjavava korisnika, profilna stranica sa pregledom upisanih sajtova i rss linkova, kao i upis rss vesti u bazu podataka.

ali nije sve tako sjajno :)

Dva problema:

1. sa vecim brojem sajtova vracam se na polazni problem, SLIKA :)
ukoliko imam u bazi vise sajtova (vise razlicitih rss-ova) moze se desiti da u razlicitim elementima rss-a imam sliku, ili je nemam nigde.

pogledajte primer u kome imam dva sajta sa rss-ovima u bazi podataka.
http://moravaprom.com/ebchost/main.php

obratite paznju na drugi sajt kada pocne da se izlistava, ponavlja se slika prvog izvora, jer encoded dela ovde nema, tako da izlistava samo zadnju vrednost za $urlslika
a prikazuje i sliku iz description dela koju vec ima u sebi

2. problem je problem brzine

bilo je reci o tome u ovoj temi, ali nisam bas nesto razumeo najasnije...

Code:

<?php
header('Content-Type: text/html; charset=utf-8');
    $konekcija = mysql_connect("nesto", "nesto", "nesto") or die ("Parametri za povezivanje sa bazom nisu dobri, ili baza ne postoji!");
    $baza = mysql_select_db("nesto", $konekcija) or die ("Na zalost, server nije u mogucnosti da pronadje bazu podataka!");
    
    $sajtovi = mysql_query ("SELECT * FROM rss_sajtovi") or die(mysql_error());
    while($row = mysql_fetch_array( $sajtovi ))
        {
            $id_sajta = $row['ID_SAJTA'];
            $naziv = $row['NAZIV'];
            $url = $row['URL'];
            $rss = $row['RSS'];
            $kategorija = $row['kategorija'];
            echo "<h1>$id_sajta / $naziv / $url/ $rss / $kategorija </h1><hr></br>";
                $rss = new SimpleXMLElement($rss, null, true);
        
                foreach($rss->xpath('channel/item') as $item)
                    {
                        $dom = new DOMDocument();
                             @$dom->loadHTMLFile($item->link);
                             $xpath = new DOMXPath($dom);
                             $entries = $xpath->query('//div[@class="img"]//img');
                             
                             foreach($entries as $e)
                             $image = "<img src='".$e->getAttribute("src")."'alt='' width='150'/>";
                             
                             $naslov = $item->title;
                        $opis = $item->description;
                        $sadrzaj = $item->content;
                        $izvor = "<a href='{$item->link}'>{$rss->channel->title}</a>";
                        $url = $item->link;
                        $datum1 = $item->pubDate;
                        $datum2 = $item->pubdate;
                        $urlslike = $e->getAttribute("src");
                        echo "$naslov, $opis, $sadrzaj, $izvor,, $url, $datum1, $datum2, <img src='$urlslike'/> </br></br>";
            
                           //$sql="INSERT INTO rss_vesti VALUES('','$id_sajta','$naslov','$urlslike','$opis','$url','$datum2')";
                           //mysql_query($sql,$konekcija);
                
                    }
        }
?>

[ ivan.a @ 08.06.2011. 01:37 ] @
Mislim da trebaš osmisliti strukturu i logiku koda za unos i prikazivanje podataka, jer kod tebe se u isto vreme parsira RSS Feed i importuju podaci u bazu podataka (i to sve u jednoj petlji - petlja u petlji). :)

Ako hoćeš da se ista slika ne prikazuje više puta stavi $urlslike = ""; odmah posle prikazivanja (ili ubacivanja u bazu podataka). Na taj način "resetuješ" $urlslike.

Code:
foreach ($rss->xpath('channel/item') as $item)
{
    ...
    $sql .= "('','','$naslov','$urlslike','$opis','$url','$datum2'),";
    $urlslike = "";
}


Dakle, razdvoj kod za INSERT i kod za prikazivanje Feed-ova (koristi insert kao što sam napisao gore, a primer za to je napisao ManInTheBox. )
[ laponac84 @ 08.06.2011. 07:42 ] @
Prikaz rss-a je samo trenutni da bi mi olaksao rad na zadatku koji sam sebi postavio, odnosno da ni bih stalno preturao po bazi da vidim sta sam upisivao i kasnije brisao podatke iz baze dok radim na kodu.

hvala za kod
[ laponac84 @ 08.06.2011. 08:01 ] @
$urlslike = ""; ne daje rezultate i ako sam je stavio i na mesto pre samog ucitavanja url-a slike
[ ivan.a @ 09.06.2011. 00:52 ] @
Code:
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
  <div>
  <?php
    $rss = new SimpleXMLElement('http://www.naslovi.net/rss/sport/', null, true);
    $ns = $rss->getNamespaces(true);
    ?><h1><a href='<?php echo $rss->channel->link; ?>'><?php echo $rss->channel->title; ?></a></h1>
    <hr /><?php
    
    foreach($rss->xpath('channel/item') as $item)
    {
      preg_match('/<img[^>]+>/', $item->children($ns['content'])->encoded, $match);
      $item->image = $match[0]; 
      $naslov = $item->title;
      $link   = $item->link;
      $slika  = $item->image;
      $opis   = $item->description;
      $datum  = $item->pubDate;
      ?>
        <div><h2><a href='<?php echo $link;?>'><?php echo $naslov;?></a></h2></div>
        <div><?php echo $opis; ?></br></div>
        <div><?php echo $slika; ?></div>
        <div></br>Objavljeno: <?php echo $datum;?></div>
        <hr>
<?php
    }
  ?>
</div>
</body>
</html>


To je za prikaz RSS Feed-a.
Kod za insert van petlje (samo jedan upit).
Code:
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
  <div>
  <?php
    $rss = new SimpleXMLElement('http://www.naslovi.net/rss/sport/', null, true);
    $ns = $rss->getNamespaces(true);
    ?><h1><a href='<?php echo $rss->channel->link; ?>'><?php echo $rss->channel->title; ?></a></h1>
    <?php echo PHP_EOL?><hr /><?php echo PHP_EOL;
    $sql = "INSERT INTO `rss_vesti` VALUES";
    foreach($rss->xpath('channel/item') as $item)
    {
      preg_match('/<img[^>]+>/', $item->children($ns['content'])->encoded, $match);
      $item->image = $match[0]; 
      $naslov = $item->title;
      $link   = $item->link;
      $slika  = $item->image;
      $opis   = $item->description;
      $datum  = $item->pubDate;
      
      $sql.="('','','".$naslov."','".$slika."','".$opis."','".$link."','".$datum."'),";
    }
    //KRAJ PETLJE - INSERT upit
    $sql = substr($sql,0,-1).";";
    $result = mysql_query($sql,$konekcija);
  ?>
</div>
</body>
</html>