• 29-05-2023, 20:04:38
    #1
    Kendi kullanmış olduğum ve alt yapısını benim sağladığım Kripto Para birimlerinin anlık fiyat bilgilerini çeken fonksiyonunu ve kullanım şeklini sizler ile paylaşıyorum

    <?php
    $plugins = "https://webphpscript.com/plugins"; // pluginlerimim bulunduğu ve verilerin çekildiği url. değiştirmeyiniz
    $activeCoins = [
        'BTCUSDT',
        'ETHUSDT',
        'ETCUSDT',
        'XRPUSDT',
        'BCHUSDT',
        'NEOUSDT',
        'LTCUSDT'
    ];
     
    /**
     * Sort data by selected field
     *
     * example JSON data:
     *
     * {
     *   "s": "BTCUSDT",
     *   "p": "-88.10000000",
     *   "P": "-0.316",
     *   "o": "27892.64000000",
     *   "h": "28047.01000000",
     *   "l": "27524.60000000",
     *   "c": "27804.54000000",
     *   "q": "931358519.97608770"
     * }
     */
    function sortBy(array &$records, string $field, bool $reverse = false): void
    {
        $reverse ? usort($records, fn ($a, $b) => $b[$field] <=> $a[$field]) : usort($records, fn ($a, $b) => $a[$field] <=> $b[$field]);
    }
     
    /**
     * Fetch data from URL
     *
     * @param mixed $url
     * @return bool|string
     */
    function fetch(string $url): string
    {
        $curl_defaults = [
            CURLOPT_HEADER => 0,
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_AUTOREFERER => 1,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_CONNECTTIMEOUT => 15,
            CURLOPT_TIMEOUT => 15,
            CURLOPT_VERBOSE => 0,
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
        ];
        $ch = curl_init();
        curl_setopt_array($ch, $curl_defaults);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36"); //Tarayıcı sürümü
        curl_setopt($ch, CURLOPT_URL, $url);
        $html = curl_exec($ch);
        curl_close($ch);
        return $html;
    }
     
    ?>
    <style>
        .coin-image {
            width: 20px;
            height: 20px;
            margin-right: 10px;
            margin-bottom: -4px;
            border-radius: 50%;
        }
        ul {
            list-style-type: none;
            margin: 0;
            padding: 0;
        }
    </style>
     
    <ul>
        <?php
        // query build and fetch data
        $activeCoinsString = json_encode($activeCoins);
        $jsonString = fetch("{$plugins}/crypto/crypto_ticker.php?s={$activeCoinsString}");
        $cryptoData = json_decode($jsonString, true);
        // sort by s field
        sortBy($cryptoData, 's', false);
        foreach ($cryptoData as $cripto_bilgi) {
            $s = $cripto_bilgi["s"];
            if (0.0199 >= $cripto_bilgi["c"] || 0 == $cripto_bilgi["c"]) {
                $c = number_format($cripto_bilgi["c"], 8, '.', ',');
            } else {
                $c = number_format($cripto_bilgi["c"], 2, '.', ',');
            }
            $p = number_format($cripto_bilgi["p"], 2, '.', ',');
            $P = number_format($cripto_bilgi["P"], 2, '.', ',');
            $q = number_format($cripto_bilgi["q"], 0, '.', ',');
            $h = number_format($cripto_bilgi["h"], 2, '.', ',');
            $l = number_format($cripto_bilgi["l"], 2, '.', ',');
            $sembol = str_replace("USDT", "", $s); // kripto adı
            $price = $c; // kripto son fiyat / anlık
            $parcent1 = $p; // değişim fiyat / 24 saatlik
            $parcent2 = $P; // değişim yüzdelik  / 24 saatlik
            $volume = $q; // kripto hacmi  / 24 saatlik
            $high = $h; // en yüksek fiyat  / 24 saatlik
            $low = $l; // en düşük fiyat  / 24 saatlik
        ?>
            <li>
                <img class="coin-image" src="https://s3-symbol-logo.tradingview.com/crypto/XTVC<?php echo $sembol; ?>.svg" /> <?php echo $s; ?> <br />
                <b>Fiyat:</b> <?php echo $price; ?><br />
                <b>En Düşük:</b> <?php echo $low; ?><br />
                <b>En Yüksek:</b> <?php echo $high; ?><br />
                <?php if (strstr($parcent2, "-")) { ?>
                    <b>Değişim:</b> <b style="color: red;"><?php echo $parcent2; ?></b><br />
                <?php } else { ?>
                    <b>Değişim:</b> <b style="color: green;"><?php echo $parcent2; ?></b><br />
                <?php } ?>
                <b>Hacim:</b> <?php echo $volume; ?><br />
                <hr>
            </li>
        <?php
        }
        ?>
    </ul>
    yukarıdaki kodu kendi sitenize göre çevirip dilediğiniz coinlerin bilgilerini rahatça kullanabilirsiniz.

    Yukarıdaki kodun demosu: https://webphpscript.com/plugins/crypto/demo1.php
    Wordpress'e uyarlanmış hali:https://wp.webphpscript.com/crypto-list
  • 29-05-2023, 20:44:42
    #2
    Fonksiyondan sonraki parçalama işlemi daha basit hale getirilebilir, biraz karışık olmuş sanki, ellerinize sağlık. 🙌
  • 29-05-2023, 21:07:52
    #3
    Lusy adlı üyeden alıntı: mesajı görüntüle
    Fonksiyondan sonraki parçalama işlemi daha basit hale getirilebilir, biraz karışık olmuş sanki, ellerinize sağlık. 🙌
    Cevap için teşekkür ederim. Çoğu fonksiyonun ve kodun ne işe yaradığını söyledim ve açıkladım. En basit haliyle sunmaya çalıştım. Daha da kolay yapmak için çalışacağım. Sevgilerim ile...
  • 30-05-2023, 07:51:20
    #4
    Tebrikler güzel bir çalışma olmuş ama yinede düzeltilmesi gereken yerler var.
    • PHP'de değişken ve fonksiyon isimleri camelCase şeklinde olmalıdır. Spagetti PHP fonksiyonlarına aldanmamak gerekiyor.
    • Mümkün olduğunca global keywordünü kullanmaktan kaçınmalıyız, helper metodları sınıflardan çokta uzak düşünememeliyiz.
    • Verileri JSON formatına göre planlamalıyız. İlk helper method aslında gereksiz çünkü json_encode bu işi görüyor.
    • Metodların açıklaması metodların üzerindeki yorum blokları içinde olmalı. Bu sayede kodun okunabilirliğini arttırıyoruz.
    • Mümkün olduğunda argument ve return type'lar kullanılmalı.
    Örnek olması açısından aşağıya yeniden derlediğim bir versiyonunu bırakıyorum (PHP 8 ve üzeri için).

    <?php
    $plugins = "https://webphpscript.com/plugins"; // pluginlerimim bulunduğu ve verilerin çekildiği url. değiştirmeyiniz
    $activeCoins = [
        'BTCUSDT',
        'ETHUSDT',
        'ETCUSDT',
        'XRPUSDT',
        'BCHUSDT',
        'NEOUSDT',
        'LTCUSDT'
    ];
    
    /**
     * Sort data by selected field
     *
     * example JSON data:
     *
     * {
     *   "s": "BTCUSDT",
     *   "p": "-88.10000000",
     *   "P": "-0.316",
     *   "o": "27892.64000000",
     *   "h": "28047.01000000",
     *   "l": "27524.60000000",
     *   "c": "27804.54000000",
     *   "q": "931358519.97608770"
     * }
     */
    function sortBy(array &$records, string $field, bool $reverse = false): void
    {
        $reverse ? usort($records, fn ($a, $b) => $b[$field] <=> $a[$field]) : usort($records, fn ($a, $b) => $a[$field] <=> $b[$field]);
    }
    
    /**
     * Fetch data from URL
     *
     * @param mixed $url
     * @return bool|string
     */
    function fetch(string $url): string
    {
        $curl_defaults = [
            CURLOPT_HEADER => 0,
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_AUTOREFERER => 1,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_CONNECTTIMEOUT => 15,
            CURLOPT_TIMEOUT => 15,
            CURLOPT_VERBOSE => 0,
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
        ];
        $ch = curl_init();
        curl_setopt_array($ch, $curl_defaults);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36"); //Tarayıcı sürümü
        curl_setopt($ch, CURLOPT_URL, $url);
        $html = curl_exec($ch);
        curl_close($ch);
        return $html;
    }
    
    ?>
    <style>
        .coin-image {
            width: 20px;
            height: 20px;
            margin-right: 10px;
            margin-bottom: -4px;
            border-radius: 50%;
        }
        ul {
            list-style-type: none;
            margin: 0;
            padding: 0;
        }
    </style>
    
    <ul>
        <?php
        // query build and fetch data
        $activeCoinsString = json_encode($activeCoins);
        $jsonString = fetch("{$plugins}/crypto/crypto_ticker.php?s={$activeCoinsString}");
        $cryptoData = json_decode($jsonString, true);
        // sort by s field
        sortBy($cryptoData, 's', false);
        foreach ($cryptoData as $cripto_bilgi) {
            $s = $cripto_bilgi["s"];
            if (0.0199 >= $cripto_bilgi["c"] || 0 == $cripto_bilgi["c"]) {
                $c = number_format($cripto_bilgi["c"], 8, '.', ',');
            } else {
                $c = number_format($cripto_bilgi["c"], 2, '.', ',');
            }
            $p = number_format($cripto_bilgi["p"], 2, '.', ',');
            $P = number_format($cripto_bilgi["P"], 2, '.', ',');
            $q = number_format($cripto_bilgi["q"], 0, '.', ',');
            $h = number_format($cripto_bilgi["h"], 2, '.', ',');
            $l = number_format($cripto_bilgi["l"], 2, '.', ',');
            $sembol = str_replace("USDT", "", $s); // kripto adı
            $price = $c; // kripto son fiyat / anlık
            $parcent1 = $p; // değişim fiyat / 24 saatlik
            $parcent2 = $P; // değişim yüzdelik  / 24 saatlik
            $volume = $q; // kripto hacmi  / 24 saatlik
            $high = $h; // en yüksek fiyat  / 24 saatlik
            $low = $l; // en düşük fiyat  / 24 saatlik
        ?>
            <li>
                <img class="coin-image" src="https://s3-symbol-logo.tradingview.com/crypto/XTVC<?php echo $sembol; ?>.svg" /> <?php echo $s; ?> <br />
                <b>Fiyat:</b> <?php echo $price; ?><br />
                <b>En Düşük:</b> <?php echo $low; ?><br />
                <b>En Yüksek:</b> <?php echo $high; ?><br />
                <?php if (strstr($parcent2, "-")) { ?>
                    <b>Değişim:</b> <b style="color: red;"><?php echo $parcent2; ?></b><br />
                <?php } else { ?>
                    <b>Değişim:</b> <b style="color: green;"><?php echo $parcent2; ?></b><br />
                <?php } ?>
                <b>Hacim:</b> <?php echo $volume; ?><br />
                <hr>
            </li>
        <?php
        }
        ?>
    </ul>
  • 30-05-2023, 08:50:00
    #5
    Egoisto adlı üyeden alıntı: mesajı görüntüle
    Tebrikler güzel bir çalışma olmuş ama yinede düzeltilmesi gereken yerler var.
    • PHP'de değişken ve fonksiyon isimleri camelCase şeklinde olmalıdır. Spagetti PHP fonksiyonlarına aldanmamak gerekiyor.
    • Mümkün olduğunca global keywordünü kullanmaktan kaçınmalıyız, helper metodları sınıflardan çokta uzak düşünememeliyiz.
    • Verileri JSON formatına göre planlamalıyız. İlk helper method aslında gereksiz çünkü json_encode bu işi görüyor.
    • Metodların açıklaması metodların üzerindeki yorum blokları içinde olmalı. Bu sayede kodun okunabilirliğini arttırıyoruz.
    • Mümkün olduğunda argument ve return type'lar kullanılmalı.
    Örnek olması açısından aşağıya yeniden derlediğim bir versiyonunu bırakıyorum (PHP 8 ve üzeri için).
    Hocam elinize sağlık güzel bir düzenleme olmuş. Şuan demoda kullandım yaptığınız düzenlemeyi. Ben aceleden ve önceki kullandığım fonksiyonları kullandım burada aceleden vermek için uğraşmadım. Ama tabii ki öğrendiğim çok şey oldu yenilikler. Teşekkür ederim emeğiniz için.