Slack에게 일기 예보를 흘리고 싶었을 뿐이야
11982 단어 ShellScript슬랙cron우분투
2019/8/14 추가
현재 태풍 정보 등에 대응하기 위해 코드를 수정 중입니다.
잠시 기다려주세요 m(._.)m
다음은 수정 전의 코드입니다.
정상적인 날씨의 경우 올바르게 움직이지만,
재해 등이 발생한 경우에는 올바르게 데이터 출력을 할 수 없습니다.
TL;DL
최근 개인 개발 메모용으로 Slack을 사용하고 있으며,
「어라, 시보적으로 날씨 예보 흘러 오면 편리하잖아?」
라고 생각해 자력으로 고차고차 노력한 기록입니다.
Motivation
cron
를 사용하여 정기적으로 Slack에 게시하고 싶습니다. 메커니즘
이것을
cron
에서 정기적으로 실행합니다.더 쉬운 방법이 있다고 말하지 않는다.
구현
「Yahoo!
@arabian9ts 님의 「 리눅스 커맨드로 일기 예보를 얻고 표시하는 원라인(on Mac) 」를 참고로.
먼저 날씨 예보를 가져오는 URL을 찾습니다.
Yahoo! 개인 날씨로 이동하여 우편 번호를 입력하십시오.
예를 들면, 교토부 교토시 시모교구라면 「〒600-8216」이므로
URL은 ぇtps : // 우에 아테 r. 야호오. 이. jp / ぇ あぇ r / 26/6110/26106. HTML입니다.
그래서 제가 만든 쉘 스크립트는 다음과 같습니다.
상당히 더러워진 것 같다.
Kyoto.sh#!/bin/bash
function txt_edit(){
array=()
for i in `seq 9`
do
array+=(`awk "NR==$i" tmp$1.txt`)
done
echo -e ${array[*]} >> data.txt
sed -e '1,9d' tmp$1.txt > tmp`expr $1 \+ 1`.txt
}
url=https://weather.yahoo.co.jp/weather/26/6110/26106.html #ここを、さっきのURLにする
curl -s $url | sed -e 's/<[^>]*>//g' | grep -v '^\s*$' > tmp.txt
head -n 1 tmp.txt > weather.txt
sed -e '1,33d' tmp.txt > tmp0.txt
head -n 3 tmp0.txt > weather.txt
sed -e '1,3d' tmp0.txt > tmp1.txt
for i in `seq 5`
do
txt_edit $i
done
array=()
array2=("--")
for i in `seq 1 2 17`
do
array+=(`awk "NR==$i" tmp6.txt`)
j=`expr $i \+ 1`
array2+=(`awk "NR==$j" tmp6.txt`)
done
echo -e ${array2[*]} >> data.txt
echo -e ${array[*]} >> data.txt
sed -e '1,17d' tmp6.txt > tmp7.txt
N=$(head -n 1 data.txt | wc -w)
for i in `seq 1 $N`
do
awk '{print $'$i'}' < data.txt | tr '\n' '\t' >> weather.txt
echo >> weather.txt
done
head -n 4 tmp7.txt >> weather.txt
echo $url >> weather.txt
rm tmp*
rm data.txt
어쩌면 스크립트의 내용으로
#!/bin/bash
function txt_edit(){
array=()
for i in `seq 9`
do
array+=(`awk "NR==$i" tmp$1.txt`)
done
echo -e ${array[*]} >> data.txt
sed -e '1,9d' tmp$1.txt > tmp`expr $1 \+ 1`.txt
}
url=https://weather.yahoo.co.jp/weather/26/6110/26106.html #ここを、さっきのURLにする
curl -s $url | sed -e 's/<[^>]*>//g' | grep -v '^\s*$' > tmp.txt
head -n 1 tmp.txt > weather.txt
sed -e '1,33d' tmp.txt > tmp0.txt
head -n 3 tmp0.txt > weather.txt
sed -e '1,3d' tmp0.txt > tmp1.txt
for i in `seq 5`
do
txt_edit $i
done
array=()
array2=("--")
for i in `seq 1 2 17`
do
array+=(`awk "NR==$i" tmp6.txt`)
j=`expr $i \+ 1`
array2+=(`awk "NR==$j" tmp6.txt`)
done
echo -e ${array2[*]} >> data.txt
echo -e ${array[*]} >> data.txt
sed -e '1,17d' tmp6.txt > tmp7.txt
N=$(head -n 1 data.txt | wc -w)
for i in `seq 1 $N`
do
awk '{print $'$i'}' < data.txt | tr '\n' '\t' >> weather.txt
echo >> weather.txt
done
head -n 4 tmp7.txt >> weather.txt
echo $url >> weather.txt
rm tmp*
rm data.txt
전치는 htp // 켄베 l. 하테나 bぉg. 코m/엔트리/20130604/1370308018를 참고로 했습니다.
터미널에서
$ chmod +x Kyoto.sh
$ ./Kyoto.sh
그건 그렇고, 출력은
weather.txt
2019年8月3日 18時00分発表
今日の天気
- 8月3日(土)
時刻 天気 気温(℃) 湿度(%) 降水量(mm) -- 風向風速(m/s)
0時 晴れ 30 72 0 北東 1
3時 晴れ 29 74 0 静穏 0
6時 晴れ 28 76 0 北東 2
9時 晴れ 31 64 0 南西 2
12時 晴れ 35 48 0 東 2
15時 晴れ 37 38 0 東 3
18時 晴れ 34 51 0 南東 3
21時 晴れ 30 73 0 北西 1
京都市の警報・注意報
注意報
大雨、雷
京都市下京区の今の天気はどうですか?
https://weather.yahoo.co.jp/weather/26/6110/26106.html
Slack에 흘릴 때 Tab이 무너지므로, 들여쓰기 어긋남이라든지 세로가 어긋나 있는 건지는 신경쓰지 않는다!
슬랙에 흘리다
@ik-fib 님의 "Slack의 Incoming Webhooks를 쓰러뜨리다"근처를 참고로.
curl URL과 기타 옵션은 적절히 변경.
Slack_weather.sh
#!/bin/bash
if [ $# != 0 ] ; then
numLine=1
cat $1 | while read line
do
#echo $numLine: $line # 出力
numLine=$((numLine + 1)) # 行数を1増やす
str=$line
curl -X POST --data-urlencode "payload={\"channel\": \"#general\", \"username\": \"Weather bot\", \"text\": \"$str\", \"icon_emoji\": \":robot_face:\"}" https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX
done
else
echo ERROR: Please input argument.
fi
h tp://스엔g. 웨 b. FC2. 작은 m/쟈/p로g등 m/장 sh/레어 d-에어 ch-ぃ네. html 을 조금 참고했습니다.
터미널에서
$ chmod +x Slack_weather.sh
$ ./Slack_weather.sh weather.txt
그렇다면 Slack으로 보내지고,,,
cron으로 정기 실행
cron
를 사용하면, 아침 낮 저녁이라도 1시간마다도 1분마다라도 뭐든지 할 수 있군요!수고하셨습니다 & 반성회
좀 더 정진하네요.
깨끗하고 우아한 프로그램을 작성할 수 있기를 바랍니다.
「이렇게 하면 더 좋아진다!」등등 있으면 가르쳐 주시면 좋겠습니다!
Reference
이 문제에 관하여(Slack에게 일기 예보를 흘리고 싶었을 뿐이야), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Takuro_K/items/7f5afa8b4da07327b943텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)