php rss reader do mysql
Ahoj,
v následujícím kódu čtu rss zdroje z tabulky, přes funkci fetch_rss je načtu a v následující smyčce foreach je naházím do druhej tabulky. Problém je v tom, že takhle se mi do tabulky uloží kompletní výpis ze zdrojů, bez ohledu na to, jestli už v tabulce jsou. Potřeboval bych tímhle skriptem rss zdroje projít a do tabulky přidat jen nové zdroje.
Šlo by to nějak? Napadá mě akorát získat posledni timestamp z tabulky a pak přidat jen ty články, co mají timestamp novější. Jako že by se v tej smyčce while zjistilo z tabulky timestamp a pak se v tom INSERT INTO dala podmínka jen pro novější timestamp.Neví někdo jak na to? Za každý nakopnutí děkuji :)
Bublifuk
<?
include("db_connect.php");
require_once('rss_fetch.inc');
$query = Mysql_Query("SELECT id, url_syndicate, language FROM sources ORDER BY id")or Die(MySQL_Error());
While ($data = MySQL_Fetch_Array($query))
{
$rss = fetch_rss( $data["url_syndicate"] );
$language=$data["language"];
$sourceid=$data["id"];
foreach ($rss->items as $item )
{
$language=$data["language"];
$sourceid=$data["id"];
$title=addslashes($item['title']);
$link=$item['link'];
$pubdate=$item['pubdate'];
$author=addslashes($item['author']);
$summary=addslashes($item['summary']);
$timestamp=$item['date_timestamp'];
MySQL_Query("INSERT INTO `syndicate` (`id`, `source_id`, `author`, `header`,`body`, `url`, `date`, `timestamp`, `language`) VALUES ('', '$sourceid', '$author', '$title', '$summary', '$link', '$pubdate', '$timestamp', '$language')")or Die(MySQL_Error());
};
};
?>
Tak jak navrhuješ by to šlo.
Před While si dáš SELECT MAX(timestamp) FROM syndicate a přiřadíš jej do nějaké proměnné (třeba $max_timestamp).
A u INSERTu přidáš podmínku ...WHERE timestamp>=$max_timestamp
Každopádně bys měl mít ošetřený nějaký unikátní klíč (to ID), aby nemohly být v tabulce dva stejné záznamy...
díky.
INSERT jsem radši řešil IFem, aby se vůbec nevolal když není potřeba. jenže ten SELECT MAX mi nevrací maximální hodnotu co je ve sloupci, ale Resource id #10
Chybí ti tam MySQL_Fetch_Array. Nemůžeš hned do $max_timestamp přiřadit SQL dotaz.
jojo, máš pravdu , dík