Döviz Kuru

Events happening in the community are now at Drupal community events on www.drupal.org.
kartagis's picture

Merhaba,

Ben bir blok olarak bazı kodlar ekledim, includes/common.inc dosyasına da bir sınıf ekledim (bu sınıf bir xml dosyasına veri yazıp ondan veri çekiyor. Ama sonuç değerleri .xml dosyasından alıp bloğa yazdırmayi beceremedim. Bana bu konuda yardım edebilir misiniz?

Bloğa eklediğim kod:

<?php
#include ('../doviz/doviz.php');
$tcmb = new TCMB;
$tcmb->cacheTime=5;
$tcmb->tcmbStart();
?>
ALIŞ SATIŞ
USD
<?php
$tcmb
->getALIS('usd');
?>
<?php
$tcmb
->getSATIS('usd');
?>
EURO
<?php
$tcmb
->getALIS('eur');
?>
<?php
$tcmb
->getSATIS('eur');
?>


common.inc dosyasındaki kod:

class TCMB
{
private $adres = 'http://www.tcmb.gov.tr/kurlar/today.html';
private $sonuc = array();
private $cacheDosya = 'doviz.xml';
public $cacheTime;
private $cacheCalc;
private $ac;
private $say;
private $dizin = '/var/www/drupal/webrary.net/sites/default/doviz/';
private function getKUR()
{
return file_get_contents($this->adres);
}
private function parseKUR()
{
preg_match_all("#[0-9]\.[0-9]{1,9}#is",$this->getKUR(),$this->sonuc);
return $this->sonuc;
}

private function cacheDOSYA()
{
    $this->sonuc = $this->parseKUR();
    $this->cacheCalc = (time() + ($this->cacheTime*60)); // cache zamanımızı ayarladık.
    $this->ac = fopen($this->dizin."/".$this->cacheDosya,"w");
    if ($this->ac !== false)
    {
        fwrite($this->ac,"<?xml version='1.0' encoding='ISO-8859-9'?>\r\n<TCMB>\r\n<time>".$this->cacheCalc."</time>\r\n");
        $this->say = count($this->sonuc[0]);
        for ($i=$j=0; $i<$this->say; $i += 4)
        {
            $j++;
            switch ($j) 
            {
                        case "1": fwrite($this->ac,"<usd>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</usd>\r\n"); break;
                        case "2": fwrite($this->ac,"<aud>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</aud>\r\n"); break;
                        case "3": fwrite($this->ac,"<dkk>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</dkk>\r\n"); break;
                        case "4": fwrite($this->ac,"<eur>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</eur>\r\n"); break;
                        case "5": fwrite($this->ac,"<gbp>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</gbp>\r\n"); break;
                        case "6": fwrite($this->ac,"<chf>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</chf>\r\n"); break;
                        case "7": fwrite($this->ac,"<sek>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</sek>\r\n"); break;
                        case "8": fwrite($this->ac,"<cad>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</cad>\r\n"); break;
                        case "9": fwrite($this->ac,"<kwd>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</kwd>\r\n"); break;
                        case "10": fwrite($this->ac,"<nok>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</nok>\r\n");break;
                        case "11": fwrite($this->ac,"<sar>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</sar>\r\n"); break;
                        case "12": fwrite($this->ac,"<jpy>\r\n\t<alis>".$this->sonuc[0][$i]."</alis>\r\n\t<satis>".$this->sonuc[0][($i+1)]."</satis>\r\n</jpy>\r\n"); break;
            }
            if ($j == 12 ) break; // Döngüyü Durdurduk Çünkü Bize Gerekli Olan Bilgiler 12. de Son Buluyor.
        }
        fwrite($this->ac,"</TCMB>");
        fclose($this->ac);
    }
    else
    {
        exit('Cache Dosyasına Yazılamıyor. Yazma Yetkisinin Olup Olmadığını Kontrol Ediniz.');
    }
}

private function beyazCharsil()
{
    return @preg_replace("/\s/","",file_get_contents($this->cacheDosya));
}
public function getALIS($tip)
{
    preg_match("#<".$tip."><alis>(.*?)<\\/alis>.+<\\/".$tip.">#i",$this->beyazCharsil(),$this->sonuc);
    echo $this->sonuc[1];       
}
public function getSATIS($tip)
{
    preg_match("#<".$tip.">.+<satis>(.*?)<\\/satis><\\/".$tip.">#i",$this->beyazCharsil(),$this->sonuc);
    echo $this->sonuc[1];
}       

public function tcmbStart()
{
    preg_match("#<time>(.*?)<\\/time>#i",$this->beyazCharsil(),$this->sonuc); // Cache Dosyamızdan Cache Zamanını Aldık.

    if ($this->sonuc[1]  < time())
    {
        $this->cacheDOSYA();
    }
    else 
    {
        echo 'Döviz Bilgileri Cache\'den Okunuyor...<br>';
    }
}

}

Sevgiler,

Comments

Merhaba, Birkaç yöntem deneme

kartagis's picture

Merhaba,

Birkaç yöntem deneme yamulmadan sonra, bunu ben de yapabilirim dedim ve oturdum birkaç satır yazdım, bloğa koydum ve istediğim gibi oldu: Bu kodu aşağıda paylaşmak istiyorum:

<?php
$tcmbXML
= new DOMDocument();
$tcmbXML->load('/var/www/drupal/webrary.net/sites/default/today.xml');
$usd = $tcmbXML->getElementsByTagName('Currency')->item(0)->getAttribute('CurrencyCode');
$eur = $tcmbXML->getElementsByTagName('Currency')->item(11)->getAttribute('CurrencyCode');
$usdDovizAlis = $tcmbXML->getElementsByTagName('ForexBuying')->item(0)->nodeValue;
$usdDovizSatis = $tcmbXML->getElementsByTagName('ForexSelling')->item(0)->nodeValue;
$eurDovizAlis = $tcmbXML->getElementsByTagName('ForexBuying')->item(11)->nodeValue;
$eurDovizSatis = $tcmbXML->getElementsByTagName('ForexSelling')->item(11)->nodeValue;
echo
"<html>";
echo
"<meta http-equiv='content-type' content='type\/html' charset='utf-8'>";
echo
"<table border=1>";
echo
"<th></th>";
echo
"<th>ALIŞ</th>";
echo
"<th>SATIŞ</th>";
echo
"<tr>";
echo
"<td>$usd</td>";
echo
"<td>$usdDovizAlis</td>";
echo
"<td>$usdDovizSatis</td>";
echo
"</tr>";
echo
"<tr>";
echo
"<td>$eur</td>";
echo
"<td>$eurDovizAlis</td>";
echo
"<td>$eurDovizSatis</td>";
echo
"</tr>";
echo
"</table>";
echo
"</html>";
?>

Bunu yazmadan önce şu komutu uygulayın: wget http://www.tcmb.gov.tr/kurlar/today.xml -O /drupal/kurulumunuzun/yeri/sites/default/today.xml

Bundan sonra da şöyle bir cron yazın: 00 16 * * 1-5 rm /drupal/kurulumunuzun/yeri/sites/default/today.xml && wget http://www.tcmb.gov.tr/kurlar/today.xml -O /drupal/kurulumunuzun/yeri/sites/default/today.xml. Tabii /drupal/kurulumunuzun/yeri dizininin drupal kurulumunuzun dizini olmasının gerektiğini söylememe gerek yok. Bu kodlar sadece USD ve EUR'u almak içindir, başka kodlar için item(0) yerine başka bir sayı koyabilirsiiniz.