|
esoyun
[Hakan]
Kayıt Tarihi: 05.07.2008
İleti Sayısı: 36
Şehir: Eskişehir
Durum: Forumda Değil
E-Posta Gönder
Web Adresi
Özel ileti Gönder
|
Konu Tarihi: 10.02.2009- 17:41
Kodlar biraz aceleye geldi, üzerinde çalışılırsa daha işlevsel birşeyler ortaya çıkar.
Alttaki kodları kopyalayın ve haberekle.php (veya istediğiniz başka bir isimde) isimli bir dosya yaratın ve içerisine yapıştırın.
Sonra düzenlenmesi gereken yerleri kendinize göre düzenleyin.
$forum_id : Bu değişken ile rss ile gelen verilerin hangi foruma kayıt edileceği ayarlanır.
$kackayit : Değişkeni ile, rss den gelen verilerin kaç tanesinin veritabanına işleneceği seçilir.
$poster : Bu değişken, rss verilerini foruma postalayan kişinin kullanıcı adını içerir.Ben forumumda "Haberci" diye bir kullanıcı açtım ve bu haberleri haberci gönderiyormuş gibi ayarladım.
$file : Bu alan, bizim rss haberleri çekeceğimiz adresin yazılacağı yer.İnteretten daha fazla rss adresi temin edebilirsiniz.
Bütün değişiklikleri kendinize göre ayarladıktan sonra,
Oluşturduğunuz dosyayı forumun anadizinine koyun ve tarayıcınızın adres satırından çağırıp çalıştırın.
Bunu isterseniz dahada geliştirip yönetim sayfalarına ekleyebilir, cron olarak belli aralıklarla çalıştırtabilirsiniz.Baştada dediğim gibi, üzerinde biraz daha uğraşılırsa, güzel şeyler ortaya çıkacaktır.
Bu kodla ilgili sormak istediğiniz veya anlayamadığınız konular olursa seve seve yardım etmeye çalışırım.
Kolay gelsin.
<?php
$phpkf_ayar = 'ayar.php';
include $phpkf_ayar;
set_time_limit(0);
//Aynı haberleri tekrar tekrar ekletmemek için, konu başlığı kontrolü yapılmaktadır.
//Daha farklı kontrollerde eklenebilir.
$file = "http://www.cnnturk.com/servisler/rss/spor.rss"; //RSS haber çekeceğimiz sitenin adresi..
$kackayit = 15; //Toplam kaç kayıt girilecek..
$forum_id = 291; //post gönderilecek forumun id numarası..
$poster ='Haberci'; //Foruma bu konuları açan kişinin kullanıcı adı..
$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<br>");
$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($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($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);
//mysql_db_query($cfgdbisim,"SET NAMES utf8") or die ('<h2>sorgu başarısız</h2>'.mysql_error());
//Rss haber çekerken hep Türkçe karakter problemi yaşanır.Bu problemi çözmek için bir fonksiyon.Dahada geliştirilebilinir..
function trtrans ($str) {
$trans = array(
"ı" => "ý",
"İ" => "Ý",
"ğ" => "ð",
"Ğ" => "Ð",
"ş" => "Þ" );
$out = strtr($str, $trans);
/*
$badwordchars=array(
"\xe2\x80\x98","\xe2\x80\x99","\xe2\x80\x9a",
"\xe2\x80\x9b","\xe2\x80\xb2","\xe2\x80\xb5",
"\xe2\x80\x9c","\xe2\x80\x9d","\xe2\x80\x9e",
"\xe2\x80\x9f","\xe2\x80\xb3","\xe2\x80\xb6",
"\xe2\x80\xa6","\xe2\x82\xac","\xe2\x86\x92",
"\xe2\x86\x90","\xe2\x86\x91","\xe2\x86\x93",
"\xe2\x80\x94"
);
$fixedwordchars=array(
"‘","’","‚",
"‛","′","‵",
"“","”","„",
"‟","″","‶",
"…","€","→",
"←","↑","↓",
"—"
);
$out=str_replace($badwordchars,$fixedwordchars,$out);
*/
$out = mb_convert_encoding($out,"ISO-8859-9","UTF-8");
return $out;
}
$rakam = 0; //Veri tabanına kaç kayıt girildiğini saymak için..
for($i=0; $i < $kackayit; $i++) { //Toplam girilecek kayıt sayısı kadar döngü başlıyor..
$tarih = time();
$satir_messages['subject'] = substr($rss_channel["ITEMS"][$i]["TITLE"], 0, 59);
$satir_messages['subject'] = trtrans(str_replace("'","-",$satir_messages['subject']));
$satir_messages['body'] = substr($rss_channel["ITEMS"][$i]["DESCRIPTION"], 0, 65534);
$satir_messages['body'] = trtrans(str_replace("'","-",$satir_messages['body']));
$satir_messages['body'] = '<p>'.$satir_messages['body'].'</p>'.$rss_channel['TITLE'].'<p><a href=\"' .$rss_channel["ITEMS"][$i]["LINK"]. '\">Devamini Oku</a></p>';
$kontrol1 = $satir_messages['subject'];
//Veritabanına kayıt girilmeden evvel, daha önce aynı konu başlığı ile giriş yapılmışmı ona bakılıyor...
$strSQLx = "SELECT * FROM $tablo_mesajlar WHERE mesaj_baslik = '$kontrol1' AND hangi_forumdan = '$forum_id' LIMIT 1";
$sonucx = mysql_db_query($cfgdbisim,$strSQLx);
$Kontrolx = mysql_fetch_assoc($sonucx);
if (empty($Kontrolx)) //Konu, veritabanına daha evvel işlenmemişse buraya giriliyor.
{
$strSQL = "INSERT INTO $tablo_mesajlar (tarih, mesaj_baslik, mesaj_icerik, yazan, hangi_forumdan, goruntuleme, cevap_sayi, son_mesaj_tarihi, degistirme_sayisi, yazan_ip, degistiren_ip, bbcode_kullan, ust_konu, kilitli)";
$strSQL .= "VALUES ('$tarih','$satir_messages[subject]','$satir_messages[body]','$poster','$forum_id','1','0','$tarih','0','127.0.0.1','','1','0','0')";
$sonuc_isle = mysql_db_query($cfgdbisim,$strSQL) or die ('<h2>Sorgu başarısız</h2>'.mysql_error());
$strSQL2 = "UPDATE $tablo_kullanicilar SET mesaj_sayisi = mesaj_sayisi + 1 WHERE kullanici_adi='$poster' LIMIT 1";
$sonuc2 = mysql_db_query($cfgdbisim,$strSQL2) or die ('<h2>sorgu başarısız</h2>');
$strSQL3 = "UPDATE $tablo_forumlar SET konu_sayisi = konu_sayisi + 1 WHERE id='$forum_id' LIMIT 1";
$sonuc3 = mysql_db_query($cfgdbisim,$strSQL3) or die ('<h2>sorgu başarısız</h2>');
$rakam=$rakam+1;
}
}
echo $rakam.' Kayıt veritabanına işlendi...'; //Ekrana, veritabanına işlenen kayıt sayısı bastırılıyor..
?>
Düzenlenme Nedeni: Koddaki Türkçe karakter sorunu düzeltilmiştir. Kimse cevaplarda aramasın diye doğrudan kod üzerinde düzenleme yaptım.
|