v2.5.2
Giriş yap

PHP verileri dosya önbelleğinden mysql kaydettirme

erdal42
356 defa görüntülendi ve 1 kişi tarafından değerlendirildi
// 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.

Cevap yaz
Cevaplar (4)
erdal42
591 gün önce

Merhaba @darkwob,
İlgin için teşekkür ederim. XML veriler şu anda dosyalara kaydediliyor. Her bir çekilen xml verileri .xml uzantıda çekiyor. İçinde zaten veriler oluyor. Onun yerine bu xml verileri direkt veritabanına kaydetmesini istiyorum.

darkwob
591 gün önce

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)


hakankorkz
591 gün önce

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...

erdal42
592 gün önce

Yardımcı olabilecek biri var mı ? :D