그냥 슬랙에서 일기예보를 틀고 싶었어요.

2019/8/14 보충
현재 태풍 정보 등에 대비해 코드를 수정 중이다.
잠시만요 m(..)m
다음은 수정 전의 코드입니다.
정상적인 날씨는 정상적으로 작동할 것이다
재해 등이 발생했을 때 데이터를 정확하게 출력할 수 없다.
TL;DL
최근에는 개인이 개발한 노트를 위해 슬랙을 사용했다
"어, 타임즈 방식으로 일기예보를 하면 편리하지 않나요?"
이것은 내가 매우 노력했다고 생각하는 기록이다.
Motivation
  • 저는 슬랙에서 일기예보를 방송하고 싶습니다.
  • 항상 부팅되는 서버가 있기 때문에 cron를 사용하여 정기적으로 슬랙에 투고하고 싶습니다.
  • 평소 "Yahoo! 날씨 명사"를 봐서 그 메시지를 슬랙으로 흘려보내려고 한다.
  • 그리고 조개를 배워라.
  • 구조
  • "Yahoo! 날씨 명사"에서 정보 얻기
  • 하우징 스크립트를 통한 출력 조정
  • 슬랙에 투고
  • 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
    
    스크립트의 내용으로
  • URL에서 정보 얻기
  • 성형→tmp.txt 문자열 정보를 잘 배열하는 줄을 지정합니다.txt ※ 임시 파일은 tmp(번호)입니다.txt
  • data.항상 txt인 것을 보기 어려우므로, 줄과 열을 최종 파일 → weather로 바꿉니다.txt
  • 불필요한 파일을 삭제합니다.
  • 전치 참고http://kenbell.hatenablog.com/entry/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
    
    슬랙에 올릴 때 탭이 무너지기 때문에 들여쓰기 편차와 세로 편차에 신경 쓰지 마세요!
    슬랙에 올려놓고.
    @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분 무엇이든 좋습니다!
    수고 & 반성회
  • '몇 줄부터 몇 줄까지'로 정보를 정리하기 때문에 야후 쪽에서 규격을 바꾸면 무섭다.
  • 혹은 파워 스킬,
  • 경보, 주의 경보 등은 상황에 따라 순조롭게 출력되지 않을 수 있습니까?
  • 슬랙에 보낼 때 줄마다 한 번(이번에는 단숨에 16개 정도 통지한다).
  • 더 정진했네.
    나는 아름답고 우아한 프로그램을 쓰고 싶다
    "이렇게 하면 더 좋아!"뭐가 있으면 알려주세요!

    좋은 웹페이지 즐겨찾기