이번에 개정된 저작권법(이글루스 공지 - 2007년 6월 29일부터 개정된 저작권법이 발효됩니다.)과 관련하여 도대체 어디까지가 문제가 되는지는 잘 모르겠지만, 찜찜하니 embed 된 동영상들을 찾아내서 지우기 위한 프로그램이 필요하였다.
루비로 작업하는 중이었으니 루비로 한번 짜 보자 생각하여 프로그램을 만들어봤다. 루비엔 풋내기라서 거의 발로 짠 수준이다.개선점을 지적해주시면 고맙겠습니다. :)
search.rb
사용법:
문제점:
만드는 데 Custom HTTP/HTTPS GET/POST queries in Ruby를 참고로 했다.
루비로 작업하는 중이었으니 루비로 한번 짜 보자 생각하여 프로그램을 만들어봤다. 루비엔 풋내기라서 거의 발로 짠 수준이다.개선점을 지적해주시면 고맙겠습니다. :)
search.rb
사용법:
- Ruby 실행환경을 구축한다.루비 홈페이지를 참고하자.
- 소스코드를 열어 base 변수를 자기 이글루스 주소에 맞게 수정한다.
- 속도 향상을 위해 이글루스 관리페이지에서 한 페이지에 표시되는 포스트 수를 최대로 설정한다.
- 실행한다. 도스창에서 ruby search.rb 와 같이 입력하거나, search.rb 더블클릭한다.
- 생성된 output.html 을 열어서 확인한다.
문제점:
- 다분히 내 스킨에 맞도록 만들었기 때문에 다른 스킨들에서 제대로 동작하지 않을 가능성이 매우매우 높다. 이 경우, 소스의 title_reg, content_reg, page_reg 부분을 수정하면 된다. 하지만 저 regular expression 을 수정할 실력의 사람이라면 내 소스를 가져다짜는 것 보다 스스로 짜는 것이 더 빠를 꺼야.
- 제대로 동작하는 지 잘 모르겠다. 푸하하하. 못찾아내는 특별한 case가 있을 수도 있다.
- 아무나 남의 egloos에 대해 실행할 수 있으므로 오히려 저작권파파라치(이런 사람이 있나?)의 도구가 될 수도?
- 방문통계에 집착하는 사람의 경우, 통계가 어그러질 수도 있다.
만드는 데 Custom HTTP/HTTPS GET/POST queries in Ruby를 참고로 했다.
require 'net/http'
class PostMetadata
attr_accessor :num , :title
def initialize( num, title )
@num = num
@title = title
end
def to_s()
"<a href=\"#{@num}\" target=\"egloos\">#{@title} </a><br/>"
end
end
#자기한테 맞게 수정하기
base='kingori.egloos.com'
http = Net::HTTP.new(base)
# <h3 class="posttitle"><a name="3272015" title="[영화감상]바람피기 좋은 날">[영화감상]바람피기 좋은 날</a></h3> 으로 제목 가져오기
# <div class="content"> ~ </div> 로 내용 가져오기
# <p class="page"><a href="/page/1">◀ 이전 페이지</a> <a href="/page/3">다음 페이지 ▶</a></p>
title_reg = /<h3 class="posttitle"><a name="(\d+)" title="(.+?)">/
content_reg =/<p class="postadmin">(.+?)<div class="content">(.+?)<\/div>/m
page_reg = / <a href="\/page\/(\d+)">/u
embed_reg = /<embed|<object/i
#array들 초기화
post_data = Array.new
post_content = Array.new
embed_post_data= Array.new
next_page = 1
content_index = 0
#다음 페이지가 나올때 까지 계속
while next_page > 0
#화면을 가져와서
resp, data= http.get( "/page/#{next_page}" , nil )
#포스트 정보를 가져오고
data.scan( title_reg) { |num, title| post_data << PostMetadata.new( num, title ) }
#포스트 내용 중 embed 나 object가 있다면 embed post로 간주한다.
data.scan(content_reg) { |garbage, content|
embed_post_data << post_data[content_index] if content.scan( embed_reg ).size > 0
content_index = content_index+1
}
#다음 페이지 정보를 가져오자. 없으면 -1로 세팅
next_page_info = data.scan(page_reg)
if next_page_info.size > 0
next_page = next_page_info.to_s.to_i
else
next_page = -1
end
end
#결과 저장
File.open("output.html", "w") { |file|
file << "<html><base href=\"http://#{base}\"><meta http-equiv='Content-type' content='text/html; charset=utf-8' />"
embed_post_data.each{|item|
file << item.to_s
}
}



덧글