Extraindo dados da web - JSON
F#
Olá pessoa!
Na semana passada fiz um post sobre como extrair dados da web através dos type providers!
Vamos continuar com essa extração, mas desta vez, ao invés de obtermos as informações via HTML iremos obtê-las com JSON.
Provavelmente você já deve conhecer uma ou mais formas de obter os dados a partir de um retorno JSON, certo?
Mas a facilidade que o F# provê, permite criar isso com três linhas de código.
É sério, não tem enrolação, são só três linhas mesmo.
Este post faz parte de uma série sobre Type Providers! Para visualizar a série inteira clique aqui
É absurdamente fácil realizar esta tarefa através do JsonTypeProvider
.
Assim como vimos com o provider para html, também é possível criar um tipo a partir de um JSON.
Primeiro vamos escolher quais dados serão obtidos para o teste. Como sugestão, proponho utilizar a API pública do GitHub, mas você pode utilizar qualquer outra URL que os passos para realizar a busca dos dados são os mesmos.
Assim como no outro exemplo, vamos criar uma aplicação console em F#!
Depois disso, crie uma constante com a url da API à sua escolha, conforme código:
[<Literal>]
let url = "https://api.github.com/users/gabrielschade"
Perceba que estou utilizando o serviço para obter os dados do meu usuário: /gabrielschade, fique à vontade para substituir pelo seu ou por qualquer outro usuário.
Veja o resultado desta chamada no navegador:
As propriedades sublinhadas são as propriedades que iremos obter para o teste.
Ok, já vimos os dados, mas como obtê-los? Através do type provider, é claro!
Então vamos instalar o pacote FSharp.Data
, através do nuget:
PM> Install-Package FSharp.Data
Vamos importar este namespace ao projeto, com o comando open
:
open FSharp.Data
[<Literal>]
let url = "https://api.github.com/users/gabrielschade"
[<EntryPoint>]
let main argv =
printfn "%A" argv
0 // return an integer exit code
Agora falta pouco!
Precisamos definir o tipo do retorno.
Então precisamos ver quais são as propriedades retornadas pelo JSON e criar uma por uma?
Não.
Deixe o JsonProvider fazer todo trabalho!
type PerfilGitHub = JsonProvider<url>
Com a definição do tipo PerfilGitHub
já podemos acessar as informações com os tipos corretos!
Para carregar a página utilize a função Load
presente no tipo PerfilGitHub
, informando a url do perfil que deseja buscar:
let perfil = PerfilGitHub.Load url
E é isso, está pronto!
Não é preciso criar um HttpClient
, nem nada disso.
Simplesmente, definir a url, o tipo e realizar a carga. Simples assim.
Agora vamos listar as propriedades sublinhadas anteriormente, para mostrar que tudo funcionou conforme o planejado:
printfn "%s com %i seguidores" perfil.Name perfil.Followers
printfn "%s" perfil.Bio
printfn "Blog: %s" perfil.Blog
Perceba que a propriedade Followers
que representa o número de seguidores, já vem tipada como um inteiro, por conta disso utilizamos o %i
para exibí-lo.
Veja o resultado:
Você pode encontrar o código desenvolvido aqui no meu Github.
Atenção
Se quiser se aprofundar mais sobre os type providers você pode encontrar a documentação completa da Microsoft aqui.
O que você achou deste post?
Me conte nos comentários!
E Até mais!
Sempre vale lembrar que as informações e textos aqui no blog representam minha opinião pessoal, o que pode não ser igual à sua ou de qualquer outra pessoa, incluindo a empresa para qual eu trabalho. Portanto as publicações inseridas aqui estão relacionadas somente a mim.