PHP verileri dosya önbelleğinden mysql kaydettirme
// Tüm xml dosyalarını tek bir dosyada birleştirin
$merged_xml = new SimpleXMLElement('<root></root>');
foreach ($xml_urls as $xml_url) {
$xml_file = $xml_folder . md5($xml_url) . '.xml';
$xml_string = file_get_contents($xml_file);
$xml = simplexml_load_string($xml_string);
foreach ($xml->channel->item as $item) {
$merged_xml->addChild('item', $item->asXML());
}
}
// Arama sorgusunu alalım
$searchTerm = htmlspecialchars($_GET['q']);
$searchTerm = str_replace(array('nedir?', 'nasıl?', 'nedir', 'nasıl', 'keşfedildi', 'nedir kısaca', 'ne zaman'), '', $searchTerm);
// XML verilerinin dosyaya kaydedileceği dizini belirleyelim
$xml_folder = 'onbellek/';
// XML verilerini çekelim
$xml_urls = array(
'https://www.haberturk.com/rss',
'https://www.macworld.com/feed'
);
shuffle($xml_urls);
// Sonuçları tutmak için bir değişken tanımlayalım
$results = array();
foreach ($xml_urls as $xml_url) {
// XML verisini dosyadan okuyalım veya internetten çekelim
$xml_file = $xml_folder . md5($xml_url) . '.xml';
if (file_exists($xml_file) && (time() - filemtime($xml_file) < 7200)) {
// Eğer dosya mevcutsa ve 1 saat içinde değişmemişse, dosyadan okuyalım
$xml = simplexml_load_file($xml_file);
} else {
// Eğer dosya yoksa veya 1 saat içinde değişmişse, internetten çekelim ve dosyaya kaydedelim
$xml = simplexml_load_file($xml_url);
file_put_contents($xml_file, $xml->asXML());
}
// Her bir XML öğesi için döngü oluşturalım
foreach ($xml->channel->item as $item) {
// Başlık ve açıklama metinlerini birleştirelim
$content = strtolower((string) $item->title) . strtolower((string) $item->description);
// Arama sorgusunu içerip içermediğini kontrol edelim
if (stripos($item->title, $searchTerm) !== false) {
// Eğer aranan kelime mevcutsa, sonucu results dizisine ekleyelim
$result = array(
'title' => (string) $item->title,
'description' => (string) $item->description,
'link' => (string) $item->link,
'source' => getSourceLogo($xml_url)
);
$pubDate = date("d.m.Y", strtotime($item->pubDate));
// Eğer resim varsa, resmin bağlantısını results dizisine ekleyelim
if (!empty($item->image->url)) {
$result['image'] = (string) $item->image->url;
} elseif (!empty($item->enclosure['url'])) {
$result['image'] = (string) $item->enclosure['url'];
}
$results[] = $result;
$count++;
if ($count >= 7) {
break;
}
}
}
}
// Sonuçlar dizisi boşsa, haber kutusunu göstermeyelim
if (empty($results)) {
echo '<style>.kutumuz {display:none;}</style>';
echo '<style>.ustbaslik {display:none;}</style>';
} else {
// Sonuçları göstermek için bir div etiketi oluşturalım
echo '<div class="kutumuz">';
// Her bir sonucu döngü ile gösterelim
foreach ($results as $result) {
// Her bir sonuç için bir div etiketi oluşturalım
echo '<div class="kutuici">';
if (!empty($result['image'])) {
// Eğer resim mevcutsa, resmi gösterelim
echo '<img src="' . $result['image'] . '" alt="Resim yüklenemedi"><br>';
} else {
// Eğer resim yoksa, alternatif bir resim gösterelim
echo '<img src="static/resim/resimyokhaber.png"><br>';
}
echo '<div class="kutubaslik"><a href="' . $result['link'] . '" target="_blank">' . $result['title'] . '</a></div>';
echo '<div class="resimkaynagi"><img src="' . $result['source'] . '"></img></div>';
echo '</div>';
}
echo '</div>';
}
Selamlar efendim,
Php ile bir çok xml verileri çekmekteyim. Yukarıda verdiğim kod harikalade şahane çalışmakta ve hiç bir problemi bulunmuyor. Ancak bazen arama yaparken verileri yavaş gösteriyor. Verileri dosyalara kaydettirsek bile dahi yine de bir yavaşlık olabiliyor. Veritabanına taşımak için mysql veritabanı oluşturdum.
Ancak nasıl bir tablo oluşturacağım. Ve üste attığım kodu düzenleyip mysql bağlayarak nasıl veritabanı oluşturduğumuz tablonun içine nasıl kaydettirebileceğiz ?
Hatta efendim bu kodu düzenleyip hazır sql atabilirseniz, nerelerde hata yaptığımı hazır bir şekilde detaylı öğrenmek istiyorum.