MT 3.2 에서 일괄 스팸 지우기 
dusl님이 스팸트랙백을 무려 16000여개나 선물받으셨다는 코멘트를 보고, 어떻게 조금이라도 덜 지루하게 지울수 있을까...궁리를 해봤습니다.
간단한 테스트도 해 보았기에 로깅합니다. 이건 결국 "삭제"를 하는 것이라, 자칫 스팸이 아닌 트랙백도 삭제될 "가능성"이 없지 않기에 조금 조심스럽습니다만, 일단 러프하지만 가능한 방법이기에 소개합니다.
1. 블로그의 System Overview의 플러그인 메뉴에서 SpamLookup의 Link와 Lookups는 Disable시킵니다. 비활성시키는 이유는 머 꼭 그래야는 건 아니고, 이 3놈들이 다 같이 작동해서 매긴 각각의 점수를 평균한게 스팸지수가 되는데, 이럴 경우 스팸이 아닌 놈도 점수를(그것이 가던 부던) 받기때문에, 스팸처리시에 그 기준값산정이 좀 까리할수 있기때문입니다. 그래서 그냥 Keyword Filter만 사용하게 일단 설정합니다.2. 그리고 들어온 스팸 트랙백의
면면을 대충 봐서, 적당한 키워드를 골라냅니다. casiono 등이 예가 되겠죠. 그리고 이 값을 "블로그 레벨"의 플러그인 메뉴의 Keyword Filter에 입력합니다.
3. 그런데 이때 설정한 키워드는 설정 이후에 들어온 피드백에 대해서만 작동을 합니다. 이미 들어와 있는 피드백은 적용되지 않습니다.
4. 텔넷으로 서버에 접속해서 mt/tools 폴더로 가서 $ cp find-junk remove-junk로 복사를 합니다.
5. vi remove-junk 를 해서 약간 수정을 해줍니다.
use lib 'lib', '../lib', '../extlib';
use MT::Bootstrap;
*1. use strict; 위에 위 두줄을 삽입합니다.
sub display_junk { 부분을 찾습니다.
sub remove_junk {
my ($obj) = @_;
$obj->remove;
print "\n", $obj->id, " removed.";
}
*2. sub display_junk { 함수 위에 remove_junk 함수를 삽입해 줍니다.
*3. 마지막으로 그 바로 위에 display_junk($subject); 라고 호출하는 부분을 잠시 #로 막고 대신에 remove_junk($subject); 를 삽입합니다.
6. mt/tools 밑에서 $perl remove-junk --nocomments라고 실행합니다. 그럼 MT메뉴상에서 스팸 키워드로 설정한 값을 본문에 가지는 트랙백을 모두 삭제합니다. 이때 이것은 데이터베이스 상의 트랙백정보만 삭제하는 것입니다. 다 삭제된 후에, 리빌드 한번 해주면 끝입니다. 불필요한 트랙백정보가 삭제되었기에 리빌드가 그리 금방 될것입니다.
기본적으로 Spam Threshold가 0으로 세팅되어 있습니다. 다른 두가지 스팸 플러그인이 꺼진 상태에서 키워드로만 필터링할때, 입력한 키워드를 가진 트랙백은 -1 점을 받습니다. 그럼 이놈은 정크로 판단됩니다. 하지만 이미 세팅전에 받은 트랙백이라 MT 메뉴내에서는 어찌 소급해서 적용시키질 못합니다. 이 스크립트를 이용하면 받은 트랙백 정보를 뒤져서 MT에서 설정한 기준값에 따라 정크인 놈만 골라서 삭제를 하게 됩니다. 그후 리빌딩하면 되는겁니다.
먼저 조금 사용에 자신이 없다면 테스트를 좀 해보신후 실제 대상 블로그에 적용하십시요,
사전 테스트 방법
1. 블로그를 하나 테스트 용으로 만듭니다.
2. 엔트리를 하나 적습니다.(트랙백 가능하게 설정한 후)
3. 그 엔트리의 트랙백 주소로 자기 자신한테 보냅니다. 당연히 자신의 엔트리에 그 트랙백이 붙은걸 확인합니다.
4. System Overview의 플러그인 메뉴에서 Link/Lookup은 비활성, Keyword만 켜둡니다.
5. 테스트 블로그의 Keyword 플러그인 정크 키워드 창에 특정 단어를 하나 적어줍니다. casino라고 가정합니다. 기본적으로는 online-?casiono가 입력되있습니다. 이 경우 casino 만의 단어는 해당안됩니다. 그래서 예로 그냥 casino만 적고 저장합니다. 즉, 받은 피드백에 casino라는 단어가 있으면 정크 취급하겠다는 소립니다.
6. 다시 처음 만든 엔트리의 본문에 casino라는 단어를 다른 단어와 띄워서 추가수정후 자신의 트랙백 주소를 넣고 저장합니다. 그럼, 다시 자기한테 트랙백을 보내게 됩니다.
7.그런데 이때 자기 자신한테 보낸 엔트리는 casino를 포함하므로 스팸지수가 -1을 받습니다. 그리고 설정-피드백 메뉴에서 스팸지수가 0으로 기본적으로 설저오디어 있으므로, 이 트랙백은 정크로 취급되서 정크폴더로 갑니다. 이건 우리가 원하는 테스트 환경이 아닙니다. 즉, 우리는 이미 받은, 그래서 실제로 정크지만 정크로 취급받지 않은 기존의 트랙백을 제거할 요량이므로,
8. 테스트 블로그의 설정-피드백에서 스팸 기준값을 -2정도로 정합니다. 그럼 casino한단어를 가진 트랙백은 -1점을 받아서 정크로 취급되지 않습니다. 그 후에 다시 자기자신한테 트랙백을 보냅니다.
9. 트랙백 메뉴에 가서 보면 이번에 처음 보낸 트랙백은 정크 폴더에, 나중에 보낸건 그냥 폴더에 있는걸 알수 있습니다.
10. 이제 텔넷 환경에서 아래 명령을 실행해 봅니다.
$ cd mt/tools
$ perl remove-junk --blog_id 그테스트블로그ID --nocomments
(테스트 블로그만 찾아지우고, 피드백 중에 코멘트는 검사하지말라는 뜻입니다)
그런후 MT메뉴의 트랙백 리스트를 보세요. 정크 폴더의 트랙백은 그대로 있고, 정크인테 정크로 취급되지 않은 놈만 삭제되어 있을겁니다.
이렇게 좀 감을 잡은 후에, 테러현장으로 가면 됩니다.
급히 기존의 find-junk라는 스크립트를 보고 궁리한거라 치밀하지 못합니다. 원 스크립트에 추가하는 부분이 robust하지 못하고 임시변통의 기본기능만 하는 겁니다. 그래도 제가 테스트해보니 됩니다. 원래 이 find-junk가 이미 정크로 딱지붙은 피드백은 취급대상이 아니라 좀 아쉽습니다. 제가 좀 정신이 지금 없어서 그부분까지 처리하도록 손볼(능력은 안되지만, 일단 시도라도) 엄두가 안나서, 일단 find-junk의 기본 루틴을 그대로 이용했습니다.
이걸 돌려서 만만한놈 제거하고, 또 제거하고...쭉 한 후에, 마지막에 한번 리빌딩해주면 됩니다. 키워드도 점차 추가하면서 한번/두번 계속 명령을 반복해도 되겠죠....
키워드 선정을 느슨하게 해서 엄한 정상적인 트랙백을 삭제하게 되더라도 전 "책임"이 없음을 미리 밝힙니다. ^^ 충분히 테스트 블로그 상에서 익숙해진후에 사용하십시요.
Comments
에러메세지가...
use of uninitialized value in split at ...../lib/spamlookup.pm line 467
이라고 나와요 >.
Posted by dusl , 2005년 08월 31일 새벽 2:29
잘 되면 좋겠는데 잘 안되요 ㅠ.ㅠ
display_junk 만 켜놓으면 뭔가 잘 돌아간다는 느낌이 나는 화면이 junk 판정받은 엔트리가 죽죽 표시되는데요. remove_junk 를 켜놓으면, 정지. 두 개다 켜놓으면 첫번째 엔트리가 display 된 후에 정지. 이런 상황입니다. :(
Posted by dsl , 2005년 09월 1일 새벽 2:27
진행상황을 보고 드립니다.
1. 전체리빌드를 하고 엔트리를 하나하나 조회하면서 체크해본 결과, keyword 설정 후 junk 의 자동삭제 기능이 작동한탓인지, 작동안되는 것 처럼 보이던 remove_junk 가 실은 작동을 한 탓인지, 아니면 find_junk 와 junk 자동삭제기능의 합동작전 때문인지, 실제로 publish 되어 문서에 표시되어있는 스팸트랙벡은 현재 하나도 없습니다. (그 과정에서 스팸이 아닌 것도 삭제되었는지 어떤지는 잘 모르겠는데, 삭제되었다 하더라도 괜찮습니다)
2. 그런데 db 에 문제가 생기긴 생긴 것 같습니다. 관리자 화면 메인/트랙백관리화면 상에는 트랙백이 여전히 7천여개로 나타나고 있고요. junk트랙백 탭은 그런데 깨끗합니다. 트랙백관리탭으로 들어가면 화면상 표시되는 트랙백은 19개밖에 없는데도 아래쪽에 카운팅은 7000개라고 되있습니다.
3. 실제로 remove_junk 를 display_junk 함수로 돌려보면 수많은 junk 들을 검색해냄에도 불구하고요. db상엔 존재하는데 MT 가 못읽어들이는 게 있는 듯 해요. 한 7천개정도-_-;;;
4. 테스트겸(-_-) 새로 블로그를 하나 만들어서 본블로그를 export 한 파일을 import 한 후에, 새로 만든 블로그를 삭제했는데요.
http://dusl.x-y.net/wp-content/images/mtdbweck.gif
이렇게 되버렸습니다 :(
5. 지금 기분은 db를 싹 지워버리고, MT 새로 깔고 예전 archive 폴더만 살려두고 싶은 심정입니다.
Posted by dusl , 2005년 09월 1일 오후 1:48
아, 그런데 또 꼭 그런건 아니네요. 어떻게 돌아가는 건지 잘 모르겠어요 ㅠ.ㅠ
1. 트랙백관리자화면의 트랙백리스트에는
publish 된 19개의 정상트랙백이 표시되고
아래쪽에 카운팅은 7000으로 표시되고 있습니다.
2. 트랙백관리자화면의 junk 리스트에는
아무것도 없습니다.
3. 블로그에서 보기에는 스팸트랙백은 하나도
publish 되 있지 않고 깨끗합니다. html 문서는 깨끗.
4. 각 엔트리의 edit 화면에는 스팸트랙백이
pading 상태로 있습니다. (이런것들의 합이 7천개가
되는듯합니다.)
- 그래서 현재, pading 상태의 트랙백들을 삭제하려면
각각 엔트리를 하나씩 edit 하는 방법이 남아있습니다.
- 그와는 별도로 위에 (4)번 문제가;;;;
Posted by dusl , 2005년 09월 1일 오후 2:02
말씀하신 증상을 곰곰히 따져보니, 일단 첫번째 문제는 이해가 됩니다.정크트랙백을 지울때, 그냥 트랙백정보만 지운게 문제의 발단인거 같습니다. 즉 트랙백정보는 따로 테이블에 관리되고, 그 정보를 가리키는 링크정보(?)가 엔트리에도 하나 있고, 블로그정보테이블에도 하나 잇고..머 그런거 같은데, 그냥 트랙백만 쏙 지우니까, 트랙백 메뉴로 들어가면 안나타나고, 엔트리로 가면 나타나고...물론 실제 엔트리에 있는 트랙백은 정황상 트랙백테이블에는 없고, 그 제목 정도의 정보만 담고 잇는 그런 상황같습니다.
두번째 임포팅/익스포팅의 문제는...비정상적인 작동의 원인을 볼때 딱히 생각나는게 없으니 이또한 스크립트때문이 아닐까 싶습니다. 다만 그렇게 나타나는 메카니즘은 떠오르지 않네요..
어쨋거나 급하게 서두르다 깊게 따지지못하고 만들어서 이런 문제가 생긴거 같습니다. 너무 죄송합니다.
일단 해결책을 생각해보면...
익스포팅하면 코멘트/트랙백은 펜딩된 것은 나가지 않는거 같습니다. 즉 퍼블리시된 피드백만 익스포팅되므로 새로운 블로그에 옮기면 펜딩트랙백을 지우는 효과를 가져올거 같습니다.
문제는 그런 시도가 무슨 이유로 좀 이상하게 나타나는건데,,, 이렇게 한번 해보십시요.(--;;;)
엠티 인스턴스를 새로 하나 만드는겁니다. MT-3.2.tar.gz를 푸시고 이것을 mt2로 새로 폴더를 만드시는겁니다. 그러면 이 mt2/밑은 전혀 별개의 독립적인 새론 블로그가 됩니다. mt2/db정도를 디비폴더로 만들고 설정하시고 mt.cgi여시면, First Blog만 있는 빈 블로그가 생기니, 이곳에서 처음에 익스포트한 데이터를 받으시면 지금같은 일종의 "간섭"효과가 없이 될것 같습니다.
이때 조금 주의하실건 첫번째로 익스포팅한 그 파일에 잘못해서 지금 중복적으로 2배로 불어난 상황의 블로그에서 다시 기존의 파일에 덮어서 익스포팅하지 마시란겁니다. 그럼 중복된 두개의 엔트리가있는 데이터가 되니 좀 골치아파지죠.
그리고 문제없이 되면 기존의 mt/를 mt-bak정도로 이름을 바꿔서 당분간 보관하구요...
이런 방법의 경우 하나 문제는 개인적으로 만든 템플릿은 옮겨가지 않는 다는 것입니다. 물론 이것은 그냥 두개 띄워두고 블럭복사로 하셔도 되구요. 아니면 템플릿의 link this to file이걸 이용해서 별도의 파일에 템플릿을 저장하고, 새론 블로그에서 이걸 불러도 되지만 실제 작업은 더 귀찮겠네요...
제가 지금 3.2용으로 메뉴/메시지 등 하여튼 MT내에서 영어로 나타나는(메뉴얼제외) 한 2000라인 이상의 한글화를 거의 다해가고 있거든요. 그리고 MT3.2에서 강화된 Cool(or Smart)URL이 한글에서도 문제없이 되도록하는 플러그인도 만들고 있구요. 머 기타등등 제가 지금껏 만들었던 모든 핵/플러그인을 3.2로 바꾸고 있습니다. 그래서 좀 정신이 없는 상태서 철저한 분석없이 그냥 이러면 지워지겠구나..해서 만들고 지워진것만 보고 알려드린건데요...에귱.
만약 여전히 MT를 사용하실 생각이시면 본격적인 3.2로의 완전한 포팅은 제가 공개한 후에 하시는것도 괜찮지 않을까 싶습니다. 한 한두달(?)정도...너무 오래간요? 물론 그 이전에 공개할수도 있구요.
완벽하지 못한 방법을 갈쳐드려서 너무 죄송합니다. --;;;
Posted by 알록블록 , 2005년 09월 1일 오후 5:36
아니에요 ^^, 알록볼록님 가르쳐주시기 전부터 제껀 뭔가 좀 이상했어요-_-; 제가 업그레이드 하면서 막 이것저것 건드리고 트랙백처리하면서 너무 느려서 껐다켰다, 블로그삭제할 때도 진득하니 못기다리고 오도방정을 떨어서 그런 거랍니다 ㅠ.ㅠ
음, 새로 MT 깔아서 import 한다음에... 그걸 그냥 계속 쓰면 원래블로그랑 연결이 안되지 않나요? 새로 다른 디렉토리에 MT 를 깔아서 데이타만 받아서 하는 건 아예 주소도 다 달라지고 하는데...
그러니까, import 한다음에 db를 저장하고, db 파일을 원래 블로그 디렉토리에 덮어씌우면 될까요? ... 그렇게 해도 db 넘버는 중간에 삭제하고 한것들이 있어서 import 한거랑 순서가 달라지면 리빌드했을때 파일이름이 예전이랑 다르게 될 것 같고... 그럴거라면,
그냥 벡업받아놓구 싹지우고 새로 하나 만드는거랑 어떤차이가 있을까요...(그말이 그말인지도-_-)
기왕이면 MT 계속사용하고 싶어요. 템플릿이랑 스타일시트 구성이나 이용하는게 너무 잘되있고, 익숙해져서... 걍 안되면 어짜피 다른 툴을 쓰느니 확 밀고 새로하나 만들어도 될 것 같아요 +_+
그나저나 바쁘신데, 자꾸 귀찮게 해드려서 죄송한 마음뿐입니다.
Posted by dusl , 2005년 09월 1일 오후 6:38

#!/usr/bin/perl -w에서 -w를 제거하고 해보세요.
에러는 아니고 약한 수준의 경고입니다. 프로그램 수행이랑은 전혀 상관없는 메시지입니다.
Posted by 알록블록 , 2005년 08월 31일 오후 3:21