티스토리 알리미 문제 해결 및 패치 by 도아
장점 많은 알리미
텍스트큐브가 가진 장점 중 하나는 바로 다른 블로그에 댓글을 단 뒤 다시 댓글이 달리면 바로 확인할 수 있는 "댓글 알리미 서비스"이다. 이 기능은 모든 블로그 도구에 표준적인 방법이 도입됐으면 하는 기능이기도 하다. 그런데 얼마 전 부터 "댓글 알리미 기능이 동작하지 않는다"는 보고가 있었다. 당시 티스토리로 트랙백이 가지 않아 이 문제를 해결하는 글을 올렸는데 알리미 역시 같은 문제로 생각했다.
장점 많은 알리미
텍스트큐브가 가진 장점 중 하나는 바로 다른 블로그에 댓글을 단 뒤 다시 댓글이 달리면 바로 확인할 수 있는 댓글 알리미 서비스이다. 이 기능은 모든 블로그 도구에 표준적인 방법이 도입됐으면 하는 기능[1]이기도 하다. 그런데 얼마 전 부터 "댓글 알리미 기능이 동작하지 않는다"는 보고가 있었다. 당시 티스토리로 트랙백이 가지 않아 이 문제를 해결하는 글을 올렸는데 알리미 역시 같은 문제로 생각했다.
희한한 문제
따라서 이 문제에 대한 해결책 역시 이미 제시한 것과 마찬가지다. 그러나 PHP 코드를 모르는 사람은 해결하는 방법을 알아도 실제 파일을 찾아 패치하는 것은 힘들기 때문에 오늘은 티스토리의 알리미 문제를 해결하는 패치를 올리도록 하겠다. 같은 문제이기 때문에 해결하는 방법도 거의 비슷하고 소스도 거의 비슷하다.
- 좋아하는 편집기(예: Editplus)로
library/model/blog.comment.php
라는 파일을 연다. 이 파일의 가장 끝 부분에 다음 함수를 추가한다.
function commentTistory ($query, $host, $port=80, $timeout=10) { $socket = fsockopen($host, $port, $errno, $errstr, 10); fwrite($socket, "$query\r\n"); $res=fread($socket, 10240); fclose($socket); return $res; }
함수를 보면 알 수 있지만 희한한 티스토리 트랙백 문제 해결 및 패치에서 사용한
trackbackTistory
을 호환을 위해 이름만commentTistory
로 바꾼 것이다.notifyComment 함수에서
if (strpos($parentComments['homepage'], "http://") === false) { ... } else { ... }
문 바로 아래에 다음 내용을 추가한다.$request = @parse_url($homepage); $tistory_host=$request['host']; $tistory_port=$request['port']; $tistory_path='/'; $query="GET ".불tistory_path." HTTP/1.1\r\nHost: ".불tistory_host."\r\nConnection: Close\r\n\r\n"; $res=commentTistory($query, $tistory_host); if(preg_match("/Location: ([^\r\n]*)\r\n/is", $res, $match)) { $query="GET ".불match[1]." HTTP/1.1\r\nHost: ".불tistory_host."\r\nConnection: Close\r\n\r\n"; $res=commentTistory($query, $tistory_host); }
내용을 보면 알 수 있지만 희한한 티스토리 트랙백 문제 해결 및 패치와 마찬가지로 실제 코멘트 핑을 보내기 전에 세션 코드가 붙은 URL을 먼저 요청함으로서 댓글 알리미가 정상적으로 동작하도록 한 것에 불과하다.
알리미가 보낸 댓글
블로그에 단 댓글과 알리미가 보낸 댓글을 보면 알 수 있지만 패치하기 전에 단 "와 이런 글을 쓰노?"라는 댓글은 티스토리의 댓글 알리미가 나타나지 않지만 그 뒤에 올린 "잘 되나요?"(블로그 주소(https://offree.com/))라는 글과 "진짜로 잘될까요?"(블로그 주소(https://offree.net/))라는 글은 티스토리 알리미에 나타나는 것을 알 수 있다.
- 전자우편으로 알려 주기도 하고 다른 서비스를 이용하면 댓글을 추적하는 것도 가능하지만 역시 불편하다. 따라서 이 기능도 트랙백처럼 표준화됐으면 하는 생각이다. ↩