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.)