자바스크립트로 만들어 보도록 할거야

요소 검사 들어가면 실행할 수 있고, 비동기 HTTP 요청도 되고, 비교적 쉬운 등 장점이 많기 때문이지


1. 관찰: 검색을 해보고 주소변화를 관찰해보자


일단 글쓴이가 goes인걸 검색해보면

http://gall.dcinside.com/board/lists/?id=programming&s_type=search_name&s_keyword=goes

이거잖아


각 페이지는 page=페이지수 로 되고

모든 페이지를 불러오려면 페이지에서 >>다음 표시가 없을때까지 계속 열람하면 되겠지


또 과부하를 막기 위해서인지 있는 다음검색> 기능도 있는데,

다음검색을 누르면 주소가 이렇게 바껴.


http://gall.dcinside.com/board/lists/?id=programming&page=1&search_pos=-706751&s_type=search_name&s_keyword=goes


search_pos=-706751이 추가되었고 page=1이 추가되었지?

페이지는 원래 1이였으니 요청할때 앞에거만 잘 붙여주면 될거야


2. 구현: jQuery, JavaScript

js는 기본적으로 비동기 요청이 되니까, 대충 이렇겠네


function 요청(page, search_pos) {

  $.get {id: '갤러리이름', s_type: 'search_name', 's_keyword': '닉네임'}

  콜백 {

    1. 다음검색>의 page 1 요청(1, new_search_pos)

    2. 현재 표시되어있는 페이지 번호들 전부 요청(new_page, search_pos)

    3. 다음 > 링크에 있는 페이지 요청(new_page, search_pos)

    4. 현재 페이지 안에 있는 모든 글 번호에 대해 글삭제(글번호)

  }

} 


function 글삭제(글번호) {

  일단은 글 번호만 로깅하는걸로 하자

}


일단 dcinside에는 jQuery를 쓰고있으니 그걸 잘 이용해보면 되겠군

소스는 개 길지만 사실 그냥 노가다일 뿐이야


function request(page, pos) { $.ajax({ type: 'get', // GET 메서드 dataType: 'html', // 응답을 HTML로 파싱 url: '/board/lists/', headers: { 'X-Requested-With': '?' }, data: { id: 'programming', // 갤러리 이름 s_type: 'search_name', // 글쓴이 검색 s_keyword: 'goes', // 내 닉네임 search_pos: pos, // 다음검색 page: page // 페이지. 인자로 들어옴 } /* 참고로 이렇게 넣으면 알아서 주소에 인코딩되서 들어감 */ }).success(function(data) { // 자 이제 jQuery를 받아온 응답에 대해 다룬다 // DOM 개체가 그대로 들어오기때문에 $()로만 싸면 그냥 평소에 하듯이, 대신 .find만 붙여주면 됨 if (!data) // 이건 디시에서 너무 빠르게 요청하면 막는거라서 대충 요청 다시하면 되는듯 return setTimeout(request, Math.random() * 30000, page, pos) var next_page_group, next_pos; var $document; $document = $(data); $document.find('#dgn_btn_paging a').each((x, y) => { var $this = $(y); var href = new URLSearchParams($this.attr('href')); if ($this.hasClass('b_next')) { var text = $this.find('.arrow_1').text().trim(); if (text == '다음') next_page_group = href; // 3-1 if (text == '다음검색') next_pos = href; // 1-1 } else if ($this[0].className == '') { request(href.get('page'), pos) // 2 } }) $document.find('td.t_subject a:last').each((x, y) => { var $this = $(y); var href = new URLSearchParams($this.attr('href')); if ($this.find('b').length) return; // 공지글 delete_article(href.get('no')) // 4 }) if (next_page_group) request(next_page_group.get('page'), pos); // 3-2 if (next_pos) request(1, next_pos.get('search_pos')) // 1-2 }) } function delete_article(no) { console.log(no); } request(1, 0);


일단 delete_article은 콘솔에 글 번호만 로깅하는것으로 남겨놨어

실행해보자. 로그가 남으면 정상이겠지


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427b28b77a16fb3dab004c86b6fdc843afe757eec57b07102ec3efadaa9f87c19e9fb5e400eaf8033bceb69164ed7022326922c4da6a6fdf1b7d496837183


남네

이제 글 지우기를 봐야겠지


글 지우는건 다음편에 남길테니 다음편에는 풀 코드가 올라오겠군