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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
Merhabalar xml çok fazla bilmesem de php ve mysql konusunda size yardımcı olabilirim belki ama şöyle bir durum var ki , Göstermek istediğiniz veriler nelerdir onu anlamadım.
Örneğin Haber sitelerinin sitemap.xml dosyasını mı çekmeye çalışıyorsunuz? eğer öyleyse 3 ana kademeye ayırabilirsiniz ve oluşturacağınız
sql sorgusu da buna göre oluşturabilirsiniz. Benim örneğim de header, body ve footer olacak şekilde sql sorgusu yer alıyor.
bu php de kullanabilmeniz için geçerli bir sorgudur
INSERT INTO xml_table SET header = ? , body = ? , footer =?
bu sql sorgusudur
INSERT INTO xml_table (header, body , footer) values (param1, param2, param3)
tablonuzu zaten oluşturmuşsunuz beyfendi muhtemelen chat-gpt den yardımla yazılmış bir kod bu belli ki yine aynı prompt ta bunun mysql bağlanımını da yazdırabilirsiniz...