Skip to main content

Olá!
Estou tentando exercitar os conhecimentos adquiridos no Bootcamp POA. (Aliás, ótimo evento)
Pois bem, meu objetivo é criar um bot de consulta de previsão do tempo. Similar ao exemplo do “Darksky” porém usando a API do clima tempo.

http://apiadvisor.climatempo.com.br/api/v1/locale/city?name={{cidade}}&token=XXXXXXXXXXXXX
Atualmente necessito pesquisar por uma string “name” que me retorna o seguinte:

/
{
"id": 5575,
"name": "Canoas",
"state": "RS",
"country": "BR "
}
]

O que eu necessito desta consulta é apenas o ID.
Então tentei: {{response@id}} mas ele me retorna vazio quando faço desta maneira.

Pesquisando aqui no fórum entendi que é necessário retirar o array afim do builder pode consumir esta informação.
Este script é realizando utilizando um JSON.parse() e um JSON.stringify()?

Já sei como inserir o script, porém não sou programador, logo o básico de javascript pra mim é avançado. hehe
Estava tentando seguir esta linha, mas não tive sucesso.

function run(response) {
var idcidade = JSON.parse(response);
return idcidade
}

Existe algum modelo desta conversão que poderiam compartilhar para ajudar neste meu caso?
Conseguir somente o ID da cidade.

Obrigado!!

Consegui assim:



function run(response) {

var idcidade = JSON.parse(response)[0].id;

return idcidade

}



Valeu!


@Luis_Augusto_Vanzin



Que bom que funcionou…



Da forma abaixo, acredito que fica mais fácil de entender o código.



function run(response) {


response = JSON.parse(response);


return response.id;


}



Dessa forma, você faz o parse do JSON para objetos Javascript.Como você já definiu a variável response no escopo da função, não é necessário declarar novamente a variável. Com isso, você terá uma estrutura de objetos e pode acessar a propriedade response.id. Caso quisesse o nome, ficaria response.name e assim por diante.


Fala Leonardo, uma duvida , caso queira converter todas as variáveis de uma só vez, ou um arquivo json inteiro, qual seria o jeito?


@Ricardo_Anklan, a função JSON.parse(parâmetro) já faz isso pra você. Basta você passar o retorno da sua API como parâmetro da função JSON.parse() e ele já retornará todas as chaves e valores pra você manipular no seu chatbot. Ele já converte tudo de uma vez. Aí depende de você quais chaves e valores você quer usar. Não é uma obrigação você usar todas 😃


Só fique atento para um bug do PARSE que acontece quando o JSON vem com aspas duplas " dentro de um campo, tipo:



{

"campo":"Valor com aspas " dentro do conteúdo"

}



Vai ter que limpar o conteúdo antes de fazer o parse.


Pra isso, faca um string.replace


Peguei isso na API do Google Custom Search que trazia " quando tinha menção a unidade de medida Polegadas no conteúdo.


@Jhoni_Desb, não sabia disso. Achei que o parse cuidava se caso viesse aspas duplas no retorno da informação. Obrigado pela dica 😃


Então, eu fiquei de cara com isso, até por que faria mais sentido o PARSE considerar o valor do campo até a última aspas.


Ou ser mais inteligente e considerar tudo o que tem depois dos : até a vírgula, se houver.


Mas não, ele começa a ler o conteúdo a partir da primeira e ao encontrar a próxima aspas, ele termina a leitura do campo e parte para o próximo. Aí ta feita a cagada.


Cara, eu não manjo muito de JavaScript, não sei se existe outra solução, mas eu troquei os caracteres " por Pol.


@Jhoni_Desb, se quiser, me mostra como vem o seu JSON pra ver se existe uma solução mais viável. Já tenho uma certa experiência com JS. É bom também pra saber a lidar com esse tipo de situação. O que ele poderia fazer é entender que se houvesse uma aspas dupla dentro de outra, ele transformaria a outra em aspas simples, já que é possível colocar aspas simples dentro de duplas e vice-versa.


Leonardo, eu acho que não tem como mexer na formatação do JSON do Google.


Olha um exemplo do resultado:



{

"kind": "customsearch#search",

"url": {

"type": "application/json",

"template": "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"

},

"queries": {

"request": "

{

"title": "Google Custom Search - faca de churrasco",

"totalResults": "84200000",

"searchTerms": "faca de churrasco",

"count": 10,

"startIndex": 1,

"inputEncoding": "utf8",

"outputEncoding": "utf8",

"safe": "off",

"cx": "010049665617185726535:dpkiefl_kzu",

"searchType": "image"

}

],

"nextPage": "

{

"title": "Google Custom Search - faca de churrasco",

"totalResults": "84200000",

"searchTerms": "faca de churrasco",

"count": 10,

"startIndex": 11,

"inputEncoding": "utf8",

"outputEncoding": "utf8",

"safe": "off",

"cx": "010049665617185726535:dpkiefl_kzu",

"searchType": "image"

}

]

},

"context": {

"title": "Google"

},

"searchInformation": {

"searchTime": 0.557068,

"formattedSearchTime": "0,56",

"totalResults": "84200000",

"formattedTotalResults": "84.200.000"

},

"items": "

{

"kind": "customsearch#result",

"title": "Faca para Churrasco Zakharov Picanheira Plus 10" com Cabo de ...",

"htmlTitle": "\u003cb\u003eFaca\u003c/b\u003e para \u003cb\u003eChurrasco\u003c/b\u003e Zakharov Picanheira Plus 10" com Cabo de ...",

"link": "https://w1.ezcdn.com.br/zakharov/fotos/zoom/457fz1/faca-churrasco-e-cozinha-cabo-de-madeira-zakharov-picanheira-plus-10.jpg",

"displayLink": "www.zakharov.com.br",

"snippet": "Faca para Churrasco Zakharov Picanheira Plus 10" com Cabo de ...",

"htmlSnippet": "\u003cb\u003eFaca\u003c/b\u003e para \u003cb\u003eChurrasco\u003c/b\u003e Zakharov Picanheira Plus 10" com Cabo de ...",

"mime": "image/jpeg",

"image": {

"contextLink": "https://www.zakharov.com.br/faca-churrasco-e-cozinha-cabo-de-madeira-zakharov-picanheira-plus-10-p457/",

"height": 768,

"width": 1024,

"byteSize": 79558,

"thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqLRyrozkNERwu86MqHw5L3QMvQpEKPeUTG82P84vNcA1BMMAr4uogiErE",

"thumbnailHeight": 113,

"thumbnailWidth": 150

}

},

...



Perceba o trecho com o conteúdo "title": "Faca para Churrasco Zakharov Picanheira Plus 10" com Cabo de ...",


Isso faz o PARSE bugar todo e não consigo nenhum retorno útil.


Jhoni, essa “” deveria escapar as quotes ("), mas por algum motivo não está fazendo isso. Vi algumas pessoas usando o replace method da classe String como você fez. Mas é curioso não estar escapando…


Pessoal apenas para acrescentar eu recupero um valor bem parecido com o seu, @Luis_Augusto_Vanzin e eu trato assim:





function run(inputVariable1, inputVariable2) {



function splitMulti(str, tokens) {

var tempChar = tokens[0];

for (var i = 1; i < tokens.length; i++) {

str = str.split(tokens[i]).join(tempChar);

}

str = str.split(tempChar);

return str;

}



var text = '{{respostaGetGoogleSheets@values}}'

var textNew = []

textNew = splitMulti(text, ['[["', '"],["', '"]]'])



var textPes = inputVariable1

var Existe = false

for (var i = 0; i < textNew.length; i++) {



if (textPes == textNew[i]) {

Existe = true

}

}

return Existe

}





Mas neste caso eu preciso validar se o usuário já existe no meu bd salvo no Google Sheets.


Comente