Извличане на RSS с Mysql

joorkataa

Registered
Търсих готови скриптове за извличане на RSS и самите новини да се вкарват в Mysql с линка от сайта който го взима , но не можах да намеря такъв скрипт, то има но е само за Wordpress.
 
Тоест, искаш да взимаш информация от отдалечени сайтове, които предлагат RSS информация и да добавяш информацията в твоя сайт (в базата данни) или греша?

В такъв случай, ще трябва да използваш file_get_contents($url); или cURL

П.П. Виж това: http://code.google.com/p/rssingest/
 
PHP:
$rss = simplexml_load_file("http://link");


После в цъкъл си вадиш резултатите и може да си отделяш разни елементи от тука да добавяш да променяш цялата информация и т.н.
 
nom3r1 каза:
Тоест, искаш да взимаш информация от отдалечени сайтове, които предлагат RSS информация и да добавяш информацията в твоя сайт (в базата данни) или греша?

В такъв случай, ще трябва да използваш file_get_contents($url); или cURL

П.П. Виж това: http://code.google.com/p/rssingest/

Това нещо не мога да го наглася излиза ми
Need to pass the (consistent) 'feed url'
 
Виж това: http://web-tourist.net/forum/viewtopic.php?p=535411#535411

или това:

http://web-tourist.net/forum/viewtopic.php?t=95290

или това:

http://web-tourist.net/forum/viewtopic.php?t=95293

Относно това, което ти иска паролата;
http://<your server>/<RSSIngest path>/<PHP file>?feed_url=<your RSS URL - must stay the same as its a key>&access_key=<secret key>
 
Намерих ето този код от тази тема http://web-tourist.net/forum/viewtopic.php?p=350750#350750
, но дава доста грешки и колкото пъти рефрешна страницата където е този код толкова пъти се появява една и съща новина :(


PHP:
	 <?php
include('dadada.php');
$linkkamsaita = "http://www.kaldata.com/rosebud/rss.php?catid=3";//например http://www.kaldata.com/rosebud/rss.php?catid=3 това е рсс-то на калдата
$head = explode("/",$linkkamsaita);
$sait = file_get_contents($linkkamsaita);  //изчитаме URL-то
$tarsi = eregi("<item>(.*)</item>", $sait ,$nov); 
$masiv = explode("<item>", $nov[0]); // слагаме новините в масив
$cou = count($masiv); //преброяваме новините
echo "<table>"; 
for($i=1;$i<=$cou-1;$i++) //Изкарваме новините една по една 
{
   ereg("<description>(.*)</description",$masiv[$i],$news); // изкарваме самата новина
   ereg("<link>(.*)</link>",$masiv[$i], $link); //изкарваме линк към новината
   ereg("<title>(.*)</title>",$masiv[$i], $zaglavie); //изкарваме заглавието
//echo "Заглавие:".$zaglavie[1]."<br><br>";
//echo "Новина:".$news[1]."";
$t = $zaglavie[1];
$d=$news[1];
//echo "Източник:</b> <a href ='".$link[1]."'>".$head[2]."</a><br><br>"; //посочваме източника
$sql = "INSERT INTO rss(name,news) VALUES('".$t."','".$d."')";
$mksql = mysql_query($sql) or die(mysql_error());

}
if($mks ql) {
       $ssql = "SELECT * FROM rss";
         $smksql = mysql_query($ssql);
while($row = mysql_fetch_assoc($smksql)) {
echo "Заглавие:".$row['name']."<br>Новина:".substr($row['news'],0,30)."<a href='site.com/cqla.php?id".$row['id']."'>Цялата новина</a>";

}
}
echo "</table>";


?>
 
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';
}
?>

Ето ти един елементарен пример, може да си вземеш можеш да си вземеш к'вото си искаш от RSS файла..

А така добавяш в базата;
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';
mysql_query("INSERT INTO `table` (title, desc) VALUES ('{$rss->title}', '{$rss->description}');") or die(mysql_error());
}
?>

Повече за функцията: http://php.net/manual/en/function.simplexml-load-file.php

Другия по-дългия вариант е да ползваш;
file_get_contents() и preg_match
 
nom3r1 не работи дава грешка


Код:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc) VALUES ('Хакер от TeaMp0isoN заплаши BBC', ' Скандал' at line 1
 
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';
mysql_query("INSERT INTO `table` (title, desc) VALUES (\"{$rss->title}\", \"{$rss->description}\");") or die(mysql_error());
}
?>
 
nom3r1 каза:
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';
mysql_query("INSERT INTO `table` (title, desc) VALUES ("{$rss->title}", "{$rss->description}");") or die(mysql_error());
}
?>

Пак същата грешка ми дава.
 
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';
mysql_query("INSERT INTO `table` (`title`, `desc`) VALUES ('$rss->title', '$rss->description')");
?>
 
Добре така работи а има ли възможност да се направи , такаче да не се дублират новините , защото колкото пъти рефрешна страницата където е този код толкова пъти добавя една и съща новина :(
 
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';
$insrow=mysql_query("INSERT INTO `table` (`title`, `desc`) VALUES ('$rss->title', '$rss->description')");
if($insrow){
header('Location: index.php');
exit;
 }
}

?>

На този ред вместо index.php слгаш линка към същатата страница на този код. header('Location: index.php');


EDIT:

Да не би да искаш да не добавя еднакви новини ако има такива, тогава става така:

PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';

$selrow=mysql_query("SELECT * FROM `table` WHERE title='$rss->title' AND desc='$rss->description' ");
if(mysql_num_rows==0){
$insrow=mysql_query("INSERT INTO `table` (`title`, `desc`) VALUES ('$rss->title', '$rss->description')");
if($insrow){
header('Location: index.php');
exit;
     }
   }
else {echo 'Вече е има добавена тази новина';}
 }
?>
 
Пак дублира новините , но може да е от това защото ми го записва ето така
Код:
4d6f7a696c6c6120d0bed0b1d0bcd0b8d181d0bbd18fd18220d0b1d0bbd0bed0bad0b8d180d0b0d0bdd0b520d0bdd0b020d0b4d0bed0b1d0b0d0b2d0bad0b0d182d0b0205369746541647669736f2e2e2e
:roll:

Едит:

Забравих да кажа че ми дава ето тази грешка:

Код:
Notice: Use of undefined constant mysql_num_rows - assumed 'mysql_num_rows' in C:\xampp\htdocs\kaprizen\rss.php on line 10
 
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';

$selrow=mysql_query("SELECT * FROM `table` WHERE title='$rss->title' AND desc='$rss->description' ");
if(mysql_num_rows($selrow)==0){
$insrow=mysql_query("INSERT INTO `table` (`title`, `desc`) VALUES ('$rss->title', '$rss->description')");
if($insrow){
header('Location: index.php');
exit;
     }
   }
else {echo 'Вече е има добавена тази новина';}
 }
?>
 
Пак същия проблем

Код:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\kaprizen\rss.php on line 10

Проблема е на този ред:

PHP:
if(mysql_num_rows($selrow)==0){
 
А ти сигурен ли си, че тази заявка са и така редовете както ти са в базата ти данни:

PHP:
$selrow=mysql_query("SELECT * FROM `table` WHERE title='$rss->title' AND desc='$rss->description' ");
 
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");
$xml = simplexml_load_file("http://www.kaldata.com/rosebud/rss.php?catid=3");
foreach ($xml->channel->item AS $rss) {
echo '<h2>'.$rss->title.'</h2>';
echo '<p>'.$rss->description.'</p>';

$selrow=mysql_query("SELECT * FROM `table` WHERE `title`='$rss->title' AND `desc`='$rss->description' ");
if(mysql_num_rows==0){
$insrow=mysql_query("INSERT INTO `table` (`title`, `desc`) VALUES ('$rss->title', '$rss->description')");
if($insrow){
header('Location: index.php');
exit;
     }
   }
else {echo 'Вече е има добавена тази новина';}
 }
?>
 

Горе