그냥 슬랙에서 일기예보를 틀고 싶었어요.
11658 단어 SlackShellScriptUbuntucron
현재 태풍 정보 등에 대비해 코드를 수정 중이다.
잠시만요 m(..)m
다음은 수정 전의 코드입니다.
정상적인 날씨는 정상적으로 작동할 것이다
재해 등이 발생했을 때 데이터를 정확하게 출력할 수 없다.
TL;DL
최근에는 개인이 개발한 노트를 위해 슬랙을 사용했다
"어, 타임즈 방식으로 일기예보를 하면 편리하지 않나요?"
이것은 내가 매우 노력했다고 생각하는 기록이다.
Motivation
cron
를 사용하여 정기적으로 슬랙에 투고하고 싶습니다.cron
에서 정기적으로 집행하다.말 안 해도 편한 방법이 있어요.
이루어지다
"Yahoo! 날씨 명사"에서 정보 얻기 ~ 케이스 스크립트를 통해 출력 조정
@arabian9ts선생님의 "Linux 명령을 통해 일기예보의 선을 가져오고 표시합니다 (onMac)"을 참고하세요.
우선, 나는 일기예보의 주소를 찾으려고 한다.
방문Yahoo! 개인 날씨, 우편 번호를 입력합니다.
예컨대 교토부 교토시 하경구
URL은 https://weather.yahoo.co.jp/weather/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
스크립트의 내용으로단말기
$ 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
슬랙에 올릴 때 탭이 무너지기 때문에 들여쓰기 편차와 세로 편차에 신경 쓰지 마세요!슬랙에 올려놓고.
@ik-fib선생님의 "슬랙의 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
http://sweng.web.fc2.com/ja/program/bash/read-each-line.html 살짝 참고했어요.단말기
$ chmod +x Slack_weather.sh
$ ./Slack_weather.sh weather.txt
그리고 슬랙으로 보내기cron
에서 정기적으로 실행cron
사용하면 아침, 저녁, 1시간, 1분 무엇이든 좋습니다!수고 & 반성회
나는 아름답고 우아한 프로그램을 쓰고 싶다
"이렇게 하면 더 좋아!"뭐가 있으면 알려주세요!
Reference
이 문제에 관하여(그냥 슬랙에서 일기예보를 틀고 싶었어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TQR/items/7f5afa8b4da07327b943텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)