yunsh206

회원가입로그인
winXplanet에다 일기예보를 그려주던 태미니님의 프로그램이 맛이 가버렸다. 사이트의 문제였을까.

갑자기 너무 허전해진 지구의 모습을 다시 채우고 싶어서 이리저리 궁리해보다 결국 Perl Script로

만들어버렸다.

0. 아래의 스크립트 파일을들을 C:\Program Files\winXPlanet\xplanet 폴더에 저장할 것.

(경로가 다른 사람들은 거기에 저장할 것. 예: D:\Programs\winXplanet\xplanet 등등)

1. newWeather.bat은 Perl Script를 일괄 실행하는 Batch 파일. 첫번째, 두 번째 줄의 드라이브명 (C:)과

파일 경로는(cd C:\Program Files\winXPlanet\xplanet) 자기가 저장한 위치로 변경할 것.

2. cities.txt는 날씨 정보를 보고 싶은 도시의 Region Code와 자기가 지정한 도시명을 : 로 구분해

나열한 정보성 파일. Region Code는 weather.yahoo.com 에서 참조.

3. getWeatherMap.pl는 Perl Script로 cities.txt 파일을 읽어서 http://xoap.weather.com/ 에다 던져서

XML로 된 날씨 정보를 읽어서 Print 함. getWeatherMap.pl 을 실행할 때 > 기호로 저장할 파일명을

지정해야 함. 안그러면 그냥 화면상에 출력되고는 사라짐.

(newWeather.bat의 둘째 줄을 보면 getWeatherMap.pl cities.txt > initWeathers.xml 라고 되어 있다.

getWeatherMap.pl을 실행시키되 cities.txt를 읽어서 initWeathers.xml로 출력하라는 뜻임)

4. 3에서 생성된 initWeathers.xml 파일을 읽어서 winXplanet 형식으로 변환해 weathermapMarker 파일을

생성함.

(newWeather.bat의 셋째 줄을 보면 weatherMap.pl initWeathers.xml > weathermapMarker 라고 되어 있다.

weatherMap.pl을 실행시키되 initWeathers.xml 를 읽어서 weathermapMarker로 출력하라는 뜻임)

5. weathermapMarker_RanomA 를 winXplanet 프로그램에 추가할 것.

(Parameter 탭 --> Xplanet Configuration 탭 --> Add Marker 로 추가. Apply changes로 반영.

Save config 해야 다음에도 가능함)



newWeather.bat
----------------------------------
@echo off
c:
cd C:\Program Files\winXPlanet\xplanet
getWeatherMap.pl cities.txt > markers\initWeathers.xml
weatherMap.pl markers\initWeathers.xml > markers\weathermapMarker_RanomA



cities.txt
---------------------------------------------------------------------------------
AEXX0001:U.A.E
ASXX0002:Alice Springs
ASXX0032:다윈
ASXX0089:Perth
ASXX0092:Port Hedland
ASXX0112:시드니
BGXX0003:다카
BMXX0005:양곤
BRXX0201:리오데자네이로
CAXX0518:밴쿠버
CDXX0003:은자메나
CGXX0005:킨샤샤
CHXX0008:북경
CHXX0017:충칭
CHXX0049:홍콩
CHXX0116:상해
CHXX0141:시안
EGXX0004:카이로
FRXX0076:파리
IDXX0005:발리
INXX0012:뱅갈로어
INXX0096:뉴델리
IRXX0018:테헤란
ITXX0067:로마
IVXX0001:아비쟌
JAXX0067:오끼나와
JAXX0078:삿뽀로
JAXX0085:도꾜
KEXX0009:케냐
KSXX0037:서울
LYXX0004:가트
MGXX0003:울란바토르
MXDF0132:멕시코씨티
MYXX0008:쿠알라룸푸르
#NPXX0002:카트만두
PEXX0011:Lima
PKXX0006:Islamabad
RPXX0017:마닐라
RSXX0063:모스크바
RSXX0122:야쿠츠크
RSXX0258:톰스크
SFXX0023:요하네스버그
SPXX0047:라스팔마스
SUXX0002:카르툼
THXX0002:방콕
TUXX0014:이스탄불
UKXX0085:런던
USAK0012:앵커리지
USCA0638:L.A.
USFL0316:마이애미
USGU0002:괌
USHI0026:호놀룰루
USNY0996:뉴욕
ZAXX0004:루사카
PPXX0004:Port Moresby
IDXX0002:Ambon
IDXX0089:Jayapura
BXXX0001:브루나이
#NZXX0049:웰링턴
#VMXX0006:하노이
#BMXX0001:만달레이
#IZXX0008:바그다드
#USMP0001:싸이판
#IDXX0022:자카르타
#IDXX0089:자야푸라
USPW0001:Palau
USWQ0002:Wake섬
USMH0003:Ebeye
TVXX0001:Tuvalu
#ASXX0016:브리즈번
ASXX0194:브리즈번
#ASXX0117:타운스빌
ASXX0020:Cairns






getWeatherMap.pl
----------------------------------
#!/usr/bin/perl
use LWP::Simple;
my $region_code;
my $region_name;
my $url;

while(<>)
{
        $line = $_;

        if($line =~ m/([^:]*):(.*)/)
        {
                $region_code = $1;
                $region_name = $2;
        }
        $url = "http://xoap.weather.com/weather/local/" . $region_code . "?unit=m&dayf=1";
        $html = get( $url );
        $html =~ s/<dnam>([^<,]*).*<\/dnam>/<dnam>$region_name<\/dnam>/g;
        print "$html";
}





weatherMap.pl
----------------------------------
#!/usr/bin/perl
use Encode; use strict; use warnings;

my $line;
my $lat;
my $lon;
my $dnam;
my $day_night;
my $day_icon;
my $day_hi;
my $day_low;
my $day_title;
my $night_icon;
my $night_hi;
my $night_low;
my $night_title;
my $icon;
my $hi;
my $low;
my $title;
my $color;
my $flag;
my $print_out1;
my $print_out2;

printf("-90 0 image=none\n");

while(<>)
{
    $line = $_;

        if($line =~ m/<dnam>([^<,]*).*<\/dnam>/)
        {
                $dnam = $1;
                $flag = 1;
        }
        if($line =~ m/<lat>([^<]*)<\/lat>/)
        {
                $lat = $1;
        }
        if($line =~ m/<lon>([^<]*)<\/lon>/)
        {
                $lon = $1;
        }
        if($line =~ m/<hi>([^<]*)<\/hi>/)
        {
                $hi = $1;
                if($hi =~ m/(-*\d{2})/)
                {
                        $hi = $1;
                }
                elsif($hi =~ m/(-*)(\d)/)
                {
                        $hi = $1 . "0" . $2;
                }
                if($hi eq "N/A")
                {
                        $color = "Gray";
                        $hi = " ";
                }
                elsif($hi gt 30)
                {
                        $color = "Red";
                }
                elsif($hi gt "20" && $hi le "30")
                {
                        $color = "HotPink";
                }
                elsif($hi gt "10" && $hi le "20")
                {
                        $color = "plum";
                }
                elsif($hi gt "0" && $hi le "10")
                {
                        $color = "LightSteelBlue";
                }
                else
                {
                        $color = "white";
                }
        }
        if($line =~ m/<low>([^<]*)<\/low>/)
        {
                $low = $1;
                if($low =~ m/(-*\d{2})/)
                {
                        $low = $1;
                }
                elsif($low =~ m/(-*)(\d)/)
                {
                        $low = $1 . "0" . $2;
                }
                if($low eq "N/A")
                {
                        $low = " ";
                }
                if($hi eq " ")
                {
                        if($low gt 30)
                        {
                                $color = "Red";
                        }
                        elsif($low gt "20" && $low le "30")
                        {
                                $color = "HotPink";
                        }
                        elsif($low gt "10" && $low le "20")
                        {
                                $color = "plum";
                        }
                        elsif($low gt 0 && $low le 10)
                        {
                                $color = "LightSteelBlue";
                        }
                        else
                        {
                                $color = "white";
                        }
                }
        }
        if($line =~ m/<icon>([^<]*)<\/icon>/)
        {
                $icon = $1;
        }
        if($line =~ m/<t>([^<]*)<\/t>/)
        {
                if($flag > 0)
                {
                        $title = $1;
                        if($title eq "N/A")
                        {
                                $title = " ";
                                $flag++;
                        }
                        else
                        {
                                $title =~ s/(Mon|Thu|Wed|Thr|Fri|Sat|Sun) +(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) +(\d{1,2}) +(\d{4}) +(\d{2}:\d{2}) +(AM|PM) +([A-Z]+)/$4-$2-$3/ig;
                                $title =~ s/-Jan-/-01-/ig;
                                $title =~ s/-Feb-/-02-/ig;
                                $title =~ s/-Mar-/-03-/ig;
                                $title =~ s/-Apr-/-04-/ig;
                                $title =~ s/-May-/-05-/ig;
                                $title =~ s/-Jun-/-06-/ig;
                                $title =~ s/-Jul-/-07-/ig;
                                $title =~ s/-Aug-/-08-/ig;
                                $title =~ s/-Sep-/-09-/ig;
                                $title =~ s/-Oct-/-10-/ig;
                                $title =~ s/-Nov-/-11-/ig;
                                $title =~ s/-Dec-/-12-/ig;
                                $title =~ s/AM/오전/ig;
                                $title =~ s/PM/오후/ig;
                                $title =~ s/(.*) Until (.*)/$2까지 $1/ig;
                                $title =~ s/(.*) For (\w+)/$1 For $dnam/ig;
                                $title =~ s/(.*) For (.*)/$2에 $1/ig;
                                $title =~ s/Few (.*)/$1 약간/ig;
                                $title =~ s/(.*) Late/늦게 $1/ig;
                                $title =~ s/(.*) Early/일찍 $1/ig;
                                $title =~ s/Widespread Dust/황사 현상/ig;
                                $title =~ s/Waxing Gibbous/오른쪽이 뚱뚱한 달/ig;
                                $title =~ s/Waxing Crescent/오른쪽이 홀죽한 초승달/ig;
                                $title =~ s/Waning Gibbous/왼쪽부분이 뚱뚱한 달/ig;
                                $title =~ s/Waning Crescent/왼쪽이 홀죽한 초승달/ig;
                                $title =~ s/Flash Flood/기습호우/ig;
                                $title =~ s/Winter Weather/한파/ig;
                                $title =~ s/Snow Showers*/눈보라/ig;
                                $title =~ s/Rain and Snow/진눈깨비/ig;
                                $title =~ s/Partly Cloudy/약간 흐림/ig;
                                $title =~ s/Moon Visibility/달 가시도/ig;
                                $title =~ s/Last quarter/하현달/ig;
                                $title =~ s/Isolated/국지성/ig;
                                $title =~ s/New Moon/초승달/ig;
                                $title =~ s/Full Moon/보름달/ig;
                                $title =~ s/Freezing Rain/착빙성 비/ig;
                                $title =~ s/First Quarter/상현달/ig;
                                $title =~ s/Few Showers*/매우 적은 비/ig;
                                $title =~ s/Windy/폭풍/ig;
                                $title =~ s/Wind/바람/ig;
                                $title =~ s/T-Storms/뇌우/ig;
                                $title =~ s/Sunny/화창/ig;
                                $title =~ s/Sun/해/ig;
                                $title =~ s/Snow/눈/ig;
                                $title =~ s/Showers*/소나기/ig;
                                $title =~ s/Scattered/산발성/ig;
                                $title =~ s/Rain/비/ig;
                                $title =~ s/Partly/약간/ig;
                                $title =~ s/Overcast/흐림/ig;
                                $title =~ s/Mostly/대체로/ig;
                                $title =~ s/Mist/옅은 안개/ig;
                                $title =~ s/Light/적은 비/ig;
                                $title =~ s/Humidity/습도/ig;
                                $title =~ s/Hot/더움/ig;
                                $title =~ s/Heavy/강한/ig;
                                $title =~ s/Dense/짙은/ig;
                                $title =~ s/Haze/연무/ig;
                                $title =~ s/Fog/안개/ig;
                                $title =~ s/Fair/맑음/ig;
                                $title =~ s/Drizzle/이슬비/ig;
                                $title =~ s/Cloudy/흐림/ig;
                                $title =~ s/Clouds/구름/ig;
                                $title =~ s/Clear/쾌청/ig;
                                $title =~ s/Flood/홍수/ig;
                                $title =~ s/Coastal/홍수/ig;
                                $title =~ s/Flash/기습/ig;
                                $title =~ s/Warning/경보/ig;
                                $title =~ s/Advisory/주의보/ig;
                                $title =~ s/Watch/주의보/ig;
                                $flag = 0;
                                $print_out1 = sprintf("%s %s \"%s\" align=Above color=LightBlue image=WeatherMapImages\\%s.png\n", $lat, $lon, $dnam, $icon);
                                if($hi eq " ")
                                {
                                        $print_out2 = sprintf("%s %s \"%s/%s\" align=Below color=%s image=WeatherMapImages\\%s.png\n", $lat, $lon, $title, $low, $color, $icon);
                                }
                                elsif($low eq " ")
                                {
                                        $print_out2 = sprintf("%s %s \"%s/%s\" align=Below color=%s image=WeatherMapImages\\%s.png\n", $lat, $lon, $title, $hi, $color, $icon);
                                }
                                else
                                {
                                        $print_out2 = sprintf("%s %s \"%s/%s ~ %s\" align=Below color=%s image=WeatherMapImages\\%s.png\n", $lat, $lon, $title, $low, $hi, $color, $icon);
                                }
                                Encode::from_to ($print_out1, "euc-kr", "utf-8");
                                Encode::from_to ($print_out2, "euc-kr", "utf-8");
                                print($print_out1);
                                print($print_out2);
                        }
                }
        }
}
번호 제목 글쓴이 날짜 조회 수 추천 수
835 리눅스 새 하드 장착하기 RanomA 2021.12.01 600 0
834 리눅스 SSH Network error: Software caused connection abort RanomA 2021.05.29 2018 0
833 인터넷 기본 설정 복원 창 띄우는 방법들 file RanomA 2021.05.01 1024 0
832 리눅스 디렉토리별 압축 파일 생성 쉘 스크립트 RanomA 2021.04.04 831 0
831 Javascript 숫자에 끊어 읽기 컴마(,) 추가 RanomA 2020.11.27 752 0
830 Javascript 문자열을 포맷 맞춰 날짜로, 날짜를 포맷 맞춘 문자열로 변환 RanomA 2020.11.26 719 0
829 Javascript 날짜 더하기 RanomA 2020.11.26 451 0
828 Javascript 해당 연월의 마지막 날짜 가져오기 RanomA 2020.11.25 365 0
827 Javascript isNullOrEmpty RanomA 2020.11.25 686 0
826 Javascript 전화번호 포매팅 RanomA 2020.11.25 2309 0
825 Javascript IN RanomA 2020.11.18 261 0
824 Javascript LPAD RanomA 2020.11.17 582 0
823 Adobe Creative Cloud 업데이트 실패 184(혹은 C184) 오류 file RanomA 2020.09.08 1072 0
822 오라클 테이블 레이아웃 조회 Query RanomA 2020.01.13 2064 0
821 SQL Developer의 폰트 설정에서 폰트 목록이 안나타날 때 [6] file RanomA 2019.12.30 4876 0
820 Underscore( _ 문자)를 카멜 케이스(Camel Case)로 변환하기 RanomA 2019.12.06 1815 0
819 라이트룸(Adobe Lightroom) 한자/일본어용 폰트 변경 file RanomA 2018.06.06 2144 0
818 마녀의 빗자루와 악마와의 파티 RanomA 2018.03.23 891 0
817 크레인 안전 점검이 허술해진 게 이명박 때가 아니다? RanomA 2018.01.06 709 0
816 인도 중국의 분쟁 지역 file RanomA 2017.08.17 1295 0