Sorun çözüldü. https://sozluk.gov.tr/atasozu?ara=elma
TDK'nın verdiği api ile çıkan array kısımlarını dönüştürerek sorunu çözmüş olduk.
Desteğin ve emeğin için çok teşekkür ederim hocam. Böyle hocalar, iyiki varsınız :)
Sanırım öyle. Evet. Div ile çizgi koymak istemiştim açıkcası :)
Oldu hocam. Çok teşekkürler :)
Son olarak iki tane sözlük çıkabilir. Eğer çıkarsa ikinci sözlüğün birinci sözlük ile div şekilde nasıl ayırabiliriz ?
/**
* @param $kelime
* @return string
* - PHP de sadece baş harfini büyük yapan Türkçe uyumlu fonksiyon olmadığı için kendimiz yazdık
*/
function mb_ucfirst($kelime): string
{
return mb_strtoupper(mb_substr($kelime,0, 1)) . mb_substr($kelime, 1);
}
/**
* @param string $kelime - Aranacak olan kelime
* @param string|false $kelimeLimit - Aranacak kelimenin kaç tane eş sesli anlamının döneceğini belirten parametre. false verilirse limit olmaz
* @param int $anlamLimit - Kelimenin en fazla kaç anlamı geri dönsün
* @param int $benzerLimit - Benzer kelimelerden en fazla kaç tane dönsün
* @return array
*/
function TDKSozluk(string $kelime, $kelimeLimit = false, int $anlamLimit = 2, int $benzerLimit = 10): array
{
$ch = curl_init("https://sozluk.gov.tr/gts?ara=$kelime");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false
]);
$sonuc = curl_exec($ch);
curl_close($ch);
$sonuc = json_decode($sonuc,true);
$return = [];
for ($i = 0; $i <= count($sonuc); $i++) { // En fazla kaç tane kelime anlamı dönsün limiti. Yani eş anlamlı kaç kelime görünsün. Verdiğim hak örneği, hâk ve ikinci sırada bulunan hak kelimesini döndürür varsayılan 2 ile
if ($kelimeLimit !== false) {if ($i == $kelimeLimit) break; }
if (isset($sonuc[$i])) {
$madde = mb_ucfirst($sonuc[$i]['madde']);
$return[$sonuc[$i]['kac']]['kelime'] = $madde;
for ($j = 0; $j < count($sonuc[$i]['anlamlarListe']); $j++) {
if ($j == $anlamLimit) break;
if (isset($sonuc[$i]['anlamlarListe'][$j])) {
$return[$sonuc[$i]['kac']]['anlamlar'][$j] = [
'anlam' => $sonuc[$i]['anlamlarListe'][$j]['anlam'],
'ozellik' => $sonuc[$i]['anlamlarListe'][$j]['ozelliklerListe'][0]['tam_adi'] ?? null // Sadece ilk sıradaki özelliğin değeri
];
}
}
$birlesikler = $sonuc[$i]['birlesikler'];
if (strlen($birlesikler)) {
$explode = explode(', ', $birlesikler);
$return[$sonuc[$i]['kac']]['birlesikler'] = array_slice($explode, 0, $benzerLimit); // Birleşik kelimelerden en fazla kaç tane geri dönsün
}
}
}
return $return;
}
$h = TDKSozluk(htmlspecialchars($_GET['q'] ?? 'hissikablelvuku'), 2, 1, 5);
if (count($h)) {
function div($content) { return "<div>$content</div>"; }
function section($content) { return "<section>$content</section>"; }
function strong($content) { return "<strong>$content</strong>"; }
function span($content) { return "<span>$content</span>"; }
function i($content) { return "<i>$content</i>"; }
function ul($content) { return "<ul>$content</ul>"; }
function li($content) { return "<li>$content</li>"; }
$kelimeler = "";
$anlamlar = "";
$birlesikler = "";
echo "<div class='kelimeler'>";
foreach($h as $item) {
echo "<div class='kelimeKapsayici'>";
$kelime = $item["kelime"];
echo " <div class='kelime'>";
echo " <div>Kelime:</div>";
echo " <div>$kelime</div>";
echo " </div>";
echo " <div class='anlamlar'>";
echo " <div>Anlamlar</div>";
foreach($item["anlamlar"] as $anlam) {
$anlamStr = $anlam["anlam"];
$ozellik = $anlam["ozellik"];
echo "<div class='anlam'>";
echo " <div>";
echo " <div>Özellik:</div>";
echo " <div>$ozellik</div>";
echo " </div>";
echo " <div>";
echo " <div>Anlam:</div>";
echo " <div>$anlamStr</div>";
echo " </div>";
echo "</div>";
};
echo "</div>";
echo "<div class='birlesikler'>";
foreach($item["birlesikler"] as $birlesik) {
echo "<div>$birlesik</div>";
};
echo "</div>";
echo "</div>";
};
echo "</div>";
}
else {
// Demek ki bir sonuç dönmemiş. Zaten get yöntemi ile sonuçları aldığına göre sayfanı bu şekilde oluşturabilirsin. Asıl güzel olanı aramayı ajax ile yapıp öyle sonuçları göstermen olur
}
Çalıştı hocam. Ancak anlam vs bir kısım çalışmadı gibi.
link : https://prnt.sc/4QSeJAXxj-AR
Bir yerde hata yapmışmıyız hocam ?
https://prnt.sc/OhCF7_mk1HYu
Döndüremiyor hocam kodları. Çok ilginç. Yine aynı hata :(
Yok hocam, olmuyor. Şaka gibi. Hep echo sistemli olsa idi işimi rahatlatırdı. Sizi çok rahatsız ettim ama. Beni bağışlayın.
En son attığınız kodu denedim ve yine 500 http hatasına yönlendirdi.
Kelime,anlamlar,birleşik,özellik gibi yazılara div verebilsem benim için yeterli olacak. Yani anlam yazısına başka div çıkacak olan veri yazısına da ayrı bir div vermek istemiştim.
Ayrıca yazı çıktıklarada div versem işim bitiyor.
Anlamlar kelime gibi onlara ayrı div vermek istiyorum.
Evet hocam, oldu. Son olarak bu kodlara nasıl div verebiliriz. Verince hata veriyor. Düzeltmeye çalışınca yine aynı. Yani sadece kelimelere verince tüm içindeki kelime anlam vs etkin oluyor. Ayrı ayrı div vermem gerekiyor. Son kaldı sadece :)
$anlamlar .= li(i($anlam["ozellik"]).span($anlam["anlam"]));
};
foreach($item["birlesikler"] as $birlesik) {
$birlesikler .= li(span($birlesik));
};
$kelimeler .= div(
div(strong("Kelime: ").span($item["Kelime"]))
.section(div(strong("Anlamlar")).ul($anlamlar))
.section(div(strong("Birleşikler")).ul($birlesikler))