Segue um exemplo completo de um serviço:
Mas antes é necessário criar a pasta: storage/filesystem/public/images
const remotePage = _remote.init()
const responsePage = remotePage.get('https://www.publico.pt/2020/03/26/ciencia/noticia/coronavirus-cerca-10-doentes-voltam-dar-positivo-alta-nao-contagiam-1909578')
if (responsePage.ok()) {
const parser = _html.parse(responsePage.getContent())
const title = parser.select(`meta[property="og:title"]`).first().attr('content')
_out.println('<h4>Title:</h4>')
_out.println(title)
const urlImage = parser.select(`meta[property="og:image"]`).first().attr('content')
_out.println('<h4>Image URL:</h4>')
_out.println(urlImage)
const responseImage = _remote.init().asBinary().get(urlImage)
if (responseImage.ok()) {
const contentType = responseImage.headers().getString('Content-Type')
let extension = null
if (contentType == 'image/png') {
extension = 'png'
} else if (contentType == 'image/jpeg') {
extension = 'jpg'
}
if (extension != null) {
const storageImage = _storage.filesystem('public', 'images').newRandomFile(extension)
storageImage.output().write(responseImage.bytes())
_out.println('<p>Download and saved: <b>'+ storageImage.file().name() +'</b></p>')
} else {
_out.println('<p>Invalid type.</p>')
}
} else {
_out.println('<p>Image download failed.</p>')
}
} else {
_out.println('<p>Invalid link response.</p>')
}
Com o _remote
realiza a comunicação com o outro endereço web, url.
O _html
navega no conteúdo html obtido e extraí a informação necessária através do select
, também é possível simplificar o código com o _html.parseURL('http://.....')
e assim pouparia o primeiro _remote
, mas prefiro utilizar o remote para ter maior controlo.
Com o _storage
guarda dentro duma pasta no sistema de ficheiros da aplicação.
Qualquer dúvida só dizer.