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>