• 22-02-2025, 22:16:46
    #1
    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?
  • 22-02-2025, 22:32:07
    #2
    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 API’si 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
    end
    Bunu dener misin?
  • 22-02-2025, 23:18:35
    #3
    Encode 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.