Pull to refresh

Еще один скрипт himawari8 для linux

Вместо вступления. Сегодня увидел эту статью и как-то стало грустно, так как в пятницу увидел пост про himawari8 и загорелся идеей написать скрипт и статью на хабр. Со скриптом успел, а вот со статьей немного не успел, но решил все же написать сюда.

Согласно wiki, himwari8 — это японский метеорологический спутник, 8-й по счету из геостационарных метеорологических спутников Himawari, эксплуатируемых японским метеорологическим агентством. Himawari 8 введен в эксплуатацию 7 июля 2015 и является преемником MTSAT-2 (Himawari 7), который был запущен в 2006 году. Пример фото от 8.02.2016:



У меня, как и предыдущего автора, также установлен XFCE, поэтому скрипт пишу под этот DE. В репозитории первоначального скрипта в коментариях я наткнулся на ссылку: himawari8-dl.nict.go.jp/himawari8/img/D531106/latest.json

Это json с информацией о последнем фото. В своей версии я решил брать информацию с него. Финальное фото формируется с помощью пакета imagemagick из 16 изображений, которые помещаются во временную папку и после окончания работы скрипта удаляются, а результат сохраняется в папку ~/Pictures/Himawari8.

Хотел сделать так, чтобы скрипт работал через таймер в systemd, но есть небольшие пока проблемы. Для других X-систем не делал реализаций, но скрипт находится на github, так что welcome, если кто-то захочет что-то добавить или пофиксить баг. А они там точно есть (например, предполагается, что в директории пользователя есть папка Pictures).

Что хотелось бы добавить:
  • изменения расширения
  • сохранение в произвольную папку
  • варианты для разных DE
  • работу по таймеру
  • стиль картинки(zoomed,centered,etc) — что бы не приходилось зумить, можно по краям сделать черные вставки.

По умолчанию сейчас zoomed.

Сам скрипт:

#!/bin/bash
width=550
level="4d" #Level can be 4d, 8d, 16d, 20d 
numblocks=4 #this apparently corresponds directly with the level, keep this exactly the same as level without the 'd'

time_stamp=$(date +'%Y%m%d%H%M%S')
short_time_stamp=$(date +'%H%M%S')

#get lastest.json with information about last photo
latest_info_url="http://himawari8-dl.nict.go.jp/himawari8/img/D531106/latest.json"
#extract from json date and time
date_time_photo_str=`curl $latest_info_url |grep -Eo '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2} [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}' `
#extract from json time
time_photo_str=`echo $date_time_photo_str |grep -Eo '[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}' `

#debug info
echo "Time photo: $time_photo_str"
echo "The last photo was took: $date_time_photo_str"

#convert date_time_photo_str to url format
#example: from 2016-02-09 22:40:00 to 2016/02/09/224000 
date_time_url=`echo $date_time_photo_str | sed 's/[- ]/\//g' | sed 's/[:]//g'`
#convert date_time_photo_str to url format
#example: from 22:40:00 224000 
time_url=`echo $time_photo_str | sed 's/[:]//g'`

#url with parameters to photo 
base_url="http://himawari8-dl.nict.go.jp/himawari8/img/D531106/$level/$width/$date_time_url"
#temporary folder for save parts of photo
tmp_folder="$HOME/tmp$time_stamp"

echo $tmp_folderhttps://github.com/yatsenko-ihor/himawari8-wallaper

file_ext=".png"
outfile="result_$time_stamp$file_ext"

echo "Outfile: $outfile"

current_path=$(pwd)

cd ~/Pictures/
mkdir -p Himawari8 || exit
cd $current_path

wallaper_path="$HOME/Pictures/Himawari8/"


mkdir $tmp_folder
cd $tmp_folder

count=0
for ((i=0; i < $numblocks; i++))
do
	for ((j=0; j < $numblocks; j++))
	do
	   	real_url=$base_url"_"$i"_"$j$file_ext
	   	echo "Real url: $real_url"
  		wget -i -P -q $real_url
   		echo "Download to: $tmp_folder"
   		file_name=$short_time_stamp"_"$j"_"$i$file_ext
   		echo "Image name: $file_name"
	done
done	


count=0

output_fileset_str=""
result_fileset_str=""

for ((i=0; i < $numblocks; i++))
do
	output_fileset_str=""
	for ((j=0; j < $numblocks; j++))
	do
	   	file_name=$tmp_folder/$time_url"_"$i"_"$j$file_ext
	   	output_fileset_str=$output_fileset_str" "$file_name
	done
	echo "Output fileset: $output_fileset_str"
	montage $output_fileset_str -mode Concatenate  -tile 1x4  output$i.png
	result_fileset_str=$result_fileset_str" "output$i.png
done
echo "Result fileset: $result_fileset_str"

echo "Result file: $outfile"
montage $result_fileset_str -mode Concatenate  -tile 4x1  $wallaper_path$outfile


echo "cureent path $current_path"
cd $current_path
rm -rf $tmp_folder

#Number of worspaces
workspace_count=$(xfconf-query -v -c xfwm4 -p /general/workspace_count)
connected_monitor=$(xrandr -q | awk '/ connected/{print $1}')
xfce_desktop_prop_prefix=/backdrop/screen0/monitor$connected_monitor

echo "Wallaper path: $wallaper_path"
echo "Outfile: $outfile"

#Set wallaper for all worspaces(only for XFCE)
for ((i=1; i <= $workspace_count; i++))
do
   xfconf-query -c xfce4-desktop -p $xfce_desktop_prop_prefix/workspace$i/last-image -s $wallaper_path$outfile
   xfconf-query -c xfce4-desktop -p $xfce_desktop_prop_prefix/workspace$i/image-style -s 5
   echo "Set $wallaper_path$outfile for workspace $i"
done


Аналоги. Уже было упомянуто о существующих решения, я хочу добавить еще:

github.com/JohnnieFucker/EarthLive4Mac
github.com/boramalper/himawaripy/tree/master/himawaripy (более комплексное решение)

P.S.: Так как фото сохраняются в папку, то потом можно собрать гифку. Скрипт на bash я пишу первый раз (в смысле, нормальный скрипт, а не на 3 строки), так что жду вашей критики.

Продублирую ссылку на github: github.com/yatsenko-ihor/himawari8-wallaper.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.