Отново пролем с бота

slideR

Registered
Здравейте. Отново имам проблем с бота, който взима новини от калдата.
кодът на самата страница е това
<?php
session_start();
ob_start();
if($_SESSION['user_info']['user_rank'] == 3) {
define("IN", true);
include 'includes/mysql_connect.php';
include 'includes/class.php';
$page = new Page;
header("Content-type: text/html; charset=cp1251");
$xml = file_get_contents("http://www.kaldata.com/rosebud/rss.php?catid=3");
$explode = explode("<item>",$xml);
foreach($explode as $part) {
$part = explode("</item>","$part");
$part = $part[0];
$title = explode("<title>",$part);
$title = explode("</title>",$title[1]);
$title = $title[0];
$text = explode("<description>", $part);
$text = explode("</description>", $text[1]);
$text = $text[0];
$title = trim($title);
$texta = str_replace("<", "<", $text);
$texta = str_replace(">", ">", $texta);
$page->db_query("SET NAMES cp1251");
$sql = $page->db_query("SELECT * FROM news WHERE news_name = '$title'");
if($page->db_num_rows($sql) == NULL) {
$kaldata = "http://kaldata.com";
$autor = "antipatrul";
$sql = $page->db_query("INSERT INTO news (news_name, news_text, news_link, news_autor) VALUES ('$title','$texta','$kaldata','$autor')");
header("Location: index.php");
} else {
header("Location: index.php");
}
}
} else {
header("Location: index.php");
}
?>
Но проблема е, че така взима и
"kaldata(dot)com - IT Новини, Софтуер, Хардуер, Игри". Как да направя така, че при зимане на новините той да не се добавя в таблицата ????
 
Добави това

Код:
$title=str_replace('kaldata.com - IT Новини, Софтуер, Хардуер, Игри', '', $title);

Значи това го добави след ето тези редове

Код:
$texta = str_replace("<", "<", $text);
$texta = str_replace(">", ">", $texta);
 
Не става така опитах и със
if($title == "kaldata.com - IT Новини, Софтуер, Хардуер, Игри") но пак неще. Интересно с if преди работеше е сега не.. Ако това ще помогне - на локален хост съм
 
Че то $title да не садържа само това, което искаш да махнеш ..


Код:
<?php
session_start();
ob_start();
if($_SESSION['user_info']['user_rank'] == 3) {
define("IN", true);
include 'includes/mysql_connect.php';
include 'includes/class.php';
$page = new Page;
header("Content-type: text/html; charset=cp1251");
$xml = file_get_contents("http://www.kaldata.com/rosebud/rss.php?catid=3");
$explode = explode("<item>",$xml);
foreach($explode as $part) {
$part = explode("</item>","$part");
$part = $part[0];
$title = explode("<title>",$part);
$title = explode("</title>",$title[1]);
$title = $title[0];
$text = explode("<description>", $part);
$text = explode("</description>", $text[1]);
$text = $text[0];
$title = trim($title);
$title=str_replace('kaldata.com - IT Новини, Софтуер, Хардуер, Игри', '', $title);	
$texta = str_replace("<", "<", $text);
$texta = str_replace(">", ">", $texta);
$page->db_query("SET NAMES cp1251");
$sql = $page->db_query("SELECT * FROM news WHERE news_name = '$title'");
if($page->db_num_rows($sql) == NULL) {
$kaldata = "http://kaldata.com";
$autor = "antipatrul";
$sql = $page->db_query("INSERT INTO news (news_name, news_text, news_link, news_autor) VALUES ('$title','$texta','$kaldata','$autor')");
header("Location: index.php");
} else {
header("Location: index.php");
}
}
} else {
header("Location: index.php");
}
?>
 
Само това е. То е част от този код на rss-а.
Код:
<rss version="2.0"> 
<channel> 
        <title>kaldata.com - IT Новини, Софтуер, Хардуер, Игри</title> 
        <description>Софтуерни и хардуерни новини</description> 
        <link>http://www.kaldata.com/</link> 
        <docs>http://www.kaldata.com/rosebud/rss.php</docs> 
        <language>bg</language> 
        <managingEditor>zazzko@kaldata.com</managingEditor> 
        <webMaster>kal@data.bg</webMaster> 
		<image> 
            <url>http://www.kaldata.com/rosebud/logo.gif</url> 
            <title>Kaldata.com T Новини, Софтуер, Хардуер, Игри</title> 
            <link>http://www.kaldata.com/</link></image><pubDate>Sun, 06 Jun 2010 10:04:01 +0000</pubDate>
Пак не става с твоя код
 
Добре, чакай може нещо да не сме се разбрали, тей като аз го тествах и при мен работи, нали в променливата $title е това там дето искаш да махнеш .. kaldata.com ала бала .. ако е така, всичко трябва да работи, при мен си работи, пробвай да си изведеш само $title да видиш, че се маха ..
 
Защо тогава го вземаш този <title>(.*)</title> като не ти трябва.
На тебе ти трябва <description>(.*)</description> (поне аз както го виждам.
И PHP си има страхотна подръжка за парсване на RSS, защо се тормозите с този file_get_content() и най-интересното explode() вместо preg_match();
Наистина ми е интересно.
А това обира овациите
$autor = "antipatrul";
$sql = $page->db_query("INSERT INTO news (news_name, news_text, news_link, news_autor) VALUES ('$title','$texta','$kaldata','$autor')");
не мисля, че е честно да си преписваш нечии други заслуги. Винаги оставяй линк към оригинала, така ще спечелиш и ти ... докато в този случай - само е възможно да загубиш.
 
Ами дай пример с preg_match(); а за чуждите заслуги не разбрах. $autor е само името на бота (който е добали новината) а при преглеждане на новината си има линк към сайта от който съм я взел
 
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>';
}
Ето ти един елементарен пример, може да си вземеш каквото ти дупа иска от рсс файла.
Ако си има линк към оригинала, и $author е ника на бота който добавя новини - наистина не съм те разбрал, за което се извинявам.
 
Всъщност се оправих и това направих с preg_match. А Replace ето това има слид новината "Източник: Kaldata" и линк към сайта. +1 kulov
 

Back
Горе