{"id":22367798,"url":"https://github.com/ciceroakiles/alura-imersao-java","last_synced_at":"2026-05-17T15:04:46.153Z","repository":{"id":92160577,"uuid":"514452894","full_name":"ciceroakiles/alura-imersao-java","owner":"ciceroakiles","description":null,"archived":false,"fork":false,"pushed_at":"2022-11-19T16:46:21.000Z","size":30,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T15:55:26.047Z","etag":null,"topics":["imersaojava","java","maven"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ciceroakiles.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-16T02:06:36.000Z","updated_at":"2025-01-01T06:44:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"672365e9-312a-4f55-aff3-644fb5c4029b","html_url":"https://github.com/ciceroakiles/alura-imersao-java","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ciceroakiles/alura-imersao-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciceroakiles%2Falura-imersao-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciceroakiles%2Falura-imersao-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciceroakiles%2Falura-imersao-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciceroakiles%2Falura-imersao-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ciceroakiles","download_url":"https://codeload.github.com/ciceroakiles/alura-imersao-java/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciceroakiles%2Falura-imersao-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33143276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["imersaojava","java","maven"],"created_at":"2024-12-04T18:21:27.271Z","updated_at":"2026-05-17T15:04:46.109Z","avatar_url":"https://github.com/ciceroakiles.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# alura-imersao-java\n\nObjetivo 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.\n\n## Desafios da parte 1\n\n\u003cdetails\u003e\n\u003csummary\u003eUsar uma alternativa ao IMDb para pegar imagens de filmes\u003c/summary\u003e\n\u003cbr\u003e\n\n```\n// String url1 = \"https://api.mocki.io/v2/\" + API_KEY + \"/MostPopularMovies\";\nString url2 = \"https://alura-filmes.herokuapp.com/conteudos\";\n```\n\nSolução adotada: trocar a URL da API de filmes e modificar o tratamento dos dados.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eEditar a saída da nota\u003c/summary\u003e\n\u003cbr\u003e\n\n```\nString os = System.getProperty(\"os.name\");\nif (os.contains(\"Windows\")) return \"*\";\nif (os.contains(\"Linux\")) return \"+\";\nreturn \"\"; // (ou seja, nada de estrelas para usuarios de Mac)\n```\n\nSoluçã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.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eExtrair chave da API para um arquivo de properties\u003c/summary\u003e\n\u003cbr\u003e\n\n```\nString API_KEY = PropertyManager.getApiKey(\"dev.properties\");\n```\n\nSolução adotada: após deixar a chave no arquivo de properties, incluir o mesmo no arquivo ```.gitignore```.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eImportar uma biblioteca para fazer o parse do JSON\u003c/summary\u003e\n\u003cbr\u003e\n\n```\n\u003cdependency\u003e\n\t\u003cgroupId\u003ecom.fasterxml.jackson.core\u003c/groupId\u003e\n\t\u003cartifactId\u003ejackson-databind\u003c/artifactId\u003e\n\t\u003cversion\u003e{{version}}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nSolução adotada: usar o Maven no projeto e incluir a dependência acima no arquivo ```pom.xml```.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eReceber uma avaliação do usuário\u003c/summary\u003e\n\u003cbr\u003e\n\n```\nScanner sc = new Scanner(System.in);\nDouble novaNota = Double.parseDouble(sc.next());\n```\n\nSolução adotada: utilizar a classe Scanner para entrada de dados.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eImprimir um poster\u003c/summary\u003e\n\u003cbr\u003e\n\nTalvez, futuramente, retornar uma matriz gigante com uma \"ASCII Art\" ou um monte de caracteres em braille que lembram a própria imagem.\n\n---\n\u003c/details\u003e\n\n\n## Desafios da parte 2\n\n\u003cdetails\u003e\n\u003csummary\u003eCriar um diretório automaticamente para o arquivo de saída\u003c/summary\u003e\n\u003cbr\u003e\n\n```\nFile arquivo = new File(\"nomeArquivo\");\nif (!arquivo.exists()) {\n\tarquivo.mkdirs(); // (cria a pasta)\n}\n```\n\nSolução adotada: criar uma classe (contendo o trecho acima) cuja única responsabilidade é lidar com arquivos.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCentralizar texto em relação à imagem\u003c/summary\u003e\n\u003cbr\u003e\n\n```\nint textX = (int) (width - legWidth)/2;\n```\n\nSolução adotada: deixar a posição horizontal da legenda como sendo primariamente relativa às larguras da imagem e da legenda.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eTratar a URL da imagem para obter uma maior\u003c/summary\u003e\n\u003cbr\u003e\n\n```\nString urlImagemMaior = urlImagem.replace(\nurlImagem.substring(\n\turlImagem.indexOf(\"._\"), urlImagem.lastIndexOf(\".\")), \"\"\n);\n```\n\nSolução adotada: realizar o tratamento do endereço original (no caso acima, removendo uma ```substring```).\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ePersonalizar texto da figurinha em relação à nota\u003c/summary\u003e\n\u003cbr\u003e\n\n```\nprivate String textoLegenda(double nota) {\nreturn (nota \u003e= 9) ? \"TOPZERA!\" :\n\t(nota \u003e= 7.25) ? \"MUITO BOM!\" :\n\t(nota \u003e= 5.5) ? \"MAIS OU MENOS!\" :\n\t(nota \u003e= 2.75) ? \"DORMI NO MEIO!\" :\n\t\"NEM VI!\";\n}\n```\n\nSolução adotada: escrever um método que retorna uma legenda, a qual varia de acordo com o valor da nota.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eConsumir APIs de imagens com estruturas JSON diferentes\u003c/summary\u003e\n\u003cbr\u003e\n\nSolução adotada: usar cada um dos extratores em uma classe diferente, como proposto na parte 3.\n\n---\n\u003c/details\u003e\n\n\n## Desafios da parte 3\n\n\u003cdetails\u003e\n\u003csummary\u003eMudar a classe Conteudo para \"record\"\u003c/summary\u003e\n\u003cbr\u003e\n\nRealizável apenas usando Java 14 ou posterior.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eUtilizar uma exceção customizada\u003c/summary\u003e\n\u003cbr\u003e\n\n```\npublic class CustomMsgException extends Exception {\n\n\tpublic CustomMsgException(String msg, Throwable err) {\n\t\tsuper(msg, err);\n\t}\n}\n```\n\nSolução adotada: criar uma subclasse específica, responsável por lançar a exceção.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eUtilizar um enum com URL e extrator de conteúdo\u003c/summary\u003e\n\u003cbr\u003e\n\n```\npublic enum UrlExtractorEnum {\n\tAPI_IMDB(\"https://endereco1.etc.com/recurso/\", new ExtractorIMDb()),\n\tAPI_NASA(\"https://endereco2.etc.com/recurso/\", new ExtractorNASA());\n\n\t[...]\n}\n```\n\nSolução adotada: dessa forma, é possível associar cada ```String``` com cada ```IExtractor```.\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eUsar alguma API de imagens completamente diferente\u003c/summary\u003e\n\u003cbr\u003e\n\nSolução adotada: fazer a própria API, como proposto nas partes 4 e 5.\n\n---\n\u003c/details\u003e\n\n\u003cbr\u003e\nContinua no segundo repositório:\n\nhttps://github.com/ciceroakiles/springboot-imagens-api-alura\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciceroakiles%2Falura-imersao-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fciceroakiles%2Falura-imersao-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciceroakiles%2Falura-imersao-java/lists"}