Dev (Back & Front)ARTIGO

Apresentando flickr-set-get – um app de linha de comando para baixar fotos

Recentemente, desenvolvi um pequeno aplicativo de linha de comando que permite que você baixe uma galeria inteira a partir do Flickr.

Recentemente, desenvolvi um pequeno aplicativo de linha de comando que permite que você baixe uma galeria inteira a partir do Flickr. Ele é chamado flickr-set-get, e você pode encontrá-lo no NPM e no GitHub.

app-1

Por quê?

Para ser honesto, eu mesmo tive a necessidade de baixar um grande conjunto de fotos (mais de 400 fotos) do Flickr e eu não queria fazer isso manualmente. Eu também não consegui, depois de uma rápida pesquisa, encontrar algo simples para resolver essa tarefa. Já que eu tenho me aprofundado em Node.jsNode.js45 conteúdosComo criar aplicações console em Node.jsDev (Back & Front) · fev 2025Entendendo o ciclo de publicação do Node.jsDev (Back & Front) · fev 2020Nodejs por baixo dos panosDev (Back & Front) · jul 2019Ver tudo em Dev (Back & Front) , esta foi a oportunidade perfeita para desenvolver algo prático.

Como ele foi feito?

Como eu disse, usei Node.js. Como parte do meu processo de aprendizagem, eu tentei não reinventar a roda e seguir “o caminho Node”, então eu usei alguns módulos muito bons como a fundação para construir este app:

  • Commander, Cli e Prompt para as instalações de linha de comando (Opções/Argumentos de parse, gerar ajuda, barra de progresso, receber input do usuário).
  • Request: para simplificar a criação da solicitação HTTP para chamar as APIs Flickr.
  • Async: para gerenciar todas as tarefas assíncronas em paralelo e com um nível configurável de simultaneidade (um dos recursos que na minha humilde opinião fazem node/javascript se destacarem da multidão das linguagens de programação interpretadas).

Como ferramentas de desenvolvimento, eu também usei:

Tornando-se assíncrono e executando solicitações em paralelo

Para fazer download de uma foto do Flickr, a partir de uma galeria, você precisa fazer várias chamadas de API antes de ter a URL correta de baixar a foto.

Antes de tudo, você precisa chamar o método flickr.photosets.getPhotos da API para descobrir as IDs de todas as fotos do conjunto.

Então, para descobrir a URL de cada foto, você precisa chamar o flickr.photos.getSizes. Esse método lhe dá todas as URLs para baixar todos os diferentes tamanhos de uma determinada foto. Uma vez que você tem a URL, você pode simplesmente usar isso para fazer download de uma foto em seu computador.

A primeira chamada de API é o ponto de partida e, em seguida, uma vez que agora você tem todas as IDs, você pode fazer todas as outras solicitações em paralelo.

Graças a Async, foi muito fácil criar uma função task que descobrisse a URL específica de uma determinada foto e, em seguida, fizesse o download. Então eu só precisava replicar essa tarefa para cada foto e executar todas elas em paralelo. Graças à função Async.parallelLimit(), é ainda possível executar as tarefas com um nível de simultaneidade configurável.

app-2

Você pode descobrir como eu implementei essa lógica específica no GitHub.

Como usar?

Se você estiver interessado em usar o app, eu sugiro que você leia a documentação oficial no GitHub, mas deve ser bastante fácil de entender e usá-lo se você é um desenvolvedor (ele não foi feito para ser usado por outras pessoas que estão confortáveis ​​com a linha de comando!).

Situação atual

O projeto foi desenvolvido em um fim de semana como um “projeto de aprendizagem” e testado apenas por mim em algumas galerias do Flickr. Considere uma qualidade ALPHA, e a minha expectativa é de que ele esteja totalmente cheio de erros.

É um pequeno projeto paralelo, então eu não espero colocar tanto esforço nele novamente, a menos que seja adotado por um número relevante de pessoas (o que, francamente, é muito improvável que aconteça).

Sendo um projeto open source, obviamente, eu tentei colocar em prática toda a infraestrutura básica (testes, padrões de código, repositório, controle de versão etc.) para tornar mais fácil para as outras pessoas trabalharem para melhorar isso. Mais uma vez, informações mais precisas estão incluídas na documentação oficial.

Opiniões

Para mim, tem sido uma boa experiência de aprendizagem, especialmente considerando o fato de que era um bom cenário para usar código assíncrono lidando com várias solicitações HTTP paralelas.

Como eu ainda o considero uma experiência de aprendizado, eu realmente adoraria que você (que provavelmente é mais experiente do que eu com Node.js) desse algumas opiniões, críticas, ideias novas. Eu ofereço caixa de comentários abaixo para essa causa.

***

Luciano Mammino faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://loige.co/introducing-flickr-set-get-a-command-line-app-to-download-photos/

É um engenheiro de software nascido em 1987, mesmo ano em que a Nintendo lançou “Super Mario Bros” na Europa, que, por acaso, é seu jogo preferido! Ele é apaixonado por código, pela web, smart apps e tudo o que é criativo, como música, arte e design. Como desenvolvedor web, sua experiência tem sido principalmente com PHP e Symfony 2, mesmo tendo se apaixonado recentemente por JavaScript, NodeJS e Docker.

Ver perfil