Olá, 😉
Sou iniciante no mundo da programação e esse é o meu primeiro projeto realizado em Java. 🌟🚀
🌟⭐ Este projeto ganhou uma Menção Honrosa Alura🌟⭐
Aula 01 - Consumindo uma API de Filmes com Java
Consumir uma API do site IMDb e separar em conteúdos:
- Título do Filme;
- Link da Imagem;
- Notas dos Usuários.
Aula 02 - Gerando Figurinhas para o WhatsApp
Gerar figurinhas a partir de uma imagem do diretório local ou de uma url;
- Criar uma imagem com leitura no terminal;
- Enviar imagem no WhatsApp;
- Conseguir centralizar o texto criado.
Aula 03 - Aula com foco em Orientação a Objetos, Refatoração e Encapsulamento
Gerar figurinhas a partir de uma imagem de uma url, do site da NASA e do IMDb;
- Consumir API do site da IMBd e da Nasa ou os demais links que os instrutores criaram;
- Criação de figurinhas para o WhatsApp com imagens incríveis da Nasa
Aula 04 - Criando nossa própria API com Spring
Criar nossa própria API e Web Service, podendo ser consumida com todo o código que já escrevemos e gerar mais figurinhas baseado neste novo Web Service.
- Criação de própria API e WEB Service
- Acesso ao Spring
- Acesso ao MongoDB
- Acesso ao PostMan
Aula 05 - Publicando nossa API no Cloud
Colocar nossa aplicação no ar, fazer um Deploy
- Acesso ao Heroku
- Aplicação na nuvem
- gerar figurinhas a partir do conteúdo desta API.
- Jacqueline Oliveira
- Alexandre Aquiles
- Paulo Silveira
Os 250 melhores filmes de acordo com a classificação do IMDB
Para início, nos cadastramos no site do IMDb API , para em seguida, termos a chave de acesso.
Para achar sua API Key:
- Após se registrar e confirmar o registro pelo recebimento do e-mail
- Clicar no nome do usuário
- Abrir o Profile
- Abrir API Tester
- Pronto, sua API Key estará visível
Porém, no primeiro dia da imersão, o site da IMDB ficou instável e os intrutores criaram outros meios para seguirmos com a aula.
Escolhi o link de API criado pela instrutora Jacqueline: https://alura-filmes.herokuapp.com/conteudos
Tarefa realizada em conjunto com os instrutores da Alura:
Tarefas extras: decorar o terminal.
- Terminal - título do filme sublinhado:
System.out.println("\u001b[4m" + filme.get("title") + "\u001b[0m")
- Terminal - link do filme na cor Ciano:
System.out.println("\u001b[36m" + filme.get("image") + "\u001b[37m");
- Terminal - nota do usuário na cor Amarela:
System.out.println("\u001b[33m" + filme.get("imDbRating") + "\u001b[37m");
for (Map<String, String> filme : listaDeFilmes) {
System.out.println(filme.get("title"));
System.out.println(filme.get("image"));
System.out.println(filme.get("imDbRating"));
System.out.println();
Resultado no terminal: 🥰
Base: \u001b[nºm
Realce | Código SGR |
---|---|
Negrito | 1 |
Itálico | 3 |
Sublinhado | 4 |
Piscando | 5 |
Invertido | 7 |
Riscado | 9 |
Cor | Código SGR cor do texto | Código SGR cor de fundo |
---|---|---|
Preta | 30 | 40 |
Vermelha | 31 | 41 |
Verde | 32 | 42 |
Amarelo | 33 | 43 |
Azul | 34 | 44 |
Magenta | 35 | 45 |
Ciano | 36 | 46 |
Branca | 37 | 47 |
Aula para gerarmos figurinhas a partir de uma imagem do diretório local ou de uma url.
Link utilizado: https://raw.githubusercontent.com/alura-cursos/imersao-java/api/TopMovies.json
A imagem no terminal não foi gerada como no exemplo do instrutor e também não gerava erro no código após o RUN.
😱😱😱
**imagem da tela do instrutor Alexandre Aquiles.
Fiquei por algum tempo tentando localizar este "erro", sem sucesso 😥
Continuei acompanhando a aula e codando junto com o professor e chegamos a um resultado positivo! 😁😀
Imagem sendo utilizada no WhatsApp: 😍
-
Criada uma classe para gerarmos as figurinhas: GeradoradFigurinhas.java
-
Na url das informações dos filmes, localizei o link da imagem e salvei em formato filme.jpg, criando no repositório:
- Um diretório de entrada: para salvar arquivos - formato filme.jpg
- Um diretório de saida: para obter o resultado após o RUN no código - formato figurinha.png
Ler imagem a partir de um diretório, dois formatos:
Ler imagem a partir de uma url, neste caso, não é necessário criar os diretórios de entrada e saída.
Na atividade, para gerar várias imagens a partir da url, utilizei o arquivo App.Java com as seguintes modificações:
Complicado sim, mas tudo bem rsrs... É o primeiro projeto!
A partir de um diretório da rede local, com o arquivo salvo em formato .png
-
Este vai controlar onde a imagem vai permanecer acima da parede em transparência.
-
Este vai controlar a largura (x) e altura (y) acima da parede em transparência.
- Exemplo com (x:500) e (y: 0)
- Este vai controlar: fonte, formato, tamanho e cor.
Fonte | Formato | Tamanho | Cor |
---|---|---|---|
Font.SANS-SERIF | (Negrito) Font.ITALIC | size:100 | graphics.setColor(Color.YELLOW) |
- Este vai controlar: texto e redirecionamento do texto, sendo (x: esquerda, centro ou direita) e (-150: altura desejada)
Texto | direção | altura |
---|---|---|
"Um Clássico Perfeito" | x:150 | novaAltura -150 |
- Exemplo com (x:-50 esquerda) e (y:-500 cima)
- Exemplo com (x:300 direita) e (-10: baixo)
Vamos iniciar com essa dica da Alura - APIs públicas: https://github.com/public-apis/public-apis
Refatorar: melhorar o código sem alterar o que ele faz!
Nesta aula, que está S.E.N.S.A.C.I.O.N.A.L, vamos mesclar o conhecimento adquirido da Aula01 e Aula02:
- Consumo de API do site da IMBd, ou os demais links que os instrutores criaram;
- Criação de figurinhas para o WhatsApp.
A ideia é ter um código que consuma com facilidade uma nova API, e a API escolhida foi da NASA!!
API da NASA, com imagens incríveis do James Webb: https://api.mocki.io/v2/549a5d8b/NASA-APOD-JamesWebbSpaceTelescope
Seguiremos a atividade no arquivo GeradoradFigurinhas.java e App.java com o código que faz leitura da uma url [https://github.com/PamelaRondina/Imersao-Alura-Java/tree/main/aula02/src]
- Leitura das 10 primeiras imagens (para não gerarmos erros nas APIs; (Pois essa imersão derrubou algumas APIs 😮).
- Excluir os caracteres após o @ para gerarmos imagens grandes, para as url's da IMDb;
- Arquivo salvos no diretório de saida. No anterior, os arquivos estavam salvos no início, gerando diversos documentos na raiz do projeto.
- listaDeFilmes alterado para ListaDeConteudos.
- filme alterado para conteúdo.
- Manipulação de dados não será a partir de uma imagem, e sim de uma url.
Necessária para gerarmos os atributos titulo e a urlImagem, deixaremos em private, pois quando incluímos apenas public todos os outros arquivos podem chamar.
Private: restringir o acesso para que só o código desta classe acesse diretamente o atributo.
Necessário para expor os atributos para os outros arquivos.
- Botão direito do mouse;
- Source Action;
- Generate Getters;
- Selecionar as lacunas apresentadas.
Código com atalho para expor os arquivos:
Criar um construtor, junto com o final para representar estes conteudos.
- Botão direito do mouse;
- Source Action;
- Generate Constructors;
- Selecionar as lacunas apresentadas.
Receberá uma url. No arquivo App.java o conteúdo abaixo foi removido, e incluso na Classe ClienteHttp.
Nota: para realizar todos os imports utilizar o atalho Alt+Shift+O
E também, teremos que tratar as possíveis exceções geradas para que sejam embrulhadas, criando um try e catch, e, incluir um return body, conforme abaixo:
No arquivo App.java, onde removemos parte do código, vamos criar (como demostrado abaixo) e alterar o buscaDAdos para json:
A lista de Maps será transformada em Lista de Conteudos. No arquivo App.java o conteúdo abaixo foi removido, e incluso na Classe ExtratorDeConteudosDaNasa, onde a listaDeConteudos foi alterada para listadeAtributos.
Criamos um foreach em // popular lista de conteúdos.
Serão quase os mesmos dados da classe da Nasa, com pequenas alterações:
- Em url --> será image;
- E do App.java será adicionado .replaceAll("(@+)(.).jpg$","$1.jpg")*.
Continuando as alterações, seguiremos para o App.java, na seção // exibir e manipular os dados, para incluir e excluir informações, conforme abaixo:
E é isso mesmo!! Podemos optar pela análise da API da NASA ou do IMDb. Vamos compreender como será feito:
Para selecionar qual API devemos analisar, basta incluir // nas linhas de String e ExtratorDeConteudos no qual NÃO for utilizar:
Fizemos o RUN em ambas as API's e o resultado foi positivo! 🤩🤩
Por último, criamos uma interface, para dizer o que um objeto deve fazer.
Interface: o que um objeto deve fazer sem dizer como ele deve ser feito. Quem vai dizer o que deve ser feito são as várias implementações da interface. Na interface, tudo é público.
No Extrator de cada conteúdo devemos incluir: implements ExtratorDeConteudo.
Novamente no App.java, alterar de:
Para:
voilà! Finalizamos nossa aula! 😍😍
Nesta aula, criaremos nossa própria API e Web Service, podendo ser consumida com todo o código que já escrevemos, além disso, vamos gerar mais figurinhas baseado neste novo Web Service! Que maneiro não?! 😁
Vamos misturar diversos Frameworks e bibliotecas, como Spring, Spring Boot, Maven, PostMan e MongoDB.
- Spring
- MongoDB (Banco de Dados)
- PostMan
Afinal, o que são Springs? São Frameworks Open Source, utilizados para agilizar o processo de codificação.
Acessar Star.Spring e seguir os passos abaixo:
- Project: Mavem Project
- Language: Java
- Spring Boot: 3.0.0 (M4)
- Group: br.com.alura
- Artifact: nome-do-projeto
- Description: descrição-do-projeto
- Packaging: Jar
- Java: 17
- Em ADD DEPENDENCIES adicionar Spring Web
- Clicar em Generate
Na pasta de Downloads teremos o arquivo relacionado em .zip, em seguida, devemos extrair o conteúdo do diretório e iniciá-lo no Visual Studio Code [VSC] (abrir com botão direito do mouse!), charemos de Projeto: Linguagens-API.
Iniciaremos um novo projeto e mais tarde vamos mesclar com os códigos das aulas anteriores.
De início, precisamos realizar o registro no MongoDB Atlas, após clicar em Create.
- Escolher a forma de autenticação: senha ou certificado.
- Escolher a origem de onde você gostaria de se conectar:
- My Local Environment: conectar do computador pessoal;
- Cloud Environment: conectar de um data center ou de Cloud pública, por exemplo, AWS.
Optando pelo My Local Environment:
- Descobrir o nº do IP;
- Incluir a descrição, opcional
- Clicar em Add Entry e Finish and Close
PostMan: algumas das possibilidades desta aplicação são navegar e explorar diversas API’s
Realizar o registro em PostMan, e baixar o PostMan Desktop (pois nossa aplicação está no localhost)
Após baixar o PostMan Desktop:
- Clicar My Workspace
- Clicar +
Não faremos um GET e sim um POST, mas no final desta aula
- Apenas para visualizar o resultado! Em GET adicionar o link do localhost: http://localhost:8080/linguagens
- Clicar Send
E PostMan retorna exatamente o que estava no navegador
Faremos uma API das linguagens mais populares das empresas que contratam a Alura. Vamos ranquear por uso, incluir imagem e popularidade.
Voltar ao VSC, abrir o projeto Linguagens-API:
- Criar uma classe LinguagemController
- Incluir a anotação
@RestController
e@GetMapping
- Incluir
return “Oi, Java!”
- Atentar-se aos
import
- Alterar
“path”
para“/linguagem-preferida”
- Alterar
SomeData
paraString
- Alterar
getMethodName
paraprocessaLinguagemPreferida
- Deletar
*@RequestParam String param*
- Deletar
import org.springframework.web.bind.annotation.RequestParam
;
@GetMapping(value="/linguagem-preferida")
public String processaLinguagemPreferida() {
return "Oi, Java!";
}
Após o RUN, no navegador escrever: localhot:8080/linguagem-prefereida e o resultado será Oi, Java! 😄
- Criar um nova Classe Linguagem
- Criar atributos privados
String title
eString image
- Criar
private int ranking
Conforme a aula03 criar os atalhos
- Criar atalho: Generate Getters
- Criar atalho: Generate Contructors
Voltaremos no arquivo LinguagemController.java para adicionar as linhas: 10, 11, 12 e 13.
Fazer o
import java.util.List;
Vamos para o repositório no GitHub com imagens das linguagens de programação.
- Escolher uma linguagem
- Selecionar o arquivo 256x256.png
- Abrir a imagem
- Clicar na imagem para gerar a url em outra janela
- Copiar nova url
Retornando ao código em LinguagemController.java colar a url na lista/image
. Incluímos uma nova linha e repetimos os passos anteriores, neste exemplo, fiz a cópia da url da imagem de Java e Python
Voltando para o arquivo LinguagemController
- Comentar ou deletar as linhas 16, 17, 18 ou 19,
Não serão mais úteis, utilizamos apenas para compreender o primeiro RUN da atividade.
- Adicionar as linhas 21 até 24.
Após o RUN, no navegador escrever: localhot:8080/linguagens e o resultado será um json
Vamos abrir no terminal o projeto anterior, no arquivo App.java vamos adicionar as linhas 17 e 18 para analisarmos uma nova API.
Após o RUN, os arquivos estarão na pasta de saída, conforme na aula anterior e o resultado será:
No repositório a partir do MongoDB (Banco de Dados):
- Clicar em Project: 0
- Clicar em View All Projects
- Clicar em Project0
- Clicar em Browse Collections
- Clicar em Add My Own Data e na próxima janela adicionar os nomes que preferir, e clicar Create
Dentro de uma coleção temos documentos e o MongoDB é um banco que armazena documentos
- Clicar em Insert Document
Em Insert to Collection, vamos uadicionar a url de uma imagens das linguagens de programação Repositório GitHub
- Clicar nas {} (chaves)
- Adicionar atributos: title, image e ranking
- Na imagem, em formato 256x256.png, incluir a url
- Clicar em Insert
Note que temos 01 (um) documento criado
Vamos criar mais 2 (dois) documentos, passaremos as informações criadas no início desta aula para o MongoDB
Atenção no momento de copiar o código não incluir as {}.
Com isso, teremos 3 (três) documentos dentro deste banco de dados, note que em cada item possui um id.
Vamos criar a String de conexão, clicar em:
- Overview
- Connect
- Connect your application
Precisaremos adicionar uma dependência no projeto.
- No VSC
- No projeto Linguagens-api
- Arquivo pom.xml
- Adicionar as linhas 25 até 28
- Clicar em Always (no canto inferior direito da tela)
No arquivo application.properties dentro do main/resources vamos colar nosso link bem legal, que é o valor da propriedade!
Resources são os demais arquivos estáticos, e outros, que não são Java
- Incluir:
spring.data.mongodb.uri
- Incluir o Link bem legal
- Senha (criado no site do MongoDb), deletar as <>
- aluraDb (que é o banco de dados)
No arquivo Linguagem.java incluir as linhas 6, 9, 10, 15, 16 e 17.
Fazer o
import org.springframework.data.annotation.Id;
Fazer oimport org.springframework.data.mongodb.core.mapping.Document;
- Criar uma classe LinguagemRepository para buscar os dados
- Alterar para interface
Apenas para visualizar o código! em MongoRepository, clicar com Ctrl+Clique
(botão esquerdo do mouse)
No arquivo LinguagemController.java
- Deletar ou comentar as linhas 11 até 15
- Adicionar as linhas 22 até 30
lembrete: as linhas 17 até 20 foram desconsideradas em um momento anterior desta aula
Após o RUN, o resultado será 😊
Faremos um POST
- Clicar +
- Em GET alterar para POST
- Em POST adicionar o link do localhost [http://localhost:8080/linguagens]
- Em Body selecionar raw, e em Text alterar para JSON
Faremos o mesmo que no início da atividade, incluir: title, image e ranking. Repositório do GitHub com imagens das linguagens de programação
Voltaremos no VSC, no arquivo LinguagemController.java para adicionar as linhas 32 até 35, criando uma variável para save
= LinguagemSalva
Fazer o
import org.springframework.web.bind.annotation.PostMapping;
Após a variável adicionar return LinguagemSalva
na linha 35
Após o RUN, voltaremos no PostMan, clicar em Send. Tendo a resposta 200 OK o resultado foi positivo 😄
Voltaremos no MongoDB, clicar em Refresh e teremos 04 resultados! 😄
E, por último, um detalhe sobre o MongoDB para conseguirmos acessar de qualquer lugar:
- Em Network Acces
- Em Edit
- Editar para o IP Geral: o acesso para o Ip Geral 0.0.0.0/0
Isso é tudo pessoal! 😊
Stickers Dev: Aluraverso no WhatsApp e Telegram
E chegou nossa última aula desta incrível jornada da Imersão Java da Alura!
Nesta aula, vamos colocar nossa aplicação no ar, ou melhor dizendo, fazer o famoso Deploy na nuvem. ☁️⛅☁️
Vamos incluir a aplicação na nuvem por um mecanismo chamado Heroku.
🚧 Momento do Registro 🚧
- Heroku
- Pré-requisitos do Heruko, baixar o Git
Acessar Heroku e realizar o registro na plataforma.
Criar uma nova aplicação Create New App
Incluir um nome, seja criativo! O site não gera nomes duplicados e clicar em Create
Vamos clicar em Heroku CLI para poder conectá-lo com o VSC.
No final da janela aberta, teremos as informações de instalação:
Abrir o projeto Linguagens-API, ir no arquivo mvnw
No terminal, rodar o comando ./mvnw package
Algumas possibilidades que este comando possui:
- Se tiver dependência,baixará os JAR'S
- Copilar testes (rodar testes se existirem)
Este comando vai gerar um arquivo dentro do diretório: linguagens-api/target/
Lembrando que
linguagens-api
é o nome do projeto
Um JAR é um arquivo em ZIP
Iremos subir a aplicação a partir do JAR, para isso:
- Extraia o
linguagens-api-0.0.1-SNAPSHOT
para o Desktop - No terminal digite, solicitado pelo instrutor:
Desktop java -jar linguagens-api-0.0.1-SNAPSHOT.jar
Em meu terminal, executei o seguinte java -jar..\linguagens-api-0.0.1-SNAPSHOT.jar
java
- chamar o programa-jar
- tipo de arquivo que o programa vai ler..
- a pasta criada estava um local anterior
E a resposta foi o erro:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/JarLauncher has been compiled by a more rec
at java.lang.ClassLoader.defineClass1(Native Method)
Este erro ocorreu, pois a versão que estava tentando executar era abaixo da qual foi compilado o programa.
Vamos entender o motivo...
Abaixo temos qual o JAVA usado para compilar o programa:
C:\Users\pamela>echo %JAVA_HOME%
C:\Program Files\Java\jdk-18.0.1.1
Já aqui mostra qual o JAVA foi usado para execução:
C:\Users\pamela\Desktop\linguagens-api> java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)
Note que o Java usado para compilar é mais atual do que o da execução:
- Para compilar: 18.0.1.1
- Para Execução: 1.8.0_341
Por isso, especificamos o Java para que seja idêntico ou superior a versão de compilação:
C:\Program Files\Java\jdk-18.0.1.1\bin\java.exe' -jar ..\linguagens-api-0.0.1-SNAPSHOT.jar
Após executado, o retorno foi positivo 😄
O mesmo erro ocorreu no terminal do instrutor, porém, ele solucionou o problema de uma outra forma:
No projeto Linguagens-api, incluir na raiz do projeto um aqruivo system.properties
Utilizei o Git CMD
Pelo Git, vamos descobrir quais são as versões:
- Versão: Git
C:\Users\pamela>git --version
git version 2.37.1.windows.1
- Versão: Heroku
C:\Users\pamela>heroku --version
» Warning: heroku update available from 7.53.0 to 7.60.2.
heroku/7.53.0 win32-x64 node-v12.21.0
Pelo Git, vamos entrar no diretório onde está o código.
C:\Users\pamela> cd Desktop
C:\Users\pamela\Desktop> cd linguagens-api
Conforme instruções do site do Heroku CLI, primeira parte:
- Rodar
$ heroku login
- Pressionar qualquer tecla
- O navegador será aberto
- Clicar Será gerado uma senha
C:\Users\pamela\Desktop\linguagens-api>heroku login
» Warning: heroku update available from 7.53.0 to 7.60.2.
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/31c7ac6a-4009-4b7d-9692-4997b1b81219?requestor=SFMyNTY.g2gDbQAAAAwxNzcuNzYuMjguMTduBgDoMqg2ggFiAAFRgA.t3g_Kd5ml5BnsyoYWY1RYUP2xmVJ9pif-3LUInFMC0k
heroku: Waiting for login... -
Conforme instruções do site do Heroku CLI, segunda parte:
Além de seguir as instruções acima, rodaremos outros comandos também:
- Rodar
git init
- Rodar
git add .
- Rodar
git commit -m "mensagem opcional"
Acima vamos incluir todos os diretórios no Heroku, abaixo vamos configurar o repositório remoto
-
$ heroku git:remote -a pamela-linguagens-api
nome do projeto
C:\Users\pamela\Desktop\linguagens-api> heroku git:remote -a pamela-linguagens-api
» Warning: heroku update available from 7.53.0 to 7.60.2.
set git remote heroku to https://git.heroku.com/pamela-linguagens-api.git
O último comando vai gerar um código, temos que jogar este código para o Heroku.
- Rodar
git push heroku master
As instalações necessárias foram feitas no Heroku.
Em seguida, vamos rodar a url que colocamos no ar, abrir o arquivo App.java:
- alterar
"http://localhost:8080/linguagens"
parahttps://pamela-linguagens-api.herokuapp.com/linguagens
E pronto, a aplicação deve gerar uma figurinha!
Em PostMan, vamos incluir uma nova linguagem
- Repositório no GitHUb de imagens de programação
- Selecionar o arquivo 256x256.png
- Abrir a imagem
- Clicar na imagem para gerar a url em outra janela
- Copiar nova url
No PostMan, ir em POST e alterar a url para: https://pamela-linguagens-api.herokuapp.com/linguagens
Status 200 OK 😄
Ir em GET e alterar o link para https://pamela-linguagens-api.herokuapp.com/linguagens
Documentação Sobre Cloud Como escrever um README incrível no seu Github