불과 10여 년 전까지만 해도 대학생 과 커뮤니티 100 중 99는 싸이월드 클럽을 사용했습니다. 과연 싸이월드의 전성기라고 할 수 있었죠. 하지만 시대가 변해 SNS가 등장하고 싸이월드가 망하면서 싸이클럽 역시 쇠락의 길로 접어들었습니다. 지금은 대부분의 대학생 커뮤니티가 페이스북을 기반으로 하고 있다고 알고있으며, 일부 카페를 사용한다고 하는데요, 페이스북 그룹의 특징 상 게시물을 카테고리화해서 분류하기가 어렵고, 과거 자료를 열람하는 것이 매우 불편합니다. 그래서 과 커뮤니티를 네이버 카페로 옮기기로 했습니다.
문제는 02년부터 최근까지 10년 넘게 축적된 싸이클럽의 데이터를 어떻게 카페로 옮길 것인가! 였습니다. 만 개가 넘는 게시물을 어떻게 손으로 직접 옮길수는 없고, 프로그램을 이용해야할텐데 딱히 좋은 방법이 없더라구요. 다행히도 예전에 monoless 형님이 만들어 공개하준 싸이클럽 추출기(https://github.com/monoless/cyworld-club-exporter)가 있어서 이걸 포크해서 기능을 개선해서 https://github.com/bab2min/cyworld-club-exporter 를 만들었습니다. node js 기반으로 작성된 코드고, 이를 실행하여 싸이클럽에서 게시물은 JSON 형태로 가져오고 첨부된 파일과 사진을 모두 다운받아 저장했습니다.
이제 네이버 카페에 자동으로 이 게시물을 올려야하는데, 이는 네이버에서 제공하는 카페 API를 이용하기로 했습니다. 사실 카페 API가 좀 부실하긴 합니다. 제공하는게 카페 가입과 글쓰기인데, 글쓰기는 말머리 선택이나 첨부파일 삽입 등이 안되고, 댓글도 달 수가 없습니다. 어쩔 수 없이 게시물 내에 댓글이나 기타 메타데이터 정보를 다 꾸겨넣는 형태로 이전을 하기로 결정했습니다.
네이버 API를 사용하려면 웹 서버가 필요하기에 PHP 위에서 돌리기로 하고 코드를 작성했습니다. 당연히 버전은 PHP 7.0입니다. 따라서 그 이하 버전의 PHP에서는 아래 코드가 정상적으로 작동되지 않을 수도 있습니다.
먼저 인증은 OAuth2.0 방식으로 수행됩니다. 제일 처음 인증을 요청하려면 다음과 같이 하면 됩니다.
<request.php>
request.php에 접속하면 네이버 로그인 창이 연결됩니다. 로그인이 성공하면 해당 앱의 작동을 허용할것인지 물어보구요, 여기서 승락을 하면 callback url로 넘어가게 됩니다.
callback url 측에서는 다음과 같이 처리해주면 되구요.
<callback.php>
넘겨받은 code와 state를 이용해 다시 네이버에 요청해 access_token을 받게 됩니다. 이 access_token이 있어야 카페 API를 비롯한 모든 로그인 API에 접속가능하게 됩니다.
(위의 code들은 네이버 개발자 페이지에서 가져와서 수정했습니다.)
multipart/form-data로 이미지 첨부를 처리하는게 까다롭더라구요. 카페 API를 편리하게 이용하기 위해 클래스를 만들었습니다.
access_token을 이용해 NaverCafe 클래스를 생성하고, write 메서드를 호출해서 카페에 게시물을 작성하는것이죠. write의 파라메터 중 $images는 첨부할 이미지 파일들의 경로를 배열에 넣어주어야합니다. 첨부할 이미지가 없다면 빈 배열을 넣어주면 됩니다.
첨부파일은... 아직 업로드할 방법을 찾아내지 못했네요. 일단 이미지의 비중이 크니 이미지부터 업로드시키고 나중에 생각해보렵니다.
JSON으로 받은 게시물은 MariaDB에 SQL로 입력하고, 첨부 사진/파일들은 서버에 업로드했습니다. 첨부 파일이 3기가가 넘는 관계로 업로드에 4시간이 넘게 걸렸어요... 네이버 카페로 이전된 게시물은 데이터베이스 측에서 체크하도록 하고, 오류가 발생한 게시물은 오류 내용까지 넣어두도록 했습니다.
문제는..... 네이버의 게시물 작성 정책이었는데, 하루에 ID/IP당 게시물 작성 갯수를 200개로 한도를 두었습니다. 그리고 짧은 시간에 더 자주 업로드할수록 제한을 강하게 거는듯하구요. 1만개가 넘는 게시물을 이렇게 업로드하려면 50일이 넘게 걸려요. 또 access_token 만료기한이 1시간이기 때문에 1시간마다 재인증을 해줘야하니, 프로그램을 계속 돌리려해도 하루에 한 번씩, 최소 50번은 재인증을 해줘야하구요. 일단 다중계정으로 해결해보고자 합니다. 과연 이 작업이 언제 끝날지 심히 걱정되긴 하네요...ㅋㅋㅋㅋ
<나의 큰 O는 logx야>라는 블로그 제목의 뜻 (4) | 2017.03.10 |
---|---|
라틴어 사전을 보강하기 위한 소소한 아이디어들 (0) | 2016.07.19 |
성우모바일 코넥티아 M Stylus 키보드 교체 (0) | 2016.07.11 |
코넥티아 M Stylus SSD 교체기 (6) | 2016.06.05 |
태블릿 PC 구매 후기 - 성우모바일 코넥티아 M Stylus (5) | 2016.03.12 |
전역 보고! + 군생활에서 얻을 것들! (2) | 2016.02.11 |
댓글 영역