O UniVerse e o UniData agora têm a capacidade de trabalhar com JSON ou XML como um objeto, simplificando a criação ou o consumo desses formatos. A partir do UniVerse 11.1 e do UniData 7.3, os Objetos Dinâmicos U2 (UDO, na sigla em inglês) facilitam o trabalho com esses formatos.
Para nos ajudar a construir nosso exemplo, usaremos um serviço meteorológico online gratuito que nos fornece alguns dados que podemos analisar. O Wunderground possui uma API de previsão do tempo para desenvolvedores aqui ; confira os detalhes lá, você pode obter uma conta gratuita e o código da API que permite testar o serviço.
JSON significa JavaScript Object Notation e é uma forma independente de linguagem para expressar dados, facilitando a troca de dados via HTTP e sendo amplamente compreendida por diversas linguagens de programação. Se você não estiver familiarizado, provavelmente é melhor consultar a Wikipédia para obter uma explicação mais detalhada. Após obter sua chave de API ( veja acima), você poderá testar o serviço de previsão do tempo e verificar exatamente o que será retornado. Abaixo, você encontrará um breve trecho de código para ter uma ideia de como será a resposta. É importante que você conheça a estrutura, pois seu código precisará saber o que procurar.
{
"resposta": {
"versão":"0.1",
},
"previsão":{
"previsão simples":
"previsão do dia": [
{"data":{
"época":"1421287200",
"bonito": "19h00 MST em 14 de janeiro de 2015",
...continuação...
Vamos começar obtendo o JSON do serviço meteorológico:
**IMPORTANTE** Você precisará obter sua própria chave de API para acessar o serviço.
apiKey = "0123abcd01234abcd"
cidade = "CO/Denver"
url = "http://api.wunderground.com/api/":apiKey:"/forecast/q/":city:".json"
método = "GET"
solicitação = ""
st = criarSolicitação(url, método, objSolicitação)
st = submitRequest(objRequest, 3600, "", headers, data, httpstatus)
Neste ponto, se tudo correr bem, devemos ter dados JSON no parâmetro de dados .
SE UDORead(dados, UDOFORMAT_JSON, RESTMSG) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(RESTMSG, "previsão", previsão, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(forecast, "simpleforecast", simple, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(simple, "forecastday", arrDays, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
A função UDORead lê uma string JSON do primeiro parâmetro e retorna um objeto UDO no terceiro parâmetro, se válido. Observe os parâmetros nas próximas 3 chamadas de UDOGetProperty; estamos percorrendo a árvore de objetos, do objeto forecast ao objeto simpleforecast e, finalmente, ao array forecastday . Uma vez que tenhamos o array forecastday, podemos simplesmente percorrer cada item e obter os valores que nos interessam. Apenas certifique-se de liberar a memória usada pelo UDO chamando UDOFree() quando terminar.
LAÇO
GETSTAT = UDOArrayGetNextItem(arrDays, W.UDO, W.TYPE)
ENQUANTO GETSTAT = UDO_SUCCESS FAÇA
i = i + 1
SE UDOGetProperty(W.UDO, "date", UDO.DATE, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(UDO.DATE, "monthname", F.MONTH, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(UDO.DATE, "day", F.DAY, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(UDO.DATE, "year", F.YEAR, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(W.UDO, "high", UDO.HIGH, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(UDO.HIGH, "fahrenheit", HF, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(W.UDO, "low", UDO.LOW, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(UDO.LOW, "fahrenheit", LF, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
SE UDOGetProperty(W.UDO, "condições", CONDIÇÕES, UDOTYPE) NE UDO_SUCCESS ENTÃO GOSUB ERR
IMPRIMA F.MÊS:" ":F.DIA:", ":F.ANO
IMPRIMIR "Alta: ":HF:" Baixa: ":LF
IMPRIMIR " Condições: ":CONDIÇÕES
IMPRIMIR
REPITA
SE UDOFree(RESTMSG) NÃO FOR UDO_SUCCESS ENTÃO GOSUB ERRO
Previsão do tempo para Colorado/Denver
6 de janeiro de 2015
Máxima: 55 Mínima: 15
Condições: Parcialmente nublado
7 de janeiro de 2015
Máxima: 34 Mínima: 27
Condições: Parcialmente nublado
8 de janeiro de 2015
Máxima: 46 Mínima: 17
Condições: Parcialmente nublado
9 de janeiro de 2015
Máxima: 32 Mínima: 18
Condições: Limpo
Se você quiser testar este código, pode baixá-lo do GitHub.
Preparando-se para a Faturação Eletrônica: Prazos, Requisitos e Próximos Passos Práticos
Apresentando o Rocket EVA 2.0
Escolha o caminho certo para a modernização de código com auxílio de IA.
