Ruby ile wordle oyununu yapmaya çalışıyorum. Sadece konsolda çalışacak. Kelimenin Türkçede olup olmadığını anlamak için şöyle bir fonksiyon yazdım:
def turkish(guess)
encoded_guess = URI.encode_www_form_component(guess.downcase)
url = URI("https://sozluk.gov.tr/gts?ara=#{encoded_guess}")
response = Net::HTTP.get(url)
response_ = response.force_encoding("UTF-8")
puts "API Yanıtı: #{response_}"
data = JSON.parse(response)
if data.is_a?(Array) && !data.empty?
check_guess(guess)
return true
elsif data['error'] == 'Sonuç bulunamadı'
return false
end
rescue JSON::ParserError => e
puts "JSON çözümleme hatası: #{e.message}. Kelimeyi tekrar girin."
end
Sadece içinde ı harfi olan kelimeleri bulamıyor. Neden olabilir?
wordle benzeri oyun. küçük bir hata var.
2
●56
- 22-02-2025, 22:32:07
require 'net/http' require 'uri' require 'json' def turkish(guess) # Girdi kelimeyi UTF-8 olarak encode edelim guess_utf8 = guess.downcase.encode('UTF-8') # URL içine yerleştirirken doğru encode edelim encoded_guess = URI.encode_www_form_component(guess_utf8) url = URI("https://sozluk.gov.tr/gts?ara=#{encoded_guess}") # HTTP GET isteğini elle yönetmek bazen daha stabil sonuç verir response = Net::HTTP.start(url.host, url.port, use_ssl: true) do |http| request = Net::HTTP::Get.new(url) # JSON istediğimizi belirtelim request['Accept'] = 'application/json' http.request(request) end # İstek başarılıysa (200 OK) if response.is_a?(Net::HTTPSuccess) # Gelen cevabı UTF-8'e zorlayalım body = response.body body.force_encoding('UTF-8') puts "API Yanıtı: #{body}" begin data = JSON.parse(body) # TDK APIsi başarıyla kelime döndürdüyse Array şeklinde gelir if data.is_a?(Array) && !data.empty? check_guess(guess) # Bu metod size ait, burada doğru kelime işlemlerini yapın return true # Sonuç bulunamadı ise genelde { "error" => "Sonuç bulunamadı" } döner elsif data.is_a?(Hash) && data['error'] == 'Sonuç bulunamadı' return false else # Beklenmeyen yanıt olursa return false end rescue JSON::ParserError => e puts "JSON çözümleme hatası: #{e.message}. Lütfen kelimeyi tekrar girin." return false end else # HTTP durum kodu 200 dışında bir şeyse puts "HTTP Hata: #{response.code} - #{response.message}" return false end endBunu dener misin? - 22-02-2025, 23:18:35Encode işleminden sonra ı harfi i harfine dönüşüyor. ç,ş,ö,ü bunlarda sorun yok. Sorun encode işlemi gibi.
SORUN ÇÖZÜLDÜ. downcase ve upcase yapınca I harfi i harfine dönüşüyordu.
def turkish_downcase(text)
UnicodeUtils.downcase(text, :tr)
end
bu fonksiyonu kullanarak türkçeye uygun dönüştürme yaptım.