Pegue uma única imagem do site em uma programação regular

2

Eu quero pegar a mesma imagem (de um website) a cada x minutos para eventualmente fazer um vídeo em timelapse.

Meus problemas são:

  • configurando o agendamento para pegar a imagem e
  • salvando a imagem com a hora / data como parte do nome do arquivo.

Seria melhor usar algo como o Python?

    
por Nigel 22.08.2013 / 10:34

1 resposta

7

Vamos usar seu avatar por exemplo (salvar em /opt/download-avatar )

#!/bin/bash
URL="https://www.gravatar.com/avatar/554f043fa658cba9bbc2ee4c6d4e052d?d=identicon"
timestamp=$(date +%F_%T);
wget "$URL" -O "${timestamp}.png"

Observação: pode ser melhor salvar os nomes de arquivos como segundos da epoch timestamp=$(date +%s)

Crie um cron cron para executá-lo a cada 5 minutos (salve em /etc/cron.d/timelapse-avatar )

#!/bin/sh
*/5 * * * * /opt/download-avatar

Torne os scripts executáveis

chmod +x /opt/download-avatar
sudo chmod 755 /etc/cron.d/timelapse-avatar

Se você não quiser usar cron , simplesmente (salve em ~/start-timelapse )

#!/bin/bash
input="$1"
URL="https://www.gravatar.com/avatar/554f043fa658cba9bbc2ee4c6d4e052d?d=identicon"

if [ -z "$input" ]; then
  echo "USAGE: $0 [interval in minutes]" 
  exit 1
else
  interval=$((60*input));
fi

while [ 0 = 0 ]; do
  timestamp=$(date +%s)
  wget "$URL" -O "${timestamp}.png"
  echo "Sleeping for $input minutes"
  sleep "$interval"
done;

Torne executável e execute em intervalos de 7 minutos

chmod +x ~/start-timelapse
cd ~
./start-timelapse 7

ATUALIZAÇÃO:

Obrigado slhck .

Nigel , por padrão cron é executado como usuário root . Não é pertinente a esta pergunta, mas tecnicamente é executado como um "usuário especial", não interativamente, sem variáveis ambientais, como $PATH , sem o ID de sessão dbus , sem o X id da sessão, etc.

~/ é uma abreviação para o diretório inicial de um usuário (veja também a variável de ambiente $HOME ). Por padrão, para usuários , isso seria, por exemplo, /home/nigel , mas para root , isso é /root , portanto, provavelmente, cron os salvou codificar%. Você poderia usar:

wget "$URL" -O "/home/nigel/pdm-5min/${timestamp}.png"

MAS, os arquivos seriam de propriedade de root , então nigel não seria capaz de movê-los, excluí-los, editá-los, a menos que você se autorize root (ou através de /root/pdm-5min )

Portanto, você pode optar por executar sudo como seu usuário nigel .

#!/bin/sh
*/5 * * * * nigel /opt/download-avatar

Certifique-se de que o diretório em que você está salvando existe, queira adicionar diretamente antes da linha cron :

mkdir -p /home/nigel/pdm-5min/
Por último, tenha cuidado com seu wget (aspas). Use-os para que as variáveis retenham espaços em branco (espaços, tabulações, etc.), mas certifique-se de que cada uma daspas simples ou duplas tenha uma correspondência, não é opcional.

    
por 22.08.2013 / 11:03