• 19-04-2021, 16:21:30
    #10
    MCERAN adlı üyeden alıntı: mesajı görüntüle
    Anlık değişenn bir sistem için db de çok fazla insert ve update işlemi yapmayı planlıyorsunuz. Anladığım kadarı ile sunucunuz ve veritabanınız buna göre optimize değil veya yeterli donanımsal özelliklere sahip değil. Veritabanında insert ve update işlemlerinde ayrıca index devamlı yeniden hesaplanır. Buda veritabınınızın kilitlenmesine yol açar. Tamamen buna yönelik yapılandırsanız bu seferde select işlemleriniz yavaşlar. En iyi çözüm Redis, memcache veya daha basit olarak file caching yöntemine başvurmanız olacaktır. Sağlıklı yöntem budur.

    Koda gelecek olursak;
    Data elimizde yok ama çıktı resiminden yola çıkarsak şunu farkediyorum. Json çıktısında parent olarak bir üst kısımda bir dizi daha var. Yani şöyle olabileceğini varsayıyorum.

    $urlAllData = file_get_contents("https://api.com/?per_page=3&page=1");
    $AllData = json_decode($urlAllData);
    
    foreach ($AllData as $mydata) {
        foreach ($mydata->market_data as $marketData) {
            foreach ($marketData->current_price as $values) {
                echo $values->usd . "\n";
            }
        }
    }
    Evet hocam, önce insert ile eklemeyi planlıyorum. Sonra update ile dakikada 1 güncellemeyi düşünüyordum. Bahsettiğiniz sunucu tiplerine göz atacağım. Bu sunucular ile Android Uygulama üzerinde realtime veri alış-verişi yapabilir miyiz peki hocam? RestAPI kullanmayı düşünüyordum. Birde sizin belirttiğiniz kodu denedim fakat yine beyaz ekran olarak çıktı aldım.

    Üzerinde çalıştığım URL= https://raw.githubusercontent.com/co...main/data.json

    Kod Tamamı:

    $urlAllData = file_get_contents("https://raw.githubusercontent.com/codehakan/deneme/main/data.json");
    $AllData = json_decode($urlAllData);
    
    
    foreach ($AllData as $mydata) {
        foreach ($mydata->market_data as $marketData) {
            foreach ($marketData->current_price as $values) {
                echo $values->usd . "\n";
            }
        }
    }
  • 19-04-2021, 16:51:25
    #11
    Altındaki veriler bir dizi değil o yüzden for kullanılmamalı. son hali.
                $data = file_get_contents("https://raw.githubusercontent.com/codehakan/deneme/main/data.json");
                $arr = [];
                $jsonData = json_decode($data);
                foreach ($jsonData as $items) {
                    $name = $items->name;
                    $itemCurrencies = $items->market_data->current_price;
                    $usd = $itemCurrencies->usd;
                    $aed = $itemCurrencies->aed;
                    array_push($arr, [
                        "name" => $name,
                        "usd" => $usd,
                        "aed" => $aed,
                    ]);
                }
                print_r($arr);
  • 19-04-2021, 18:37:43
    #12
    MCERAN adlı üyeden alıntı: mesajı görüntüle
    Altındaki veriler bir dizi değil o yüzden for kullanılmamalı. son hali.
                $data = file_get_contents("https://raw.githubusercontent.com/codehakan/deneme/main/data.json");
                $arr = [];
                $jsonData = json_decode($data);
                foreach ($jsonData as $items) {
                    $name = $items->name;
                    $itemCurrencies = $items->market_data->current_price;
                    $usd = $itemCurrencies->usd;
                    $aed = $itemCurrencies->aed;
                    array_push($arr, [
                        "name" => $name,
                        "usd" => $usd,
                        "aed" => $aed,
                    ]);
                }
                print_r($arr);
    Teşekkür ederim, bende denedim çalışıyor. URL'yi değiştirip, verileri aldığım apiyi kullandığımda tekrar boş sayfa alıyorum. Github linkinde ki json çıktısına bakmışsınızdır. Orada ki her nesneyi bir sınıf olarak oluşturdum veritabanında. auto_increment ile bir id veriyorum. 2. kolonda da coinin id veriyorum. Sonrasında o objenin değerleri neyse sütunlara göre yerleştiriyorum. Yazdığınız kısa kodda bunu nasıl yapabilirim ? Vaktiniz varsa ücretli/ücretsiz yardımcı olabilir misiniz bana bu konuda?

    Örnek:
  • 19-04-2021, 19:33:01
    #13
    Pek vaktim yok yoğunum. Ama özelden live api adresini gönderin müsait zamanda yardımcı olurum.
  • 20-04-2021, 14:01:30
    #14
    Bir işi yapmadan önce ne yapmak istediğimize ve elimizdekilere bakmalıyız.
    1. çekilecek veri büyük mü => hayır
    2. çok fazla condition veya calc gerektiren ham veriye mi sahip => hayır
    3. sıklıkla güncellenen bir veri mi => evet
    4. sunucu donanım, optimizasyon ve db tasarımı uygun mu => hayır
    Bütün bunların sonucunda;
    Senin yapman gereken, apiden gelen veriyi json dosyası olarak sitene kaydetmek ve kendi json dosyandan veriyi çekmek.

    kolay gelsin;


    // API BİLGİSİNİ JSON OLARAK SİTENİZE KAYDEDER.
    $FILE = __DIR__."/api.json";
    $API_URL = "https://raw.githubusercontent.com/codehakan/deneme/main/data.json";
    $data = file_get_contents($API_URL);
    file_put_contents($FILE, $data);
    
    // Sitenize kaydettiğiniz json dosyasından veriyi oku
    // EĞER SADECE BITCOIN,ETERHUM GİBİ BİLGİLERİ FOR KULLANMADAN ÇEKMEK İSTERSEN
    /*
        $jsonData[0] => bitcoin
        $jsonData[1] => ethereum
        $jsonData[2] => binancecoin
        $jsonData[3] => ripple
        $jsonData[4] => dogecoin
        $jsonData[5] => tether
        $jsonData[6] => cardano
        $jsonData[7] => polkadot
        $jsonData[8] => bitcoin-cash
        $jsonData[9] => litecoin
    */
    $FILE = __DIR__."/api.json";
    if (file_exists($FILE)) {
        $data = file_get_contents($FILE);
        $jsonData = json_decode($data);
    
        //  bitcoin bilgisini çek diyoruz => $jsonData[0]
        $item = $jsonData[0]; // hangı coin bilgisi çağırılsın $jsonData[1], $jsonData[2]
    
        $name = $item->name;
        $itemCurrencies = $item->market_data->current_price;
        $usd = $itemCurrencies->usd;
        $aed = $itemCurrencies->aed;
    
        print_r("$name - USD: $usd - AED: $aed");
    }
  • 21-04-2021, 00:21:42
    #15
    MCERAN adlı üyeden alıntı: mesajı görüntüle
    Bir işi yapmadan önce ne yapmak istediğimize ve elimizdekilere bakmalıyız.
    1. çekilecek veri büyük mü => hayır
    2. çok fazla condition veya calc gerektiren ham veriye mi sahip => hayır
    3. sıklıkla güncellenen bir veri mi => evet
    4. sunucu donanım, optimizasyon ve db tasarımı uygun mu => hayır
    Bütün bunların sonucunda;
    Senin yapman gereken, apiden gelen veriyi json dosyası olarak sitene kaydetmek ve kendi json dosyandan veriyi çekmek.

    kolay gelsin;


    // API BİLGİSİNİ JSON OLARAK SİTENİZE KAYDEDER.
    $FILE = __DIR__."/api.json";
    $API_URL = "https://raw.githubusercontent.com/codehakan/deneme/main/data.json";
    $data = file_get_contents($API_URL);
    file_put_contents($FILE, $data);
    
    // Sitenize kaydettiğiniz json dosyasından veriyi oku
    // EĞER SADECE BITCOIN,ETERHUM GİBİ BİLGİLERİ FOR KULLANMADAN ÇEKMEK İSTERSEN
    /*
        $jsonData[0] => bitcoin
        $jsonData[1] => ethereum
        $jsonData[2] => binancecoin
        $jsonData[3] => ripple
        $jsonData[4] => dogecoin
        $jsonData[5] => tether
        $jsonData[6] => cardano
        $jsonData[7] => polkadot
        $jsonData[8] => bitcoin-cash
        $jsonData[9] => litecoin
    */
    $FILE = __DIR__."/api.json";
    if (file_exists($FILE)) {
        $data = file_get_contents($FILE);
        $jsonData = json_decode($data);
    
        //  bitcoin bilgisini çek diyoruz => $jsonData[0]
        $item = $jsonData[0]; // hangı coin bilgisi çağırılsın $jsonData[1], $jsonData[2]
    
        $name = $item->name;
        $itemCurrencies = $item->market_data->current_price;
        $usd = $itemCurrencies->usd;
        $aed = $itemCurrencies->aed;
    
        print_r("$name - USD: $usd - AED: $aed");
    }

    Allah sizden razı olsun hocam. Verdiğiniz bilgiler ve tavsiyelerinizi mutlaka kullanacağım. Örnek yazdığınız kod bloğu ile işimi çok rahat bir şekilde çözdüm. Size minnettarım...
  • 21-04-2021, 00:27:10
    #16
    Rica ederim. Yardımcı olduğuma sevindim.