Upload de imagens (do Google Drive) automático durante importação

Prezados, bom dia!

Gostaríamos de integrar a API do Google Drive com a importação do Tainacan e tenho interesse em desenvolver essa solução.
Basicamente no CSV colocaríamos a URL da imagem de um registro de forma que o Tainacan consiga executar baixar e atrelar a imagem. Essa funcionalidade pode ser também um plugin extra que se comunica com o Tainacan.

Portanto, gostaria de uma indicação de quais arquivos modificar, ou onde exatamente começar a investigar inserir essa mudança.

1 curtida

Só complementando, acho que encontrei uma parte que talvez já sane essa requisição:

Nesse caso só preciso deixar os documentos públicos no Google Drive e passar a URL direta dos arquivos que quero importar junto (com a formatação especificada na documentação)?

Só atualizando o caso, tentei usar o procedimento padrão do Tainacan, mas sem sucesso até o momento.

Segui alguns dos passos citados aqui também:

> importar-midia-para-itens

Infelizmente não está dando certo. Já tentei algumas variações de file: url: e apenas a url limpa tanto em special_document quanto em special_attachments

[2024-11-04 13:27:28] Error in Attachment file imported from URL url:https://drive.google.com/u/0/drive-viewer/AKGpihaAdVf_0ki-HhgFkTiOcha3AWw58CblYvp95Ie9Aec5MkeLyT-1EVha3Nyg1QOcWjbk-4PevgLDL9m4uf_0m2h3M-GbZsNeeQ=s1600-rw-v1
[2024-11-04 13:27:28] Error in Attachment file imported from URL url:https://www.youtube.com/watch?v=SGAz0415B1c

teste_imagens.csv (308,Bytes)

Algumas questões, o link que você enviou (https://drive.google.com/u/0/drive-viewer/AKGpihaAdVf_0ki-HhgFkTiOcha3AWw58CblYvp95Ie9Aec5MkeLyT-1EVha3Nyg1QOcWjbk-4PevgLDL9m4uf_0m2h3M-GbZsNeeQ=s1600-rw-v1) é uma URL de visualização de arquivo do Google Drive, gerada para exibir o arquivo diretamente no navegador, sem o download automático. Esse tipo de link é normalmente criado quando você abre ou compartilha um arquivo para ser visualizado no Google Drive. Ele possui uma série de parâmetros e um ID específico que define o acesso e visualização.

Você precisa de um link direto do arquivo. Nunca testei com o gdrive:

Estrutura desse tipo de link

  1. **https://drive.google.com/u/0/drive-viewer**:
  • u/0 especifica a conta do usuário (usada se você estiver conectado a várias contas no Google).
  • /drive-viewer/ indica que o link é para visualização direta e não para download.
  1. ID único do arquivo: A sequência complexa de caracteres e parâmetros (começando com AKGpiha...) é o ID do arquivo e informações de segurança que garantem que o usuário tenha a permissão correta.
  2. Parâmetros adicionais (s1600-rw-v1): Esses parâmetros ajustam a resolução e a forma de renderização do arquivo (ex.: s1600 define o tamanho e rw pode ser um código de qualidade de imagem).

Como isso difere de um link de download direto

  • Visualização: Esse link abre uma interface de visualização do Google Drive, permitindo que o usuário veja o arquivo diretamente no navegador sem baixá-lo.
  • Parâmetros dinâmicos: Esses links não contêm a extensão porque são destinados a renderizar o conteúdo dentro do Google Drive.

Transformando em Link de Download Direto

Para criar um link de download direto (que não usa essa interface de visualização), você precisaria pegar o ID do arquivo e usá-lo no link direto:

bash

Copiar código

https://drive.google.com/uc?export=download&id=ID_DO_ARQUIVO

Esse link inicia o download diretamente sem abrir a visualização.

1 curtida

além disso, você precisa usar “file:” para arquivos e “url” para vídeos no special_document (você colocou como anexo).

esse assunto já foi discutido por aqui: Podemos importar arquivos do google drive? - #3 de frdbr

Minha sugestão é usar um FTP

Olá @smllb
o @mateus.m.luna e eu investigamos um pouco e me parece que tem um caminho para isso ser feito, desde que utilize o link que devolva uma imagem, e não a pré-visualização presente no google drive, mas temos que ajustar alguns pontos, o principal problema é que o google drive server os arquivos no formato webp:

image

E por padrão o WordPress não aceita fazer o upload desse formato de arquivo, caso você libere essa alteração a importação deve acontecer.
Porém os arquivos não serão renderizados normalmente, pois ao baixar o arquivo o Taincan/Worpdress não consegue montar o nome do arquivo corretamente, por conta da URL que é disponibilizada pelo google drive ter apenas uma “hash” para identificar o nome do arquivo.

Creio que se a gente conseguir determinar o nome do arquivo utilizando a resposta do cabeçalho a importação para esses tipos de links deve passar a funcionar, seria uma alteração alterando o trecho basename($url) que é utlizado para determinar o nome do arquivo:

um caminho que penso e utilizar o cabeçalho content-disposition caso ele exista na resposta da URL… vou continuar investigando aqui, algum forma de fazer isso…

O @vnmedeiros está tralhando nisto nesta branch:

1 curtida

Obrigado @vnmedeiros , @andre_benedito e @mateus.m.luna pela atenção.

Só uma dúvida @mateus.m.luna:
Com a implementação do suporte direto ao Google Drive, documentos pdf também seriam suportados juntamente?

Bom dia

caso o link retorno o stream de byte de um arquivos, creio que vá funcionar sim.
seria um bom teste a ser feito.

1 curtida

Pessoal, boa noite.

Quando foi feito o release da ultima versão, fiz um teste de importação com imagens e obtive sucesso.
No entanto, tentei replicar importações com imagem agora de tarde e não deu certo… Não sei se houve alguma alteração por parte do Google ou se eu estou fazendo errado. Vou deixar em anexo o arquivo que estou usando pra testar.

É uma coleção simples, no arquivo tem 3 exemplos, todos deram erro infelizmente.

drive_images.csv (441,Bytes)

Olá @smllb!

Os dois primeiros não funcionariam de qualquer forma. Os prefixos url: e file: são apenas para o campo special_document, como mencionado na documentação do Importador:

O último funcionaria se fosse o link direto pra imagem no Google Drive. Aquele link é o link para uma página de compartilhamento do Google Drive, onde na verdade você tem um HTML com várias coisas até chegar na tag de imagem de verdade, onde está o arquivo de fato. Este é o link da imagem equivalente:


Experimente com ele e nos diga se funciona, ok?

Mateus, boa noite, perdão pela demora. Com esse link funcionou sim, mas há alguma maneira de parsear automaticamente o link de compartilhamento pra que a tag de imagem de verdade? Pensando no usuário final, não vejo um usuário comum conseguindo se guiar nas devtools até encontrar a URL direta para a imagem a ser exportada.

É possível fazer essa modificação em um release em um futuro próximo, se houver possibilidade?

Obrigado.

Eu concordo, mas é o que a Google quer neste caso. Pra eles não é interessante que seja fácil de se montar um script que possa acessar os dados do drive desta forma. Eu não vejo uma forma disso ser possível sem que seja feito via API. Seria uma feature grande, mas eu imagino que seja possível sim fazer uma versão do importador que tenha entre suas configurações um campo onde os usuários colocariam uma chave para API do Google Drive. Só que usar esta API vai ter custos para quem for gerar essa chave, por isso precisa ficar nas mãos do usuário configurar.