PHP'de belirli bir tarih için resmi döviz kurları nasıl alınır. Döviz kurlarını yüklemek için PHP betiği Php döviz kurlarını alıyor
Birçoğunuz bazı sitelerin görüntülendiğini defalarca gördünüz. döviz kurları. Tabii ki, bu sitelerin yöneticileri kendilerini günlük olarak değiştirmiyorlar (umarım). Merkez Bankası'nın internet sitesinden indiriyorlar. Ve bu yazıda kodu vereceğim Merkez Bankası web sitesinden döviz kurlarını indirmek için PHP betiği ve bunları sayfada görüntüleyin.
İşte betiğin kodu:
$tarih = tarih("g/a/Y"); // Gerekli formatta bugünün tarihi
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Döviz kurları ile XML dosyasına bağlantı
$içerik = file_get_contents($bağ); // Sayfa içeriğini indir
$dom = yeni domDocument("1.0", "cp1251"); // DOM oluştur
$dom->loadXML($içerik); // XML belgesini DOM'a yükleyin
$root = $dom->documentElement; // Kök elemanı al
$childs = $root->childNodes; // Alt öğelerin bir listesini alın
$veri = dizi(); // Veri seti
için ($i = 0; $i< $childs->uzunluk; $i++) (
$childs_new = $childs->item($i)->childNodes; // Alt düğümleri al
için ($j = 0; $j< $childs_new->uzunluk; $j++) (
/* İlgilendiğimiz para birimlerini arıyoruz */
$el = $childs_new->item($j);
$kod = $el->nodeValue;
if (($code == "USD") || ($code == "EUR")) $veri = $childs_new; // Gerekli para birimlerini diziye ekleyin
}
}
/* Para birimi verileriyle dizide dolaş */
için ($i = 0; $i< count($data); $i++) {
$liste = $veri[$i];
için ($j = 0; $j< $list->uzunluk; $j++) (
$el = $list->item($j);
/* Döviz kurlarını göster */
if ($el->nodeName == "Ad") echo $el->nodeValue." - ";
elseif ($el->nodeName == "Değer") echo $el->nodeValue."
";
}
}
?>
Kodu dikkatlice yorumlamaya çalıştım, bu yüzden anlamakta sorun olmamalı. Ayrıca, neden bu kadar çok olduğunu ve neden bu tür döngülerin olduğunu ve ayrıca belirli koşulların nereden geldiğini anlamak için koddaki bağlantıyı izlemenizi şiddetle tavsiye ederim (tarihi değiştirin). o zaman göreceksin XML Belgesi ve böyle bir kodun neden yazıldığını anlamanız çok daha kolay olacaktır.
İnternette döviz kurlarını gösteren birçok script var. Ama benim dolar ve euroya ihtiyacım vardı. Merkez Bankası. gösterecek senaryoları aramaya karar verdim. belirli bir tarihteki resmi döviz kurları. Bir tabloyu sıralayan ilginç bir jQuery makalesine rastladım. Senaryoda var PHP döviz kuru ayrıştırıcı" bir xml belgesi normal ifadeler kullanılarak çalınıyor. Normal ifadeler kod soygununda yoğun bir şekilde kullanılıyor. Komut dosyası harika çalışıyor ancak kendine has özellikleri var. Çok sayıda para birimi içeren HTML'de bir tablo çıkarıyor. İhtiyacım var döviz kurları olan bir tablodan bir JSON dizisi oluşturun. Bu dizi bir sosis gibidir. Programcıların böyle bir dizi dediği şey budur. çok büyük sosisler var çok sayıda)))
/* * getArr() * merkez bankasından alınan döviz kurları * xml belgesi ayrıştırılır * */ function getArr() ( $url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=". date("g/a/Y",strtotime("+0 gün")); $cbr_xml = str_replace(array("\n","\r","\t")),"",getContentPage($url )); if(preg_match_all("~ (.*?) ~i",$cbr_xml,$Değer)) ( foreach($Değer as $veri) ( preg_match("~ (.*?) ~i",$data ,$CharCode); preg_match("~ (.*?) ~i",$data,$NumCode); $dizi[$CharCode]["num_code"].= $NumCode; preg_match("~ (.*?) ~i",$veri,$Nominal); $dizi[$CharCode]["nominal"] = $Nominal ; preg_match("~ (.*?) ~i",$veri,$Ad); $dizi[$ CharCode]["name"].= toUtf8($Name); preg_match("~ (.*?) ~i",$data,$Value); $dizi[$KharKodu]["değer"].= $Değer ; $i++; ) return $dizi; ) ) function getContentPage($url) ( $c = curl_init($url); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1); $metin = curl_exec($c); curl_close($c); dönüş $metin; ) //Utf8 işlevine Utf8($) kodlayın str) (dönüş mb_convert_encoding($str, "utf-8", "windows-1251"); ) $dizi = getArr(); echo json_encode($dizi); /* ( "EUR":("sayı_kodu":"978", "nominal":"1", "ad":"\u0415\u0432\u0440\u043e", "değer":"63,6090"), "USD":("num_code":"840", "nominal":"1", "name":"\u0414\u043e\u043b\u043b\u0430\u0440 \u0421\u0428\u0410", "değer": "58.0374") )*/
Yapabilirsin hem bugünün döviz kurunu hem de dünün döviz kurunu görüntüleyin. strtotime("+0 gün") işlevi, saati değiştirmenize olanak tanır. Elbette zaten kaç tane sıfır eklenmez, değişkenin değeri değişmez. Kodun bu kısmını, saati istediğiniz zaman değiştirebilmeniz için bıraktım. Diziyi biraz yeniden düzenlemek zorunda kaldım. Dizinin anahtarı olarak $CharCode değişkenini kullandım. Geniş dizimde başka birçok dizi var ve yalnızca belirli bir diziye anahtarla (EUR) erişebilirsiniz. Benim durumumda, $CharCode değişkeni aşağıdaki değerleri alır:
- AUD => Avustralya doları
- AZN => Azerbaycan manatı
- GBP => İngiliz Sterlini
- AMD => Ermeni dramaları
- BYR => Beyaz Rusya rublesi
- BGN => Bulgar Levası
- BRL => Brezilya reali
- HUF => Macar forinti
- DKK => Danimarka kronu
- USD => ABD doları
- EUR => Euro
- INR => Hindistan Rupisi
- KZT => Kazakistan tengesi
- CAD => Kanada doları
- KGS => Kırgızistan somu
- CNY => Çin Yuanı
- MDL => Moldova leyi
- NOK => Norveç kronu
- PLN => Polonya Zlotisi
- RON => Romen yeni leyi
- XDR => SDR (Özel Çekme Hakları)
- SGD => Singapur doları
- TJS => Tacikistan somonisi
- TL => Türk Lirası
- TMT => Türkmen yeni manat
- UZS => Özbek toplamı
- UAH => Ukrayna grivnası
- CZK => Çek Korunası
- SEK => İsveç kronu
- CHF => İsviçre frangı
- ZAR => Güney Afrika Randı
- KRW => Kore Wonu
- JPY => Japon Yeni
Sadece USD ve EUR ile ilgileniyorum. ben kaldırmadım
İyi günler sevgili arkadaşlar. Bildiğiniz gibi, geçtiğimiz günlerde (11 Şubat) Kazakistan'da başka bir devalüasyon gerçekleşti, internette birçok kişinin dediği gibi bu "Kara Salı" birçok kişinin cebini vurdu. Bu konu hakkında başka bir olumsuz yazı yazmayacağım. Bunun gerekli olduğunu düşünmüyorum. Olan oldu. Ancak o talihsiz günde, internette hiçbir yerde doların, euronun veya diğer döviz kurunun tam döviz kurunu bulmanın mümkün olmaması gerçeği beni çok kızdırdı. döviz. Bilinen ve bilinmeyen (merhaba google) sitelerin tümü bana açık değildi. Belki de bazı siteler Kazakistanlı kullanıcıların gözünden düştü ve bu kadar çok kullanıcıya hazır değildi. Ama gerçek şu ki, siteler çalışmadı.
Ve akşam, devalüasyona olan tutkum azalmaya ve sinirlerim sakinleşmeye başlayınca, küçük şirin blogumda kendime küçük bir döviz kuru muhbiri yazmam gerektiğine karar verdim. Yukarıda söylediğim gibi diğer sitelerin widget'larını kullanmak istemedim çünkü tüm kaznet bu lanet döviz kurunu öğrenmek isterken bu siteler "yalan söylüyordu". :) Aşağıda php bilgilendirici betiği var, betiğin yoruma ihtiyacı olmadığını düşünüyorum:
$tutar = "1";
$dan = "USD";
$dan = "EUR";
$dan = "RUB";
$to="KZT";
$i=0;
while($ ben<= 2){
$i++;
$get = patlat(" ",$al);
$get = patlat("",$al);
";
}
?>
Komut dosyası evrenseldir, değişkeni değiştirebilirsiniz $ için dizileri artırmanın veya değiştirmenin yanı sıra dönüştürmek istediğiniz başka bir para birimine $'dan[?], başka para birimleri ekleyin, çekilen para birimlerinin sayısını artırdıysanız döngü koşulunu değiştirmeyi unutmayın. Para birimlerinin tanımlayıcısını (adını) bağlantıdan alabilirsiniz - https://www.google.com/finance/converter. Muhtemelen anladığınız gibi, komut dosyası bu google sayfasını bir döngüde ayrıştırır ve ihtiyaç duyduğu bilgileri alır.
Bu betiği sitenize nasıl yükleyebilirim? Bir wordpress motorunuz varsa, eklentiyi yüklemeniz gerekecek " PHP Kod Widget'ı"ve bu widget'ı seçin ve tüm kodu oraya ekleyin. En kolay yol budur. Bir sorun varsa, eklentiyi her zaman devre dışı bırakabilirsiniz ve her şey olduğu gibi dönecektir. Komut dosyasını yüklemek için karmaşık seçenekler sunmuyorum. Bana e-posta gönderebilirsiniz, size yardımcı olmaya çalışacağım.Umarım bu makale size yardımcı olmuştur. :)
Not: Kendim için betiği biraz optimize ettim (önbelleğe alma ekledim) ve cron'a betiği saatte bir güncelleme görevi verdim.Sürümüm * .html dosyasını kaydediyor ve onu ajax aracılığıyla widget'larda gösteriyorum.
// Çıktı arabelleğe almayı başlat
ob_start();$tutar = "1";
$dan = "USD";
$dan = "EUR";
$dan = "RUB";
$to="KZT";
$i=0;
while($ ben<= 2){
$i++;
$get = file_get_contents("https://www.google.com/finance/converter?a=$amount&from=$from[$i]&to=$to");
$get = patlat(" ",$al);
$get = patlat("",$al);
$converted_amount = preg_replace("/[^0-9\.]/", null, $get);
$dönüştürülmüş_tutar = yuvarlak($dönüştürülmüş_tutar,2);
echo $tutar." ".$from[$i]." = ".$converted_amount." ".$to."
";
}// yakalanan çıktıyı .html dosyasına kaydet
file_put_contents("currency.html", ob_get_contents());
// arabelleğe alma ve görüntüleme sayfasını sonlandır
ob_end_flush();
?>
Komut dosyasını *.php formatında, tercihen ayrı bir klasöre kaydedin (örneğin, siteyi tıkamamak için "komut dosyaları" klasöründe. Bundan sonra, cron'a bir görev eklemeniz, komut dosyasına erişmeniz gerekir) Her n saatte bir.Ve bir kez tarayıcı aracılığıyla, komut dosyasına manuel olarak erişin, böylece gelecekte değineceğimiz bir html dosyası oluşturur.Sonra, komut dosyasını iframe aracılığıyla widget'larda görüntüleyebilirsiniz:
işlev gösteri_temp()
{
$.ajax((
url: "http://siteniz/scripts/currency.html",
önbellek: yanlış
başarı: işlev(html)(
$("#currency").html(html);
}
});
}
$(belge).hazır(işlev()(
show_temp();
});
Bu tür bir çıktı, yazı tipi boyutunu, yazı tipi rengini değiştirmenize veya CSS (Basamaklı Stil Sayfası) aracılığıyla başka efektler eklemenize olanak tanır.
Scriptin optimize edilmiş bir versiyonu sunucuyu yüklemeyecek ve sürekli google'a erişmeyecek.Cron kullanmamak için önbelleklemeyi farklı uygulayabilir ve tarihe göre kontrol edebilirsiniz.Ama kişisel olarak basit bir taneden ilerledim.Akıllı olmayı sevmiyorum . :)
Çamaşır makinesi bozuk mu? 1v.kz yardımcı olacaktır! - Almatı'daki çamaşır makinelerinin onarımı:
Şehrin her yerinden profesyoneller
Bazı durumlarda, ticaretle çalışırken, belirli bir para biriminin döviz kuru hakkında güncel bilgiler edinmek gerekli hale gelir. Merkez Bankası bu tür verilerin en iyi kaynağı olup, döviz kuru hakkında XML formatında açık ve zamanında bilgi sağladığı için kullanmamak günahtır.
Bu işlev şöyle görünür:
fonksiyon get_currency($currency_code, $format) ( $date = date("g/m/Y"); // Geçerli tarih $cache_time_out = "3600"; // Saniye cinsinden önbellek ömrü $file_currency_cache = __DIR__."/XML_daily . asp"; if(!is_file($file_currency_cache) || filemtime($file_currency_cache)< (time() - $cache_time_out)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $out = curl_exec($ch); curl_close($ch); file_put_contents($file_currency_cache, $out); } $content_currency = simplexml_load_file($file_currency_cache); return number_format(str_replace(",", ".", $content_currency->xpath("Değer")->Değer), $format); )
Şu satırları içerir:
$tarih = tarih("g/a/Y"); // Geçerli tarih $cache_time_out = "3600"; // Saniye cinsinden önbellek ömrü
sırasıyla tarihten (bizim durumumuzda geçerli olandır) ve önbellek ömründen sorumludur. Merkez Bankası döviz verilerini çok sık güncellemediği için her kullandığınızda onu böyle rahatsız etmemelisiniz. Bu satırlardaki değerleri (isteğe bağlı olarak) kendinize göre değiştirebilirsiniz.
Fonksiyonun kullanımı şu şekildedir:
echo get_currency("USD", 3);
Burada " Amerikan Doları” sembolik bir para birimi kodudur (bizim durumumuzda ABD dolarıdır) ve “ 3 " - virgülden sonra birkaç simge.
Rusya Federasyonu Merkez Bankası tarafından (yazım sırasında) "karakter para birimi kodu - mezhep ve isim" şeklinde sağlanan kabul edilebilir para birimleri listesi:
AUD - 1 Avustralya doları AZN - 1 Azerbaycan manatı GBP - 1 İngiliz sterlini AMD - 100 Ermeni dramı BYN - 1 Beyaz Rusya rublesi BGN - 1 Bulgar levası BRL - 1 Brezilya reali HUF - 100 HUF HKD - 10 Hong Kong doları DKK - 10 Danimarka kron USD - 1 ABD doları EUR - 1 euro INR - 100 Hindistan rupisi KZT - 100 Kazakistan tenge CAD - 1 Kanada doları KGS - 100 Kırgız somu CNY - 10 Çin yuanı MDL - 10 MDL NOK - 10 Norveç kronu PLN - 1 Polonya zlotisi RON – 1 Romen leyi XDR – 1 SDR (Özel Çekme Hakkı) SGD – 1 Singapur Doları TJS – 10 Tacik somoni TL – 1 Türk Lirası TMT – 1 yeni Türkmen manatı UZS – 10.000 UZS UAH – 10 Ukrayna grivnası CZK – 10 CZK SEK - 10 SEK CHF - 1 İsviçre frangı ZAR - 10 Güney Afrika randı KRW - 1.000 ROK wonu
Umarım fonksiyon projenizde yerini bulur. Herhangi bir sorunuz varsa veya anlaşılmaz görünen bir şey varsa - bu makalenin altındaki yorumlarda bunun hakkında yazdığınızdan emin olun.
Bazı durumlarda, ticaretle çalışırken, belirli bir para biriminin döviz kuru hakkında güncel bilgiler edinmek gerekli hale gelir. Merkez Bankası bu tür verilerin en iyi kaynağı olup, döviz kuru hakkında XML formatında açık ve zamanında bilgi sağladığı için kullanmamak günahtır.
Bu işlev şöyle görünür:
fonksiyon get_currency($currency_code, $format) ( $date = date("g/m/Y"); // Geçerli tarih $cache_time_out = "3600"; // Saniye cinsinden önbellek ömrü $file_currency_cache = __DIR__."/XML_daily . asp"; if(!is_file($file_currency_cache) || filemtime($file_currency_cache)< (time() - $cache_time_out)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $out = curl_exec($ch); curl_close($ch); file_put_contents($file_currency_cache, $out); } $content_currency = simplexml_load_file($file_currency_cache); return number_format(str_replace(",", ".", $content_currency->xpath("Değer")->Değer), $format); )
Şu satırları içerir:
$tarih = tarih("g/a/Y"); // Geçerli tarih $cache_time_out = "3600"; // Saniye cinsinden önbellek ömrü
sırasıyla tarihten (bizim durumumuzda geçerli olandır) ve önbellek ömründen sorumludur. Merkez Bankası döviz verilerini çok sık güncellemediği için her kullandığınızda onu böyle rahatsız etmemelisiniz. Bu satırlardaki değerleri (isteğe bağlı olarak) kendinize göre değiştirebilirsiniz.
Fonksiyonun kullanımı şu şekildedir:
echo get_currency("USD", 3);
Burada " Amerikan Doları” sembolik bir para birimi kodudur (bizim durumumuzda ABD dolarıdır) ve “ 3 " - virgülden sonra birkaç simge.
Rusya Federasyonu Merkez Bankası tarafından (yazım sırasında) "karakter para birimi kodu - mezhep ve isim" şeklinde sağlanan kabul edilebilir para birimleri listesi:
AUD - 1 Avustralya doları AZN - 1 Azerbaycan manatı GBP - 1 İngiliz sterlini AMD - 100 Ermeni dramı BYN - 1 Beyaz Rusya rublesi BGN - 1 Bulgar levası BRL - 1 Brezilya reali HUF - 100 HUF HKD - 10 Hong Kong doları DKK - 10 Danimarka kron USD - 1 ABD doları EUR - 1 euro INR - 100 Hindistan rupisi KZT - 100 Kazakistan tenge CAD - 1 Kanada doları KGS - 100 Kırgız somu CNY - 10 Çin yuanı MDL - 10 MDL NOK - 10 Norveç kronu PLN - 1 Polonya zlotisi RON – 1 Romen leyi XDR – 1 SDR (Özel Çekme Hakkı) SGD – 1 Singapur Doları TJS – 10 Tacik somoni TL – 1 Türk Lirası TMT – 1 yeni Türkmen manatı UZS – 10.000 UZS UAH – 10 Ukrayna grivnası CZK – 10 CZK SEK - 10 SEK CHF - 1 İsviçre frangı ZAR - 10 Güney Afrika randı KRW - 1.000 ROK wonu
Umarım fonksiyon projenizde yerini bulur. Herhangi bir sorunuz varsa veya anlaşılmaz görünen bir şey varsa - bu makalenin altındaki yorumlarda bunun hakkında yazdığınızdan emin olun.