Skip to content

ciceroakiles/alura-imersao-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

alura-imersao-java

Objetivo geral: consumir APIs de imagens e gerar figurinhas customizadas com elas. Os códigos de exemplo nos docs podem ou não estar presentes na versão atual.

Desafios da parte 1

Usar uma alternativa ao IMDb para pegar imagens de filmes
// String url1 = "https://api.mocki.io/v2/" + API_KEY + "/MostPopularMovies";
String url2 = "https://alura-filmes.herokuapp.com/conteudos";

Solução adotada: trocar a URL da API de filmes e modificar o tratamento dos dados.


Editar a saída da nota
String os = System.getProperty("os.name");
if (os.contains("Windows")) return "*";
if (os.contains("Linux")) return "+";
return ""; // (ou seja, nada de estrelas para usuarios de Mac)

Solução adotada: dependendo do sistema operacional, certos caracteres como emojis não são impressos corretamente; logo, foi feita uma classe que detecta o mesmo e altera o caractere utilizado para exibir a nota do filme com estrelas.


Extrair chave da API para um arquivo de properties
String API_KEY = PropertyManager.getApiKey("dev.properties");

Solução adotada: após deixar a chave no arquivo de properties, incluir o mesmo no arquivo .gitignore.


Importar uma biblioteca para fazer o parse do JSON
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>{{version}}</version>
</dependency>

Solução adotada: usar o Maven no projeto e incluir a dependência acima no arquivo pom.xml.


Receber uma avaliação do usuário
Scanner sc = new Scanner(System.in);
Double novaNota = Double.parseDouble(sc.next());

Solução adotada: utilizar a classe Scanner para entrada de dados.


Imprimir um poster

Talvez, futuramente, retornar uma matriz gigante com uma "ASCII Art" ou um monte de caracteres em braille que lembram a própria imagem.


Desafios da parte 2

Criar um diretório automaticamente para o arquivo de saída
File arquivo = new File("nomeArquivo");
if (!arquivo.exists()) {
	arquivo.mkdirs(); // (cria a pasta)
}

Solução adotada: criar uma classe (contendo o trecho acima) cuja única responsabilidade é lidar com arquivos.


Centralizar texto em relação à imagem
int textX = (int) (width - legWidth)/2;

Solução adotada: deixar a posição horizontal da legenda como sendo primariamente relativa às larguras da imagem e da legenda.


Tratar a URL da imagem para obter uma maior
String urlImagemMaior = urlImagem.replace(
urlImagem.substring(
	urlImagem.indexOf("._"), urlImagem.lastIndexOf(".")), ""
);

Solução adotada: realizar o tratamento do endereço original (no caso acima, removendo uma substring).


Personalizar texto da figurinha em relação à nota
private String textoLegenda(double nota) {
return (nota >= 9) ? "TOPZERA!" :
	(nota >= 7.25) ? "MUITO BOM!" :
	(nota >= 5.5) ? "MAIS OU MENOS!" :
	(nota >= 2.75) ? "DORMI NO MEIO!" :
	"NEM VI!";
}

Solução adotada: escrever um método que retorna uma legenda, a qual varia de acordo com o valor da nota.


Consumir APIs de imagens com estruturas JSON diferentes

Solução adotada: usar cada um dos extratores em uma classe diferente, como proposto na parte 3.


Desafios da parte 3

Mudar a classe Conteudo para "record"

Realizável apenas usando Java 14 ou posterior.


Utilizar uma exceção customizada
public class CustomMsgException extends Exception {

	public CustomMsgException(String msg, Throwable err) {
		super(msg, err);
	}
}

Solução adotada: criar uma subclasse específica, responsável por lançar a exceção.


Utilizar um enum com URL e extrator de conteúdo
public enum UrlExtractorEnum {
	API_IMDB("https://endereco1.etc.com/recurso/", new ExtractorIMDb()),
	API_NASA("https://endereco2.etc.com/recurso/", new ExtractorNASA());

	[...]
}

Solução adotada: dessa forma, é possível associar cada String com cada IExtractor.


Usar alguma API de imagens completamente diferente

Solução adotada: fazer a própria API, como proposto nas partes 4 e 5.



Continua no segundo repositório:

https://github.com/ciceroakiles/springboot-imagens-api-alura

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages