📚 Tutorial Ruby: Projeto Final com Arquivos, HTTP e Web Scraping

🛠️ Tutorial Ruby: Projeto Final

Aprenda a manipular arquivos, fazer requisições HTTP e web scraping em Ruby

Tutorial Ruby Projeto Final

📂 Manipulação de Arquivos em Ruby

Lendo conteúdo de arquivos

Vamos começar aprendendo a ler o conteúdo de um arquivo de texto. Criaremos um arquivo chamado shopping-list.txt com uma lista de compras:

# Abrindo e lendo um arquivo linha por linha File.open("shopping-list.txt", "r") do |file| file.each_line do |line| puts "Item: #{line.chomp}" end end

Escrevendo em arquivos

Agora vamos adicionar novos itens à nossa lista sem sobrescrever o conteúdo existente:

# Adicionando itens a um arquivo existente File.open("shopping-list.txt", "a") do |file| file.puts "Arroz" file.puts "Feijão" end
Dica: Use "a" (append) para adicionar conteúdo e "w" (write) para sobrescrever o arquivo.

🔗 Trabalhando com Requisições HTTP

Fazendo requisições GET

Vamos baixar o conteúdo HTML de uma página web e salvá-lo localmente:

require 'net/http' require 'uri' url = URI.parse('http://exemplo.com') response = Net::HTTP.get_response(url) File.open("pagina.html", "w") do |file| file.write(response.body) end

Consumindo APIs com HTTPS

Agora vamos fazer uma requisição GET para uma API que retorna JSON:

require 'net/http' require 'json' require 'uri' url = URI('https://api.exemplo.com/dados') response = Net::HTTP.get(url) dados = JSON.parse(response) puts "Dados recebidos: #{dados.inspect}"

Enviando dados com POST

Para enviar informações a um servidor, usamos requisições POST:

require 'net/http' require 'uri' url = URI('https://api.exemplo.com/usuario') dados = { nome: "João", profissao: "Desenvolvedor" } Net::HTTP.post(url, dados.to_json, "Content-Type" => "application/json")

🕸️ Web Scraping com Nokogiri

Instalando a gem Nokogiri

Primeiro, instale a gem necessária:

gem install nokogiri

Extraindo dados de uma página web

Vamos extrair o título principal (h1) de um site:

require 'nokogiri' require 'open-uri' doc = Nokogiri::HTML(URI.open('https://onebitcode.com')) titulo = doc.at('h1').text puts "Título da página: #{titulo}"

Coletando múltiplos elementos

Agora vamos extrair todos os títulos de posts (h3 dentro de links):

doc.css('h3 a').each do |link| puts "Post: #{link.text.strip}" end
Exemplo de web scraping com Ruby

🎓 Projeto Final: Sistema de Tradução

Seu desafio é criar um sistema de tradução que:

  1. Recebe uma frase do usuário
  2. Identifica o idioma original
  3. Traduz para o idioma de destino
  4. Armazena o resultado em um arquivo

Requisitos do Projeto

1. Estrutura da Classe

Crie uma classe Translator que encapsule toda a lógica de tradução:

class Translator def initialize(api_key) @api_key = api_key end def translate(text, from, to) # Implementação da tradução end end

2. Armazenamento de Resultados

Salve cada tradução em um arquivo com nome baseado na data/hora:

def save_translation(original, translated, from_lang, to_lang) filename = "traducoes/traducao_#{Time.now.strftime('%Y%m%d_%H%M%S')}.txt" File.open(filename, "w") do |file| file.puts "Original (#{from_lang}): #{original}" file.puts "Traduzido (#{to_lang}): #{translated}" end end

3. Integração com API

Use uma API de tradução como a Google Translate ou DeepL:

def call_translation_api(text, from, to) # Implemente a chamada à API aqui # Exemplo com HTTParty: response = HTTParty.post( 'https://api.translate.com/v2', body: { text: text, source: from, target: to }.to_json, headers: { 'Authorization' => "Bearer #{@api_key}", 'Content-Type' => 'application/json' } ) JSON.parse(response.body)['translatedText'] end

💡 Dicas Finais

Tratamento de Erros

Não esqueça de implementar tratamento de erros para suas requisições:

begin # Seu código que pode falhar rescue Net::HTTPError => e puts "Erro na requisição HTTP: #{e.message}" rescue JSON::ParserError => e puts "Erro ao processar JSON: #{e.message}" end

Testando Seu Código

Crie casos de teste para verificar seu sistema:

# Exemplo de teste simples translator = Translator.new(ENV['TRANSLATE_API_KEY']) translation = translator.translate("Hello", "en", "pt") if translation == "Olá" puts "Teste passou!" else puts "Teste falhou. Recebido: #{translation}" end

© 2023 Tutorial Ruby - Projeto Final

Pratique esses conceitos para solidificar seu conhecimento em Ruby!

Postar um comentário

0 Comentários