질문/조언팁/리소스 공유

날씨 위젯 0.4.5

조회 수 1122 추천 수 11 댓글 104

현재 위치(지오로케이션)기반 날씨 위젯을 만들기로하고 일주일이 지났네요 @[email protected]

너무 오래 붙잡고 있으면 안될꺼 같아서 주말에 시간내서 마무리 지었습니다.

우선 배포하고 문제가 발견되면 추후 수정하는게 좋다는 생각입니다... ㅎㅎ

 

개인적으로 사용하던 날씨 위젯 레이아웃이 있어서 그나마 수월하게 끝냈 수 있었습니다. 역시나 이번에도 주소록 파일 만드는데 대부분의 시간을 허비 했습니다. 그나마 경험이 있어서 조금은 빨리 데이터 정리할 수 있었네요 ㅋㅋㅋ

 

w_w.png

 

날씨 위젯 0.4.5

pr_weather_v2_0.4.5.zip

 

비나 눈이 내리는 경우(예보포함) 정확하게 표시하지 못하는 문제점 수정

온도표시 그래프 상하에 패딩 추가해서 온도 표기가 잘리는 현상 해소

가로형 스킨의 잘못된 css수정

 

 


날씨 위젯 0.4

pr_weather_v2_0.4.zip

 

주의

사용 전 http://aqicn.org/data-platform/token/ 이곳에서 키를 발급받아야 합니다.

이메일과 닉네임만 넣으면 이메일 인증 후 키를 발급 해 줍니다. api.func.php 파일을 열어서 8번째 라인 'API Token'자리에 해당키를 입력후 저장하고 위젯을 작동시켜 주세요.

그리고 이번버전은 기상청 API를 사용합니다. 아래 api를 신청하셔서 서비스키를 발급받으시고 9번째 라인에 입력하시고 사용하셔야 합니다. 초단기실황, 초단기예보, 동네예보를 사용하니 신청시 모두 체크하시고 신청하세요.

https://www.data.go.kr/dataset/15000099/openapi.do

w_0720_00.png

 

변경사항

1. 캐시 관리방식을 변경하였습니다. 이로인해 속도가 향상되었습니다.

2. 기상청 페이지를 파싱하는것이 아니라 api를 이용하도록 변경하였습니다. 이로인해 로딩 속도가 다소 향상되었습니다.

3. 기본 가로형 스킨에 변화가 있습니다.

 - 다음날 오전/오후 예보가 있던 자리에 초단기 예보가 표시됩니다.

w_0720_01.png

w_0720_02.png

 

 - 단기 예보를 표시 여부를 결정하는 옵션이 추가되었습니다.

w_0720_04.png

 

 - 단기 예보를 표시하게 되면 아래처럼 단기 예보가 표시됩니다.

  • 레이아웃은 네이버의 날씨 예보를 카피 했습니다.
  • 그래프 표시를위해 http://www.chartjs.org/ 의 Chart.js를 사용했습니다.

 - 새로 추가된 단기 예보 데이터는 ajax새로고침 항목이 아닙니다. 이 데이터는 페이지 새로고침이 발생할때만 갱신됩니다.

 

 * 16개의 데이터를 표시하도록 코딩하고 배포 준비하는 과정에서 특정 시간대에는 15개의 데이터만 이용할수 있다는것을 발견 했습니다. 배포된 버전에서는 아래 예시와 다르게 15개의 시간대만 표시됩니다.

w_0720_03.png

 

 

 

 


날씨 위젯 0.3

pr_weather_v2_0.3.zip

 

주의

사용 전 http://aqicn.org/data-platform/token/ 이곳에서 키를 발급받아야 합니다.

이메일과 닉네임만 넣으면 이메일 인증 후 키를 발급 해 줍니다. api.func.php 파일을 열어서 15번째 라인 'API Token'자리에 해당키를 입력후 저장하고 위젯을 작동시켜 주세요.

w_api_key2.png

 

변경사항

1. 캐시 데이터에 변화가 있으니 캐시파일 재생성 후 사용하시는것이 좋습니다.

 

2. 코드를 세분화하고 오류체크가 미흡했던 부분들 보완 했습니다.

 

3. '기본스킨 - 가로형'이 추가되었습니다. 참고로 기존 '기본스킨'은 변경된 부분이 없습니다.

- 너비에따라 최대 3개의 날씨 예보를 표시 합니다.

- 하단 스크롤을위해 아래 jquery plugin을 사용하였습니다.

http://richhollis.github.io/vticker/

 

w_s_m_0.gif

w_s_m_1.gif

 

 

 

 


날씨 위젯 0.2

pr_weather_v2_0.2.zip

 

주의

사용 전 http://aqicn.org/data-platform/token/ 이곳에서 키를 발급받아야 합니다.

이메일과 닉네임만 넣으면 이메일 인증 후 키를 발급 해 줍니다. api.func.php 파일을 열어서 15번째 라인 'API Token'자리에 해당키를 입력후 저장하고 위젯을 작동시켜 주세요.

w_api_key2.png

 

변경사항

1. 사용하는 쿠키명을 '_pr_w_weather_geo'로 단일화 하였습니다.

- 기존에는 위치기반 사용자와 수동으로 지역 선택해서 사용하는 사용자의 쿠키명을 다르게 운영하였는데 이를 하나로 통합 했습니다.

- 기존 사용자들의 쿠키들은 위젯에서 확인해서 자동 업데이트 합니다.

 

2. api통신시 타임아웃을 3초로 변경 하였습니다.

- api.func.php 파일 13번째 라인 ($_timeout = 3;)에서 이 시간을 변경 하실 수 있습니다. 위 이미지 참조.

 

3. 통신방식을 curl로 변경 하였습니다.

 

4. 위젯 설정값에 '위치값 유효 시간 (분)'을 추가 하였습니다.

- 이 값은 위치 기반 사용자의 경우에만 유효합니다. 유효 시간이 지난 후 페이지 새로고침이 발생하면 자동으로 내 위치 찾기 버튼 클릭 이벤트를 발생시켜 나의 위치를 갱신해서 날씨 데이터를 표시 합니다.

w_op_add.png

 

5. 위젯 실행시 더이상 날씨 데이터를 만들지 않고 ajax로 처리  합니다.

- 페이지 표시할때 날씨 위젯이 캐시 유효기간이 만료되어 이를 갱신하거나 새로운 사용자의 날씨 데이터를 생성하느라 로딩 시간을 꽤나(1~2초) 잡아먹는 경우가 발생 했었습니다. 이를 해결하기위해 페이지 로딩시에 위젯은 유효한 캐시가 있을때만 이 데이터를 html로 뿌려 줍니다.

- 유효한 날씨 데이터가 없을때는 기본 화면을 먼저 띄우고 날씨 데이터는 페이지 로딩 이후 ajax로 불러 옵니다.

- 날씨 위젯때문에 페이지 로딩이 느려지는일은 이제 없을겁니다.

w_loading.gif

 

6. 자료 제공자의 바로가기 링크가 수정되었습니다.

- 기상청 : 기존 날씨누리 메인 페이지에서 동네 예보를 검색할 수 있는 서브 페이지로 변경 되었습니다.

pc : http://www.weather.go.kr/weather/forecast/timeseries.jsp

모바일 : http://m.kma.go.kr/m/forecast/forecast_01.jsp

- World Air Quality : 기존 세계 상황을 볼수있는 페이지에서 자신의 위치 근처의 상활을 볼 수 있는 페이지로 변경.

 

 

 


날씨 위젯 0.1

pr_weather_v2_0.1.zip

 

 

주의

1. 데이터를 받아올때 curl이나 snoopy같은 클래스 이용없이 간단하게 file_get_contents을 이용했습니다.

 

2. 지오로케이션 api는 https가 아니면 작동하지 않을 수 있습니다. 이경우에는 자동 위치확인 아이콘을 클릭하더라도 주소록 선택화면이 뜨로록 했습니다. 그리고 브라우저나 환경(pc, 모바일)에 따라서 정확하지 않은 좌표를 반환 할 수 있습니다.

 

3.위젯이 작동하기 위해서는 http://aqicn.org/data-platform/token/ 이곳에서 키를 발급받아야 합니다.

이메일과 닉네임만 넣으면 이메일 인증 후 키를 발급 해 줍니다. api.func.php 파일을 열어서 7번째 라인 'API Token'자리에 해당키를 입력후 저장하고 위젯을 작동시켜 주세요.

w_api_key.png

 

4. 위의 이미지에서 보듯이 5번째 라인에 타임아웃을 5초로 설정하고 있습니다. 5초동안 응답이 없다면 기존 캐시 데이터를 이용하도록 설계되어 있습니다.

 

 

설정

1. 스킨의 컬러셋은 '흰색 바탕용'만 작업했습니다.

2. 캐시는 기본제공되는 위쪽의 캐시는 사용하지 마시고 아래쪽에 따로 마련된 '캐시 유지시간'을 사용 하세요. 캐시는 30분 이상 충분히 넉넉하게 사용하시는것을 추천 합니다.

3. 지역을 설정하지않은 사용자에게 보여줄 기본지역은 서울의 중앙 부분쯤인 필동으로 기본값을 정했습니다.

4. 마지막 애드온과 연동 부분은 제가 개인적으로 사용하는 애드온과 연동하기 위한 부분이니 신경쓰지 않으셔도 됩니다.

- 여담 입니다만 눈송이 애드온을 보고 제가 개인적으로 사용하던 애드온과 너무 흡사해서 놀란적이 있습니다. 같은 플러그인을 사용해서 눈송이 옵션이 비슷한것을 떠나 실제 날씨와 연동한 아이디어도 비슷해서요 ㅎㅎㅎ

혹시 이 옵션을 이용하시려면 애드온등에서 아래 코드로 체크 하시면 됩니다.

if(Context::get('pr_is_snowing') == 'Y' || $_SESSION['pr_is_snowing'] == 'Y')

{

//눈이나 눈/비가 내리는 날씨 입니다.

}

w_config.png

 

 

참고 사항

1. 캐시는 캐시 유지시간을 초과했더라도 무조건 삭제하지 않고 새 날씨 데이터를 가져올때 응답이 느려 타임아웃이 발생하면 기존 캐시를 또한번 이용하도록 설계하였습니다. (주의 4번 참조)

 

2. 주소록 관련

기존 포털 사이트에서는 최종 읍/면/동의 개수가 6,491개 였습니다. 하지만 기상청에서 제공하는 주소록에는 전국 3,504개의 읍/면/동만 제공하더군요. 이 위젯은 기상청 데이터를 이용하므로 기상청의 지역 분류에따랐습니다.

예로 서울 중구의 경우 아래처럼 차이가 납니다. 좌측이 포털사이트, 우측이 기상청 입니다.

서울중구.png

 

3. 기상청에서는 자신들만의 x,y좌표에 따라 구역을 나눠서 최종 데이터를 제공하는것으로 보입니다. 따라서 10자리 지역코드가 다르더라도 x,y좌표가 겹치는 지역이 상당히 많습니다. 그래서 캐시또한 x,y좌표에 따라 관리합니다. 2번에서 밝힌대로 전국 3,504개의 지역이 있지만 x,y좌표 겹치는곳을 제거하면 1,620개 지역으로 압축됩니다. 서울의 경우는 겹치는 지역이나 경기권과 겹치는 경우를 제외하면 18개의 좌표만 남습니다.

 

4. 지오로케이션

얻어온 좌표기반으로 지역명을 구하는 api를 구글이 제공하기는 합니다만 무료는 하루 2,500쿼리 제한도 있고 또한번 통신을 하므로 속도저하가 있을것으로 판단하여 따로 api를 이용하지않고 주소록에서 지역명을 찾아오도록 했습니다.

다만 속도를 위해 간단하게 기상청의 x,y좌표 기반으로 지역명을 판단하게 만들다보니 지역명이 정확하지 않을 수 있습니다.

예로 아래 지역의경우 모두 같은 x,y좌표를 사용합니다. 따라서 현재 지역이 아래와 같다면 순서에의해 모두 '서대문구 천연동'이라고 표시가 됩니다.

서대문구
천연동
성북구
돈암제2동, 삼선동, 성북동, 정릉제1동, 정릉제2동
종로구
가회동, 교남동, 무악동, 부암동, 사직동, 삼청동, 숭인제1동, 이화동, 종로1.2.3.4가동, 종로5.6가동, 창신제2동, 창신제3동, 청운효자동, 평창동, 혜화동
중구
광희동, 명동, 소공동, 신당동, 을지로동, 장충동, 필동
 

5. 날씨 아이콘은 아래 링크의 무료 공개된 아이콘을 받아서 제가 간단하게 색을 입혔습니다.

https://dribbble.com/shots/1247177-Weather-icons

w_icon.png

 

6. 통합대기 품질은 데이터 제공자의 등급 표시에 따라 표기합니다.

aq_level.png

 

 

위젯 작동

1. 통합대기 상태를 클릭하면 자세한 수치가 표시됩니다.

w_air.gif

 

 

2. 위치 기반

w_geo.gif

 

3. 지역 수동 선택

w_loc.gif

 

4. 위치 기반이던 지역 수동 선택이던 지역 정보를 쿠키에 저장해서 사용합니다.

 

 

적다보니 상당히 길어졌네요... 문제가 있다면 댓글 달아주시면 시간 나는대로 수정하겠습니다.

마지막으로... 충분히 테스트 해보시고 사용하시기 바랍니다. ㅎㅎㅎ

  • profile
    우와 고생 많이 하셨네요.
    스마트폰에 적합한 가로형 스킨이 추가되면 좋을 것 같습니다.
  • profile profile
    네... 주소록 region.class.php 정리하는게 가장 힘들고... 지루하고... 귀찮고... 오래걸리고... 그랬습니다 ㅋㅋㅋ
    좀 지켜보고 작동에 문제가 없으면 가로형 스킨도 하나 추가 해야죠 ㅎㅎㅎ
  • profile

    뭐 그냥 완벽합니다. 잘 동작 하는듯 합니다. 마구마구 잘 사용할께요 ^^

  • profile profile
    넵, 사용시 오류있으면 알려주시구요 @[email protected]
  • profile
    주말에 쉬지도 못하시고 고생하셨겠네요 너무 감사드립니다. 꾸벅
  • profile
    슈퍼캐시모듈 전체화면캐시 기능 사용하시는 분들은 전체화면캐시 별도관리할 쿠키 목록에
    _pr_w_weather_geo
    등록해 주세요. 개발자도구에서 보니 쿠키명이 이렇게 나오네요.
  • profile profile
    전 캐시때문은 아닌것 같은데 전혀 동작이 안되네요 http도메인은 아예 동작이 안되는건가요?
  • profile profile
    본문에 지오로케이션쪽만 언급이 있으니 아마 수도으로 지역을 선택하고는 될 것 같네요.
  • profile profile
    위젯 생성자체가 안되는 문제라서요 ㅠㅠ 설정을 하고 저장까진 잘되는데 아무것도 표시가 안되네요
  • profile profile
    오... 따로 설정해줄께 있나보네요. 날씨 위젯은 상황에 따라 아래 두가지 쿠키를 생성합니다.
    위치 기반 쿠기 : _pr_w_weather_geo
    수동 지역선택시 쿠키 : _pr_w_weather_rid
  • profile profile
    따로 오류 발생하지는 않고 기본 레이아웃은 표시 되는데 날씨 정보가 전혀 표시 안되시나요?
  • profile profile
    네. 따로 관리 안하면 슈퍼캐시 사용하는 사이트는 방문자가 이전 방문자에 의해 만들어진 쿠키를 받게 되어서 별도관리해야 합니다. 하나가 더 있군요. 감사합니다.
  • profile profile
    기본레이아웃자체가 안나타나서요
  • profile profile
    근데... 왜 쿠키를 상황에따라 이름을 다르게 생성했는지 생각이 안나네요 ㅋ
    위치기반인지 사용자 지정 지역코드인지는 다르게도 구별할수 있었을텐데... ㅎㅎㅎ
  • profile profile
    헐.. 레이아웃 기본틀은 데이터가 없어도 보여야 할텐데요?
    혹시 위젯 작동 대상 선택 문제는 아니시죠? 로그인 사용자, 모두
    그것도 아니고 레아아웃 자체가 안나타나는것이면 위젯 코드실행에 문제가 발생한거 같은데요... 오류 표시도 없나요?
  • profile profile
    네 오류표시는 따로 안 나타 나는데 위젯페이지에서 페이지수정 누르고도 추가 해보고 관리자 페이지에서 코드생성해서 레이아웃에 직접 넣어 봤는데 위젯창이 전혀 안나타 나더라구요.. 슈펴캐시문제는 아닌것 같구요 ^^
  • profile
    우왕 +ㅁ+
  • ?
    오졌네요...
    잘쓰겠습니다.
    감사합니다.
  • profile

    자료 감사합니다~
    저는 위젯 기본틀까지는 나오는데 날씨 정보가 안나와서...

    수동으로 지역선택해도 마지막 동선택하고 완료가 안되네용~
    테스트용 사이트에서 돌려도 마찬가지에요

    https 부럽다 ㅠ

  • profile

    쿠키 유효기간이 위젯에 설정한 시간과 다르게
    2038-01-23T23:58:13.633Z

    이렇게 굉장히 긴 시간으로 설정되는 문제가 있는 듯 합니다.

     

    혹시 좌표 확인은  수동으로 방문자가 눌러줘서 변경하는 것으로 만들어진건가요?

    최조 위치확인 버튼을 누른 후 일정 시간마다 위치 변동을 갱신하는 것으로 생각했는데요.

  • profile profile
    네 유효기간 길게 잡았습니다. 위치가 변경되면 사용자가 위치확인 버튼을 누르면 되는데네비게이션처럼 일정시간마다 위치를 자동 갱신해야할 필요가 있을까요?
  • profile profile

    네. 사용자가 직접 위치를 골라서 선택하는 것이 아닌 지오로케이션의 경우 쿠키 만료시 다시 위치를 확인하는 것을 적용해 주시면 너무 좋을 것 같습니다. 위젯 시간에 설정한 시간으로 연동되게 해주시면 좋을 것 같습니다.

    컴에서 주로 하시는 분들이야 고정 위치이시겠지만 요즘 스마트폰이 주로 이용되고 있어서요.

    아침에 출근전에 집 근처였다면 1시간 후에는 사무실에 있을 확율이 높죠. 두 지점의 거리가 제법 된다면 내가 있는 곳의 위치의 현재 날씨를 자동으로 보여주면 좋겠다는게 처음 생각이었습니다.

    위치확인 버튼은 사실 위치추적 동의와 같은 버튼이고 이후는 정해진 시간마다 위치를 새롭게 확인하고 그 위치의 현재날씨를 보여주는게 좋다고 생각하고 있습니다. 사실 그냥 변경될때마다 버튼을 눌러 위치를 새로 잡는다면 동을 직접 지정하는 것과 별반 차이점이 없을 거에요.

     

    이게 싫은 운영자를 위해 옵션으로라도 제공해 주시면 좋을 것 같아요.

    위치가 바뀔때 마다 위치버튼을 누르는 경우는 저희처럼 잘 아는 운영자정도 일 것 같아요.

  • profile profile
    웹지기님~ 캐싱설정 어떻게 하셨나요? 전 딜레이가 많이 발생하네요...ㅠ 전, 위젯의 캐시 유지시간을 30분, 슈퍼캐시에서는 위젯캐시사용을 '아니오'로 설정했는데 날씨위젯때문에 메인화면이 느려졌네요.
  • profile profile
    느려지는 것이랑 캐시랑 상관 없을 겁니다. 다들 캐시 유지시간을 30으로 사용할 거에요. 메인에 기능 하나 추가될때 마다 약간의 로딩속도가 추가되는건 감수해야 하는 것이구요.

    슈퍼캐시로 사용 안하게 설정하시면 자체 위젯의 캐시를 사용하게 되는 것이고 위젯캐시는 비우라고 해 놓으셔서.. 지금 하신대로 설정이 맞으실 겁니다.
  • profile profile

    방문해 보니 최초응답시간이 2초에 가까운 정도로 많이 느려졌네요. 날씨위젯 빼면 괜찮은가요?

    사용하는 방식이 먼저 배포된 것이랑 조금 달라 더 시간이 오래 걸리는건 아닌지 하는 생각도 드네요.
    조금 개선이 필요해 보이기도 하네요.

  • profile profile
    흠.. 체감상 2배 느려진거 같습니돠 ㅠㅠ
  • profile profile
    체감이 아니구요. 실제 무척 응답이 느려졌습니다. 이럴때는 개발자도구의 네트워크 탭에서 응답속도를 체크해 보시면 되는데요.

    지금 보니 ttfb 가 너무 느려져서 문제가 될 정도이네요. 일단 날씨 위젯을 빼셔야 할 것 같습니다. 아마도 배포된 방식이 아니라 그런거 같아요.
  • profile profile
    날씨위젯 빼면 쌩썡해요;; 장착 못할꺼 같습니다 ;;ㅠ
  • profile profile
    캐시 갱신이나 새로운 지역 데이터 생성시 페이지 갱신이 1초정도 지연되는 현상이 발견되어서 위젯단에서 처리하던 작업을 dom출력 후 ajax로 넘겨서 처리하는 식으로 다음버전 업데이트 계획에 있습니다.
  • profile profile
    근데 이상한점이 튜닝셀프님 사이트에 노출된 건 매번 데이터가 갱신되는 건지 매번 느리고 시간도 매번 새로운 시간이었던 것 같아요.
  • profile profile
    따로 업로드한 파일은 통신할때 curl library를 사용하도록 변경한것밖에 없는데 이상하네요.
    그렇다면 캐시를 생성못하거나 캐시 유지 시간 설정값을 인식하지 못하는 경우일텐데요...
    여튼 다음버전에서는 @람보님이 알려주신 방법으로 위젯 설정값 가져와보고 대부분의 작업을 ajax로 처리해서 성능을 개선해볼 생각입니다.
    그때나돼야 조금은 쓸만 해 지겠네요 ㅠㅠ
  • profile
    왕깔끔! 고생 많으셨습니다! ^^
  • ?

    잘 쓰겠습니다 감사합니다.

    테스트로 지역설정 한 후 위치기반으로 바꾸려면 어떻게 해야 하는지 문의드립니다.

  • ? profile
    그냥 우상단의 현재위치 확인버튼 누르시면 됩니다
  • profile ?
  • profile
    캐시 유지시간을 30분으로 설정하면 슈퍼캐시의 위젯캐시는 꺼 놓아야 하죠? 설정대로 했는데 온도나 습도 등 수치들이 표시가 안되네요...
  • profile
    이거 php 5.5에서 잘 되는건가요? 전 위젯자체가 생성이 안되서 어떻게 확인을 해야되는지 모르겠네요 ㅎ
  • profile profile
    php7.1환경에서만 테스트해봐서 잘 모르겠습니다... 다음 버전에서는 범용성 생각해서 코드좀 다듬어 보겠습니다 ㅠㅠ
  • profile profile
    네 감사합니다. 여기 댓글 다신분들 거의 7.1버전이신것 같아서 혹시나 여쭤본거거든요
  • profile
    흠.. 라이믹스엔 안 맞나봐요. 저는 지역명을 클릭한 후에 아무 반응이 없어요. 글구 우측 상단의 버튼을 눌러도 지역명이 뜨지가 않구요...
  • profile profile

    라이믹스 특성탈꺼리가 특별히 없을텐데요... 제가 라이믹스에서 작업하거든요 ^^;

    api.func.php 파일을 첨부한 파일로 변경 후 테스트 해 보시겠어요? 발급 받으신 키 입력하시는거 잊지 마시구요.

    file_get_contents대신 curl을 이용한 버전 입니다.

    api.func.zip

    Atachment
    첨부
  • profile profile
    오잉!! 첨부해주신 파일로 하니까 되네요!! 발급 받은 키는 당연히 입력했죠 ^^; 감사합니다! ㅎ
  • profile

    또제보..

     

    getWeather.php 에서 45번째줄부터 시작되는 쿠키를 세팅하는 부분의 3번째 인자 값은 무조건 정수값이여야 합니다. (인테저 관련 에러가 php7.2부터는 뜹니다.)

     

    그래서 아래와 같이 설정해보세요..

     

    $cookieFristTime = time() + (86400 * 365 * 20);
    setcookie('_pr_w_weather_rid', json_encode($geo), (int)$cookieFristTime, '/');
    if(isset($_COOKIE['_pr_w_weather_geo']))
    {
       unset($_COOKIE['_pr_w_weather_geo']);
       $cookieSecondTime = time() - 3600;
       setcookie('_pr_w_weather_geo', '', (int)$cookieSecondTime, '/');
    }

     

  • profile profile
    헐 정수끼리 연산해도 결과가 정수값이 아닌경우도 있나요?
    많은 도움 감사합니다 ^^
  • profile profile
    아마도 문자열로 잘못 변환된것 같아요. 이렇게 변경하도록 하는게 좋겠습니다.
  • profile profile
    쪽지로 보내드린 일부 환경에서 쿠키값이 저장안되어서 위치저장이 안된 이유가 아마 제 경우 7.2에서 그랫던 것 같고요.

    해당 파일 상단 세션시작하는 함수도 지워주세요.

    이미 세션은 XE에서 시작되고 있는데 다시 시작할 필요는 없거든요(이역시 PHP7.2에서 에러)
  • ?
    안녕하세요? 저는 왜인지는 모르겠지만, 내 위치 아이콘을 눌러도 그냥 지역 선택만 뜨네요.. 현재 위치 날씨가 안되욤 ㅠㅠ...
  • ? profile
    2. 지오로케이션 api는 https가 아니면 작동하지 않을 수 있습니다. 이경우에는 자동 위치확인 아이콘을 클릭하더라도 주소록 선택화면이 뜨로록 했습니다. 그리고 브라우저나 환경(pc, 모바일)에 따라서 정확하지 않은 좌표를 반환 할 수 있습니다.
  • profile ?
    아하.. 그렇군요..
  • profile
    해외 지역도 가능할까요?
  • profile profile
    현재는 불가능 합니다. 날씨 데이터를 기상청것을 사용하거든요...
  • profile

    한가지 건의 드리고 싶습니다.
    제공: 기상청 날씨누리 를 클릭하면 기상청 홈이 아닌 우리동네 예보를 볼 수 있는 곳으로 이동하면 좋겠는데요.

    현재 설정된 위치로 해서 조회된 화면이로 이동하는 방법을 잘 모르겠습니다. 그렇게 이동될 링크로 제공되면 좋을 것 같습니다.

     

    모바일의 경우 조건을 걸어 모바일 동네예보 주소로 했으면 더 좋을 것 같습니다.

    http://m.kma.go.kr/m/forecast/forecast_01.jsp

    모바일 주소는 예전 주소에서 새로운 주소로 바뀌지는 않고 서비스중이네요.

  • profile

    눈송이 애드온과 연동해 보려 하는데요. 지금 눈이 오는 날씨인데 이게 위젯에서 눈 오는 것으로 잘 표시되고 있는지 어떻게 확인하면 될까요? 애드온에서 눈오는 것으로 인식 못하는 것 같아서요...

     

    잘 안되서 연동을 전역으로 바꾸니 눈이 내리네요~~ 

     

    어.. 이건 문제가 좀...  전역으로 하니까 지역에 상관없이 눈이 내리네요. 사이트 전체에 영향을 주는 방식 인가보네요. 

     

    애드온 호출 시점을 바꾸니까 지역으로 해도 눈이 내리네요. 이 방식의 한계가 좀 보이는데...

    눈 내리고 싶은 페이지에 위젯이 모두 동작하고 있어야 하네요... 맞지요 ???

  • profile profile
    위젯에서 연동은 간단하게 아래처럼 작동합니다.
    1. 지역: Context::set('pr_is_snowing', 'Y');
    - 날씨 위젯이 있는 페이지만 변수가 설정되므로 위젯이 있는 페이지에만 눈이 내립니다.
    2. 전역: $_SESSION['pr_is_snowing'] = 'Y';
    - 사용자 세션값을 설정하므로 날씨 위젯이 없는 페이지에서도 눈이 내립니다. 단, 세션값이 변경되기 위해서는 한번은 위젯이 실행 되어야 겠지요...
  • profile profile
    근데 전역으로 하니까 지역에 상관없이 모든 브라우저에서 눈이 내리던데요??
  • profile profile
    제 애드온의 호출 시점은 $called_position == 'before_display_content' && Context::getResponseMethod() == 'HTML' 이고...
    아래처럼 체크해서 눈이 내리게 합니다.
    if($addon_info->only_snow == 'Y') // Y - 애드온 설정에서 실제 날씨가 눈이 내릴때만 작동 선택시
    {
    if(Context::get('pr_is_snowing') == 'Y' || $_SESSION['pr_is_snowing'] == 'Y')
    {
    $is_act = true;
    }
    else
    {
    $is_act = false;
    }
    }
    else
    {
    $is_act = true;
    }
  • profile profile

    저도 호출 시점은 동일하게 맞춰 놓았는데요. 그럼 전역으로 해도 브라우저 상 날씨 위젯에 눈이 없다면 눈이 내리지 않는게 정상인가요? 다른지역에서 눈이 내려 세션이 생성되었다 해도요... 이게 궁금합니다.

     

    전역으로 한번 해봤는데 대구지역에 눈이 안오는데 브라우저 위치를 대구로 해놓았는데 눈이 내리더라구요.

  • profile profile
    상황을 대충 아래처럼 정리 할 수 있겠네요...
    그런데 이번 배포 버전에서는 연동 기능을 빼고 배포 하려고 했었는데요... ㅎㅎㅎ

    1. 날씨 위젯이 메인 페이지에만 있음.
    2. 연동 - 전역 선택.

    실제 눈이 내림 -> 메인 페이지에서 눈이 내림 -> 날씨 위젯에서 눈이안오는 지역을 선택 -> 눈이 내림
    - 날씨 데이터를 ajax로 가져오므로 페이지를 새로 고침할때까지는 계속 눈이 내림.

    실제 눈이 내리는 지역 -> 메인 페이지를 거치지않고 서브 페이지로 바로 접속 -> 눈이 내리지 않음 -> 메인 페이지 이동 -> 눈이 내림 -> 서브 페이지 이동 -> 눈이 내림.

    실제 눈이 내리는 지역 -> 메인 접속 -> 눈이 내림 -> 서브페이지 이동 -> 눈이 내림 -> 서브 페이지에 머무르는 사이 눈이 그침 -> 서브페이지 이동 -> 눈이 내림 -> 메인 이동 -> 눈이 내리지 않음.
  • profile profile
    긴 설명을 봐도 잘 모르겠습니다.

    전역 설정시에도 실제 눈내리는 지역에만 눈 효과가 나타나는게 맞나요?
  • profile profile
    와우... 전역으로 해도 전국에 다 눈리게 하는게 아니네요.
    방금 다시 테스트를 해보니 눈 내리는 곳에서만 브라우저 전체에서 위젯 없이도 눈이 내리네요.
  • profile profile

    네 위젯에서 사용자가 선택한 지역에 따라 변수가 설정 되니까요.
    지역, 전역 나눈 이유는 날씨 위젯이 있는 페이지에만 눈내리는 효과를 줄것인지 위젯이 안보이는 서브 페이지까지 눈이 내리게 할것인지 나누는 것 입니다.

  • profile profile
    이 기능 빼지 마세요. 이거 대박 기능입니다. 애드온에서 눈내리는지 아닌지 확인하고 하는 과정이 없어져서 중복 작업을 안하게 할 수 있고 전역으로 사용하니 효율도 높아지고 좋습니다!
  • profile
    아이피를 조회해서 지역을 찾아주면 최고일텐데 희망사항 입니다 ㅋㅋㅋㅋ
  • profile profile
    지오로케이션 api가 gps 또는 아이피로 지역을 찾아줍니다. 그 기술이 들어가 있습니다.
  • profile
    이메일로 키가 오나요?
    이메일로 뭐가 오긴 왔는데.. 뭔지 모르겠어서요
  • profile profile
    이메일을 읽어보시면 승인하는 버튼이 보이실겁니다. 그거 누르시면 키를 카피할 수 있는 페이지가 뜰거에요.
  • profile profile
    아하! 감사합니다^ ^
  • profile
    정말 핫한 위젯인데.. 사용을 못하니 너무 서글픕니다. php5도 지원해주세요 꼭이요^^
  • profile
    이제 http사용 사이트도 잘 되네요 정말 감사합니다. 한가지 더 말씀드리자면 위젯이 로딩중일 때 다른곳을 클릭해서 페이지를 이동하려고 하면 나갈꺼냐고 확인창이 뜨는데 소스를 다 뒤져도 confirm 이나 beforeunload나 이런 것들은 안보여서용~ 요부분 고칠 수 있게 누가 힌트좀 주실분 계신가요!?
  • profile
    셀프 답글 답니다. ajax 때문이었네여
    <script>;(function($){$.ajaxSetup({global: false});})(jQuery);</script>
    날씨 위젯 앞에 넣주시면 끝
  • profile profile
    그냥 스킨파일 161라인 url 아래쪽에 global: false, 추가해 주셔도 됩니다.
  • profile profile
    저는 버튼이 다 보이는데요. 혹시 이걸 추가하면 메시창 자체를 안띄우게 하는건가요?
  • profile profile

    네 페이지 이탈 메시지 나타나지 않습니다.
    저의 경우는...
    global: true(기본값) - 날씨 위젯 로딩중 페이지 이동 -> 경고 메시지
    global: false - 날씨 위젯이 로딩중 다른 페이지로 이동 -> 로딩 완료 될때까지 기다린후 페이지 이동
    이런식으로 작동 합니다.

    위 옵션을 추가하면 클릭에 바로 반응하지 않고 약간 굼뜬 반응을 보여서 빼기는 했는데 옵션 추가해서 배포하는게 나을까요?

  • profile profile
    훨씬 더 간편하네요. 감사합니다~
  • profile
    앗.. 오늘 코드 새로 생성해 보면서 알았는데 gps 위치 갱신할 수 있는 시간이 옵션으로 생겼네요!
    모바일에 이 옵션 넣어서 사용하겠습니다. 감사합니다!
  • profile
    감사합니다.
  • profile
    코드 적용해도 해당 위치에 아무것도 안나오고 백지; 중간 파일도 바꾸고, 코드도 받고.. 결국 못하고 ㅠㅠ
  • ?
    정말 최고라고 생각되어 집니다.
  • ?
    너무 아름답네요!.^^ 감사합니다.
  • profile
    쓰고있는데 최고입니다.
  • profile
    와 제작하신다고 고생 엄청 하신것 같습니다
    ^^;;
  • ?
    전 왜 위젯생성을 눌러도 반응이 없나... 했더니... php 5 대 버전은 안되나보군요 ㅠ 잔뜩 기대했는데.. 아쉽 ㅠ
  • profile
    요즘 http://aqicn.org 에서 데이터를 가져오지 못하는 경우를 자주 보는데요. api측 문제이겠죠??
  • profile
    언제부터인지 모르겠으나 최근
    캐시파일재생성을 관리자페이지에서 해주거나 혹은 지역을 수동을 지정했을때 air 정보값을 잘 표시해 주지만 캐시시간이 만료되어 새로운 값을 가져오려고 시도할 경우 시간은 09:00시 미세먼지,초미세먼지 값은 표시가 안되거나 null 이라고 표시가 됩니다.

    그래서 최근에는 통합대기 좋음이라고 표시되며 값이 null 혹은 없는 경우가 대부분인데요. 뭐가 문제가 생긴걸까요 ? 저희 사이트 만의 문제는 아닌듯 합니다.
  • profile
    우선 $_timeout = 5; 5초로 변경해보았으나 별 차이가 없는 듯 해서...

    캐시갱신시간을 30분에서 10분으로 단축해서 모니터링 중입니다.
  • profile

    10분으로 단축해도 값이 출력이 안되거나 null 로 출력되는 현상은 발생하긴 하네요.

  • profile
    서버에 오늘 오전에 2번 정도 이런 에러가 발생하기도 했었네요.
    Undefined index: HTTP_REFERER in /public_html/widgets/pr_weather_v2/getWeath er.php on line 2
  • profile profile
    요즘은 출석만 하고있어서 확인이 늦었네요...

    if(!preg_match('/'.$_SERVER['HTTP_HOST'].'/', $_SERVER['HTTP_REFERER']))
    이런식으로 리퍼러 체크를 하도록해서 내 사이트의 호출에만 응답하도록 만들었는데 HTTP_REFERER값이 없는 경우도 있나보네요.
  • profile profile
    일단 최근 저희 사이트도 그렇고 다른 사이트도 미세먼지는 통합대기 값이 출력이 공란이거나 NULL 로 출력이 되는 현상이 빈번히 발생되고 있어요. 원인을 찾아 해결하고 싶은데 알 수가 없네요.
  • profile profile
    짬짬이 한번 살펴 보도록 하겠습니다. ㅎㅎㅎ
  • profile profile
    게시글의 댓글 대화내용이 도움이 될까 해서 남겨 드립니다.
    https://xetown.com/qna/961584
  • profile profile
    지금까지 제가 시도해보고 테스트해 본 것으로 볼때
    아마 timeout 시간이 영향을 주는 것으로 추측이 됩니다.

    최초 문제를 발견하고 3초 - > 5초로 변경한 후 저희는 많은 개선이 있었던 것으로 판단이 됩니다.
    타사이트와 비교시 저희 사이트가 월등히 높은 성공율을 보이고 있었습니다.
    그런데도 저희 사이트도 여전히 실패하는 경우가 많아 다른 문제로 보고 이것 저것 알아보고 있는데요.

    오늘 아침 다시 10초 정도로 늘리고 지금 확인 중에 있습니다.


    만약 이문제라면 위젯 설정에서 이 시간 설정을 각 사이트의 환경에 맞게 직접 설정하게 하고

    아래 댓글에 제가 언급한
    값을 받지 못했을때 "좋음" 이 아닌 다른 확인 가능한 문구로 표시를 해주어야 할 것 같습니다.
  • profile profile

    그리고 아래와 같이 api가 null 값을 반환하는 경우가 종종 있습니다.

     

    re.JPG

     

    이런 경우를 대비해서 값을 받지 못한 경우 정해진 횟수까지 반복해서 api요청을 하는게 필요해 보입니다. 

    - 이부분 아래 댓글에도 적었지만 기본적으로 status 값이 ok 인지 확인 후 반영하는 과정을 거치는게 좋겠습니다.

     

    저런경우 이후 다시 요청하면 다시 제대로된 값을 응답하더라구요.

  • profile profile

    정상적인 데이터를 받지 못한 경우 캐시에 저장하지 않는 방법도 필요합니다.

    지금은 잘못된 값을 받으면 캐시에 있던 데이터를 그대로 다시 저장하도록 되어 있는데, 만약 캐시에 있던 데이터도 null이라면 계속해서 null만 저장되는 문제가 있습니다. 날씨와 대기상태를 각각 따로 캐싱하되, 문제가 있는 쪽은 캐시에서 제외하여 다음 번에 갱신되도록 하는 것이 좋겠습니다.

  • profile profile
    제가 캐시파일 재생성을 하면 다시 된다고 했던게 이런 경우 였던 것 같습니다.
    api 측에서 어떤 이유로 종종 최초 요청시 null 값을 반환하는데 이후 다시 제가 캐시파일 재생성을 해서 다시 api로 받아오게 하면 다시 제대로 된 값이 가져오는 거죠..

    받아오지 못했을때의 고려가 필이 필요해 보이네요. 리얼타임으로 조회시마다 값을 가져오는 것이 아닌 가져온 것을 캐시해서 쓰려고 고안한 것이므로 정상적이지 않은 값을 캐시해버리면 캐시하는 것이 오히려 독이 될테니까요.
  • profile profile
    api 측 예제 javascript 에도
    if (!result || (result.status!="ok")) {
    output.append("Sorry, something wrong happend: ")
    if (result.data) output.append($("<code>").html(result.data))
    return
    }

    이런 부분이 보이네요..

    아마 정상적인 리턴이 아닐경우가 종종 있어 status 값이 "ok" 여부인지를 확인 후 반영하는 과정이 있어야 하는 것 같네요.

    이부분을 위젯에 한번 적용해 보고 싶은데 쉽지 않을 것 같네요. 개발자분들은 쉽겠지만요 ㅋ
  • profile profile
    예제처럼 그냥 에러를 뿜고 뻗어버리면 쉽겠지만, 이 위젯은 대기정보뿐 아니라 날씨도 받아와야 하고, 캐시 처리 과정도 있어서요...
  • profile profile
    질문으로 올렸어요. 그냥 이후 진행과정을 아예 스톱 시켜 버리면 다음 페이지 로딩시 다시 불러올 것 같아서요..
  • profile

    그리고 값이 없을 때도 "좋음" 으로 표시되는 문제를

    elseif(1 < $aqi)
    {
    $scale->bgcolor = '#009966';
    $scale->color = '#fff';
    $scale->level = '좋음';
    }
    else
    {
    $scale->bgcolor = '#2524FF';
    $scale->color = '#fff';
    $scale->level = '미수신';
    }


    이렇게 고쳐보았습니다.

  • profile

    로그인 하시면 이 댓글 확인 부탁드릴게요.
    기상청 좌표로 날씨 출력해주는 곳의 출력내용과 포멧이 변경된 것 같습니다.
    날씨정보를 수집하지 못하고 있는데 제가 뭐가 바뀐건지 조치하기 어려워 도움을 요청을 드립니다.

     

    https://xetown.com/qna/1017595

  • ?
    와~ 설치한번 해보고 싶네요.
  • profile
    php7.0으로 올리고 위젯을 생성해봐도 여전히 아무것도 안보이는... 뭐가 문제일까요...ㅠㅠ
  • profile profile

    에러메시지 등의 정보 없이 무엇이 문제인지 알수는 없을 겁니다. php 에러 라든지 정보를 수집하셔야 할 것 같네요.

  • profile
    미세먼지 api 에서 받아오는 값이 농도인 마이크로그램 이 아닌 해당 농도로 가중치까지 적용된 오염수치 AQI 값 인 것을 확인했습니다.
    https://xetown.com/topics/1110802

    국내 다른 곳에서와의 비교를 쉽게 하기 위해서는 기회가 된다면 국내 api에서 농도값을 받아와 표현해 주는것이 좋은 방법 일 수 있다고 생각이 들었습니다.

서버에 요청 중입니다. 잠시만 기다려 주십시오...