Yücel Alkan

PHP ile JSON Dosyasından Döviz Bilgilerini Alma

Bu yazımızda internet ortamında paylaşılan bir JSON dosyasından döviz bilgilerini elde edeceğiz. İnternet üzerinde arama yaparsanız ücretli veya ücretsiz olarak JSON formatında döviz bilgilerinin paylaşıldığını göreceksiniz. Ben yaptığım araştırmalar sonucunda aşağıdaki linki buldum.

https://finans.truncgil.com/today.json

Linke erişim sağladığınız zaman JSON yapısının aşağıdaki gibi olduğunu göreceksiniz.

{
  "Güncelleme Tarihi": "2019-05-02 11:15:02",
  "ABD DOLARI": {
    "Alış": "5.9563",
    "Satış": "5.9671",
    "Tür": "Döviz"
  },
  "AVUSTRALYA DOLARI": {
    "Alış": "4.1892",
    "Satış": "4.2165",
    "Tür": "Döviz"
  },
  "EURO": {
    "Alış": "6.6730",
    "Satış": "6.6851",
    "Tür": "Döviz"
  },
  "İNGİLİZ STERLİNİ": {
    "Alış": "7.7176",
    "Satış": "7.7579",
    "Tür": "Döviz"
  }
 
}

PHP'de uzak sunucuda yer alan bir dosyanın içeriğini okumak için birçok fonksiyon bulunmaktadır. Ben file_get_contents fonksiyonunu kullanacağım. Öncelikle JSON dosyasının içeriğini bir değişkene aktarıyorum.

$jsonVeri=file_get_contents("https://finans.truncgil.com/today.json");

Elde ettiğim $jsonVeri değişkeni içerisinde JSON yapısında veri tutmaktadır. Bu veriyi kullanmak için nesne veya dizi yapısına çevirmemiz gerekiyor. PHP'de bulunan json_decode fonksiyonu en az bir parametre ile çalışmaktadır. Parametre girmediğiniz takdirde bu fonksiyon, JSON verisini "nesne" olarak çözümlemektedir. Eğer ikinci parametre olarak 1 değerini girerseniz veriyi "dizi" olarak çözümleyecektir. Linkteki JSON dosyasında isim-değer çiftlerinin isim kısımları Türkçe karakter içerdiği için bu dosyadaki verileri nesne olarak kullanamıyorum. Bu yüzden veriyi dizi olarak çözümleyeceğiz.

$veri=json_decode($jsonVeri,1);

Artık $veri değişkeni üzerinden istediğim döviz kuruna ve zaman bilgisine erişim sağlayabilirim. Kurun son güncellenme zamanını almak istiyorsanız aşağıdaki şekilde bir kullanım gerçekleştirmelisiniz. 

$veri["Güncelleme Tarihi"];

Gördüğünüz gibi $veri değişkenindeki veriler dizi yapısında olduğu için indeks değerleri üzerinden verilere erişim sağlayabiliyorum. Şimdi dolar kurunun alış ve satış fiyatnı elde etmeye çalışalım.

echo $veri["ABD DOLARI"]["Alış"];
echo $veri["ABD DOLARI"]["Satış"];

Bize verilen dosyada dolar kuru "ABD DOLARI" ismiyle paylaşılmaktadır. Bu yüzden indeks değeri olarak bu ifadeyi yazdım. Alış ve satış kurları için de ifademe bir indeks daha ekledim.

Şimdi Euro kuruna göz atalım.

echo $veri["EURO"]["Alış"];
echo $veri["EURO"]["Satış"];

Bu kadar kolay. İstediğiniz döviz kuruna ait indeks değerini yazarak kur bilgilerine erişim sağlayabilirsiniz.

Anlatıma ait işlemlerin yer aldığı videoyu aşağıdan izleyebilirsiniz.

Soru görüş ve önerileriniz için yorum kısmını kullanabilirsiniz.
Hayırlı çalışmalar dilerim.

Yorumlar
Beyaz (14 Nisan 2020 - 00:54)
Merhaba, kullanmış olduğumuz bu json dosyasını kullanıcılardan nasıl gizleriz? Öğrenmek istediğim kendi sitemde kullanmak istediğim json dosyasını gizlemek. Teşekkürler
Yücel Alkan (14 Nisan 2020 - 15:31)
Merhabalar. Soruyu iki şekilde anladığım için iki farklı senaryoya uygun çözüm yazacağım. 1. Eğer bir kaynaktaki JSON dosyasını PHP'de okuyorsanız, sitenize giren kişiler zaten bunun kaynağını göremezler. 2. Eğer oluşturduğunuz bir JSON dosyasını gizlemek veya sadece istediğiniz kişilerle paylaşmak istiyorsanız token gibi doğrulama sistemi kullanabilirsiniz. JSON dosyasını okuyacak kişilere bir token/anahtar kod verirsiniz ve JSON dosyasına istek atıldığı zaman kodun doğru olup olmadığını kontrol edebilirsiniz.
Beyaz (14 Nisan 2020 - 20:25)
Merhaba, php bilgim hiç olmadığı için sormuştum. Evet dediginiz gibi php saklıyor ve hoşuma gitti. Bir sorum daha olacak. 2 farklı json dosyasından istediğim yerleri çekmek istiyorum. Bu nasıl yapılır? Sizin videolarda kısa ve net anlatımınız çok yararlı. Teşekkürler.
Yücel Alkan (15 Nisan 2020 - 18:23)
Şöyle ki, JSON dosyasından veriyi okuduğunuz zaman size bir dizi dönmüş dönüyor. Hangi veriyi almak istiyorsanız o verinin sıra numarasını yani index'ini bilmeniz yeterli. Mesela JSON dosyasından gelen verileri data adında bir diziye aldığınızı farz edelim. İstediğiniz veri de dizinin 3. indexinde olsun. Böylelikle bi veriye ulaşmak için veri[3] şeklinde bir kullanımla sadece o elemana erişim sağlayabilirsiniz. 2 farklı JSON dosyası için 2 farklı bağlantı kurmanız gerekiyor. Diğer işlemler birebir aynı.
Cevapla
Osman (19 Nisan 2020 - 17:37)
Merhaba, ben bu veriyi curl ile cekemediim sebebi nedir acaba. Bir de sanırım veriler 15 dakikada bir güncelleniyor gelen bilgiye göre doların yükseliş ve düşüşüne göre renklendirmeyi nasıl yapabilirm php kısmını..
Yücel Alkan (19 Nisan 2020 - 18:55)
Merhabalar. Yükseliş veya düşüş olayını şöyle yapabilirsiniz: Döviz bilgilerini MySql veritabanına kaydedip, her yeni veri geldiğinde; gelen veri ile MySql veritabanında bulunan veriyi karşılaştırabilirsiniz. Bu sayede düşmüş mü, çıkmış mı tespit edebilirsiniz. JSON'dan gelen her veriyi tabloda tutmanıza gerek yok. Sadece son veriyi tutsanız yeterli olur. CURL olayını denemedim ancak kullanım açısından pek uygun olmaz gibi. Zaten veriler JSON olarak size verilmiş.
Cevapla
Efekan (02 Mayıs 2020 - 00:46)
Hocam sitemiz için dinamik olarak tüm postları jsona nasıl dökebiliriz ? php codeigneter kullanıyorum amp sayfasına çevirmek için kullanmayı düşünüyorum.
Yücel Alkan (02 Mayıs 2020 - 18:51)
Merhabalar. Postlara ait bilgiler sanırım bir veritabanında tutuluyor. Aşağıdaki adımları izleyebilirsiniz. 1. Boş bir PHP sayfası açınız. 2. Veritabanı bağlantısını yapınız. 3. JSON'a aktarmak istediğiniz tablodaki veriler için SQL sorgusunu yazıp çalıştırınız. Zaten sonuçlar size dizi olarak gelecektir. 4. Diziyi JSON objesine dönüştürünüz. 5. Objenizi echo ile ekrana yazdırınız. İşlemleriniz bu kadar.
Cevapla
Servet (17 Mayıs 2020 - 13:45)
Merhaba, Anlatım ve kaynak için çok teşekkürler. Gayet doğru çalışan bir yöntem; Acaba değişen değerleri ikon olarak gösterebilmek için Veritabanı eklemesinide yapabilir misiniz? Ya da veritabanına ekleme olayını video olarak anlatabilir misiniz? Teşekkürler, Emeğinize sağlık.
Cevapla
çağlar ceren (23 Mayıs 2020 - 12:52)
ullandığım api : https://api.coinlore.net/api/tickers/ buradan 22.satırdaki zcash i çektiriyorum $zcash = $json["data"]["22"]["price_usd"]; Burada şöyle bi sorunum var bazen bu zcash beya başka değerlerin yerleri değişiyor X COİN = 22.SATIRDA YARIN XCOİN 23.SATIRA kayıyor bunu nasıl engellerim id den çektirmem lazım bunu nasıl yaparım yani satır yerine id veya isimden çektirmeyi
Cevapla
taha özkan (23 Eylül 2020 - 18:33)
Merhaba, çektiğiniz json dosyasını görüntülemek istedim tam 5 saat geriden geliyor bilgiler. bu şekilde nası kullanılabilir, bilgiler çok öncesine ait, sadece linki açtım, ben mi bir hata yaptım bilemedim.
Cevapla
İsmail YORULMAZ (05 Kasım 2020 - 16:43)
JS veya JQuery ile de mümkün mü bu?
Yücel Alkan (07 Kasım 2020 - 16:36)
Tabii ki mümkün. Şu linkte JS ve Jquery'de bu işlerin nasıl yapıldığını anlattım. https://www.yucelalkan.com/javascript-jquery-ile-json-islemleri
Cevapla
sen sen dev (07 Kasım 2020 - 14:58)
o nasıl api öyle ya. türkçe kareterli key mi olur ? ne hikmezse php7.2 calistirmadi. "ABD DOLARI": { "Alış": "5.9563", "Satış": "5.9671", "Tür": "Döviz" }, yerine USD : { ... } formatinda vermen daha iyi olmazmıydı. işimi görmedi.
Yücel Alkan (07 Kasım 2020 - 15:42)
Tepkinizde haklısınız ama api'yi ben yazmadım. :)
Cevapla
Trunçgil Teknoloji (15 Aralık 2020 - 10:41)
Trunçgil Teknoloji #Finans #RestAPI'ın 2. versiyonu yayınlandı. 2. versiyonunda yenilikler: - Kurlarda global isimler kullanıldı. - Türkçe karakterler ve boşluklar kaldırıldı. Kullanım İçin: https://lnkd.in/dkYnzxd #ReqBin Online Test Aracı : https://lnkd.in/de-fsmb https://truncgil.com.tr/altin-ve-doviz-kuru-bilgilerini-kullanacak-yazilim-gelistiricilerine-alternatif-ve-hizli-api-truncgil-finans-yayinda
Cevapla
murat gunes (06 Ocak 2021 - 21:05)
merhaba. çok faydalı bir çalışma elinize sağlık Mesela bu verileri MYSQL veri tabanımıza kaydetmek istesek hangi kod yapısını kullanmalıyız? Kolay gelsin
Cevapla
Uğur Akarsu (18 Kasım 2021 - 11:37)
Hocam ben bu API'yi kullanarak discord botuma döviz takibi ekledim ama botumu bulut servisinde hostladığım zman dönüt alamıyorum
Cevapla
Yorum Yapın