Вопрос: Захватите одно изображение с веб-сайта по регулярному графику


Я хочу получить один и тот же образ (с веб-сайта) каждый Икс минут, чтобы в конечном итоге сделать видео с временным разрешением.

Мои проблемы:

  • настройка графика для захвата изображения и
  • сохраняя изображение с указанием времени / даты как части имени файла.

Было бы лучше использовать что-то вроде Python?


2
2017-08-22 08:34


Источник


Вам обязательно нужен Python? Это можно легко сделать с помощью обычных команд Bash и wget, Вы что-то пробовали или застряли где-то? - slhck
Я достаточно компетентен в пакетных файлах DOS, но у меня мало опыта работы с Bash (за пределами ls и shutdown!). Я предположил, что Python, вероятно, будет ответом, но я доволен Башем. Я попробую это сегодня вечером. Большое спасибо. - Nigel
slhck - спасибо за помощь, это сработало! Я хочу сохранить файлы изображений в подкаталог моего домашнего каталога под названием pdm-5min. Я попытался изменить выходной оператор, но не могу заставить его работать. Я пробовал -O ~ / pdm-5min / "$ {timestamp} .png" и "~ / pdm-5min /" $ {timestamp} .png ", но без радости. Дополнительная помощь была оценена! Найджел - Nigel
Не могли бы вы опубликовать этот комментарий в ответ ниже? @justbrowsing получит уведомление. Возможно, вы можете редактировать ваш вопрос включить то, что ваш текущий статус или что именно не работает? Благодаря! - slhck


Ответы:


Давайте используем ваш аватар, например (сохранить /opt/download-avatar)

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

Примечание. Возможно, лучше сохранить имена файлов в секундах от эпохи timestamp=$(date +%s)

Создать Задача cron запускать ее каждые 5 минут (сохранить /etc/cron.d/timelapse-avatar)

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

Сделать исполняемые скрипты

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

Если вы не хотите использовать cron то просто (сохранить ~/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;

Сделайте исполняемый файл и запустите с 7-минутными интервалами

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

ОБНОВИТЬ:

благодаря slhck,

Найджел, по умолчанию cron работает как корень пользователь. Не относится к этому вопросу, но технически он работает как «специальный пользователь», неинтерактивно, без переменных окружающей среды, таких как $PATH, без dbus идентификатор сеанса без X идентификатор сессии и т. д.

~/ является сокращением для домашнего каталога пользователя (также см. переменную окружения $HOME). По умолчанию для пользователи, это было бы, например, /home/nigel но для корень, это /root поэтому, вероятно, хрон спасает их до /root/pdm-5min, Вы можете использовать:

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

НО, файлы будут принадлежать корень, так Nigel не смогут перемещать, удалять, редактировать их, если вы не дадите себе разрешения, поскольку корень (или через sudo)

Поэтому вы можете выбрать cron как ваш пользователь Nigel,

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

Убедитесь, что каталог, который вы сохраняете, существует, может потребоваться добавить непосредственно перед wget линия:

mkdir -p /home/nigel/pdm-5min/

Наконец, будьте осторожны с " (кавычки). Используйте их, чтобы переменные сохраняли пробелы (пробелы, вкладки и т. Д.), Но убедитесь, что каждая одиночная или двойная кавычка имеет подходящую, она не является необязательной.


6
2017-08-22 09:03



Обратите внимание, что в последнем варианте загрузка в конечном итоге прекратится, если оболочка будет завершена или терминал будет удален и т. Д. - slhck
@Justbrowsing: спасибо за помощь, это сработало! Я хочу сохранить файлы изображений в подкаталог моего домашнего каталога под названием pdm-5min. Я попытался изменить выходной оператор, но не могу заставить его работать. Ничто не спасает. Я попробовал -O ~ / pdm-5min / "$ {timestamp} .png" и "~ / pdm-5min /" $ {timestamp} .png ", но без радости. Дополнительная помощь была оценена! Найджел-Найджел - Nigel
@justbrowsing - большое спасибо за быстрый и лаконичный ответ. Все точки подняты очень полезными, и теперь я успешно выполняю cron как я, а не как root, и сохраняю свои захваченные изображения в правильные папки. Еще раз спасибо. Оценил. - Nigel