• 목록
  • 아래로
  • 위로

안녕하세요?


제가 지난 주말에 짬을 내서 연습하다가 결국 해결하지 못한 문제가 있어서 여쭤봅니다 ㅠㅠ



예전에 humit 님께서 블로그에 올려주셨던 네이트 실시간 검색어 파싱을 이용하여 간단한 위젯을 만들었는데요.


우선 아미나의 apms_widget_cache() 함수를 이용하여 캐싱 주기를 100초로 지정하였습니다.


그리고 위젯 하단을 클릭하면 ajax를 이용하여 실시간 검색어 파싱 결과를 업데이트 하도록 했는데요.


일단 제가 구현해보려고 한 기능 자체는 작동을 잘 하고 있습니다.


허접하지만 대략 아래 캡쳐사진과 같은 방식이에요.




그런데 제가 끝내 해결하지 못한 문제가 있는데요. 


브라우저에서 F5를 누르면 apms_widget_cache() 함수의 결과를 불러오기 때문에 캐싱을 이용하지만,


위젯을 클릭하여 ajax로 내용을 업데이트를 하면 캐싱을 무시하고 다시 파싱을 하는 것인데요.


이런 식으로 작동하면 해당 사이트와 타겟 사이트에 무리한 로딩을 가할 수도 있을 것 같아서요 ㅜㅜ



제가 구글링 후 짜깁기 하는 수준이어서 코딩 알고리즘의 측면에 대해 잘 알지 못해서 해결하지 못하는 문제 같네요.


아예 처음부터 ajax를 이런 방식으로 사용하는 것이 잘못된 것인지 모르겠네요 ㅠㅠ


우회적이지만 parse1.php와 time.php에서 파일이나 DB를 이용한 캐싱을 하거나,


일정 시간이 경과하지 않으면 ajax 관련된 스크립트를 작동하지 않도록 하는 방식을 고려하고 있는데


아무래도 제 아이디어 자체가 잘못된 것 같아서요 ㅜㅜ



ajax를 이용하기 위해서 파싱을 하는 parse1.php와 파싱 시각을 알려주는 time.php를 별도로 분리하였고,


나머지는 아미나의 일반적인 위젯 구성방식에 최대한 부합하도록 파일을 작성하였습니다.



<?php
if (!defined('_GNUBOARD_')) exit;
echo '<link rel="stylesheet" href="'.$widget_url.'/widget.css">';
?>

<head>
  <script type="text/javascript">
  $(function(){
    $('.refresh').click(function(){
       $.ajax({
        type : 'GET',
        url : g5_url + '/thema/Basic/widget/natekeyword/parse1.php',
        dataType: 'text',
        success : function(data) {
            $('.keyword').html(data);
        },
        error : function(request,status,error) {
            alert("Connection failed : code = "+ request.status + " message = " + request.responseText + " error = " + error);
        }
      });
    });
  });
  $(function(){
    $('.refresh').click(function(){
       $.ajax({
        type : 'GET',
        url : g5_url + '/thema/Basic/widget/natekeyword/time.php',
        dataType: 'text',
        success : function(data) {
            $('.refresh').html(data);
        },
        error : function(request,status,error) {
            alert("Connection failed : code = "+ request.status + " message = " + request.responseText + " error = " + error);
        }
      });
    });
  });
  </script>
</head>

<body>
<?php
$wset['cache'] = 100;
echo apms_widget_cache($widget_path.'/widget.rows.php', $wname, $wid, $wset);
?>
</body>


<?php
if (!defined('_GNUBOARD_')) exit;
?>

<head>
<style>
</style>
</head>

<html>
<body>
<div class='myWidget'>
<?php
echo "<p class='nate'>네이트 실검 순위</p>";
include_once($widget_path.'/parse1.php');
include_once($widget_path.'/time.php');
?>
</div>
</body>
</html>


<div class='keyword'>
<?php
function parsenate(){
$json_url = 'https://www.nate.com/nate/LiveKeyword';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $json_url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
return curl_exec($ch);
curl_close($ch);
}
$result = parsenate();
preg_match_all('/\["[\d]{1,2}",\s"(.*?)",\s/', $result, $keyword);
$cnt = 1;
foreach ($keyword[1] as $data) {
    echo "<p><i class='rank'>".$cnt."</i> <a class='no_underline' href='https://search.daum.net/nate?w=tot&DA=1TH&rtmaxcoll=1TH&q=".urlencode($data)."' target='_blank'>".iconv('EUC-KR', 'UTF-8', $data)."</a></p>";
    ++$cnt;
}
?>
</div>


<?php
echo "<div class='refresh'>".date('m/d H:i:s')." <i class='fa fa-refresh'></i></div>";
?>



그럼 답변을 달아주실 분들께 미리 감사드립니다!


점심식사 맛있게 드시고 좋은 오후 되시고 감기 조심하세요 ^-^

작성자
이니스프리 119 Lv. (0%) 1906200/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 4

네모
profile image

굳이 ajax를 쓸 필요가 있을까요?

첫 로딩에도 ajax를 통해 불러올 필요가 전혀 없습니다.

 

parse1.php 에서 나온 데이터를 바로 위젯에 출력시켜 캐싱하고,

실시간 업데이트가 필요한 시기에만 ajax로 요청하면 되니까요.

 

1. 데이터 파싱

2. 파싱된 데이터를 기반으로 위젯에 정보 출력

3. 1분짜리 인터버 생성

4. 인터버에서 ajax로 요청 후 데이터 업데이트

comment menu
2019.03.12. 17:46

신고

"네모님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 네모
profile image

앗 네모 님 안녕하세요? 바쁘신데 조언해주셔서 정말 감사합니다!

파싱 -> 출력 -> 인버터 -> ajax 요청 후 업데이트 이렇게 구성하면 되는군요~

 

일단 말씀해주신 1분짜리 인버터가 무엇인지 좀 더 알아보겠습니다~

(인버터에 대해 구글링해보면 직류를 교류로 바꾸기 위한 전기적 장치에 대한 글만 나오네요 ㅠㅠ)

틈틈이 생활코딩에 있는 ajax 강좌를 들어봐야겠네요!

 

그런데 제가 이해하기로는 제가 작성한 스크립트에서 첫 로딩을 할 때에는

parse1.php에 나온 데이터를 ajax를 거치지 않고 바로 foreach 문의 echo로 위젯에 출력시키고

이걸 apms_widget_cache에서 캐싱하기 때문에

브라우저에서 F5를 눌러도 서버측에서 캐싱된 데이터를 받아오는 것으로 생각했는데

(ajax 버튼을 클릭하는 것과 달리 시간:분:초가 안 바뀌더군요)

아무래도 제가 뭔가 잘못 파악하고 있나보군요 ㅠㅠ

 

그럼 네모 님께서도 편안한 저녁 되시고 저녁식사 맛있게 드세요!

항상 감사드립니다 ^-^

comment menu
2019.03.12. 18:20

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

네모 → 이니스프리
profile image

인버터가 아니라 인터버요! Interval!

comment menu
2019.03.12. 20:48

신고

"네모님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 네모
profile image

허걱.. interval이었군요!! 죄송합니다 ㅜㅜ

찰떡같이 말씀하셨는데 제가 어떻게 이렇게 개떡같이 이해했는지 모르겠네요 ㅠㅠ

그럼 네모 님께서도 굿밤 되세요!! 번번이 감사드립니다~!

comment menu
2019.03.12. 21:05

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 24.02.11.17:21 722
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 23.01.14.02:23 4393
공지 [필독] 질문하는 방법 17 마스터 18.02.23.03:09 4475
925 계속 사용중이던 네트워크 공유 폴더가 갑자기 액세스 불가라고 뜹니다. 6 image 장윤서 18.06.07.16:55 34342
924 팀뷰어 대체할 원격 제어 프로그램 추천 부탁드립니다 16 이니스프리 17.11.30.15:38 32326
923 엑셀 그래프의 축 간격 조절 문제입니다. 2 image 국내산라이츄 17.08.10.11:06 12495
922 아이폰/아이패드 충전기 발열 관련 질문 드립니다 9 image 이니스프리 19.05.02.22:52 11111
921 PyQt 실행시 프리징 현상 관련하여 질문 드립니다! ㅠㅠ 3 이니스프리 19.07.06.03:37 6706
920 에러 523 해결법 4 입체그림 20.02.21.16:48 6705
919 프린터가 지 맘대로 프린트를 하네요. 3 곰도리푸 18.04.04.18:20 6060
918 윈도우용 메일 클라이언트가 필요합니다. 9 네모 18.01.11.20:15 5867
917 크롬에서 특정 사이트 접속 문제 관련하여 질문 드립니다 9 이니스프리 17.03.27.18:03 5325
916 오라클 클라우드 프리티어 가입이 안 되네요 ㅠㅠ 20 이니스프리 20.06.26.21:31 4843
915 파이썬 에디터로 어떤 것이 좋나요? 14 NoYeah 20.01.08.21:08 4534
914 라떼판다와 라즈베리 파이 중 어느 쪽을 사는 게 나을까요? 9 제르엘 18.10.14.19:25 3835
913 나무 위키의 수익구조는 무엇일까요? 2 NoYeah 18.03.18.15:56 3835
912 파티션 복구 프로그램 TestDisk 잘 아시는 분 계시나요? 29 이니스프리 17.11.10.14:53 3748
911 IE11에서 이미지가 깨지는 현상을 해결할 수 있을까요? 2 이니스프리 19.08.02.00:01 3705
910 파일질라로 연결하니까 보안되지 않은 서버입니다. TLS를 통한 FTP를 지원하지 않습니다. 이렇게떠요 해결방안좀 1 마카오 16.09.11.00:57 3657
909 자바스크립트 FormData와 관련된 메서드의 IE 호환성과 관련하여 질문 드립니다 ^^ 6 image 이니스프리 19.08.05.14:22 3433
908 선택약정 안 되는 중고폰의 경우에는 어떤 단점이 있는 것인가요?? 6 이니스프리 20.01.21.14:30 3103
907 [Requests] multipart/form-data의 전송에 대해 질문 드립니다 ^^ 4 이니스프리 19.12.18.22:00 2987
906 집에서 시놀로지 NAS로 워드프레스나 미디어위키 돌리면 느릴까요? 10 이니스프리 17.01.16.20:56 2982