egloos 포스트 중 embed 들어간 포스트 골라내기 프로그램 콤퓨타

이번에 개정된 저작권법(이글루스 공지 - 2007년 6월 29일부터 개정된 저작권법이 발효됩니다.)과 관련하여 도대체 어디까지가 문제가 되는지는 잘 모르겠지만, 찜찜하니 embed 된 동영상들을 찾아내서 지우기 위한 프로그램이 필요하였다.

루비로 작업하는 중이었으니 루비로 한번 짜 보자 생각하여 프로그램을 만들어봤다. 루비엔 풋내기라서 거의 발로 짠 수준이다.개선점을 지적해주시면 고맙겠습니다. :)
search.rb

사용법:
  1. Ruby 실행환경을 구축한다.루비 홈페이지를 참고하자.
  2. 소스코드를 열어 base 변수를 자기 이글루스 주소에 맞게 수정한다.
  3. 속도 향상을 위해 이글루스 관리페이지에서 한 페이지에 표시되는 포스트 수를 최대로 설정한다.
  4. 실행한다. 도스창에서 ruby search.rb 와 같이 입력하거나, search.rb 더블클릭한다.
  5. 생성된 output.html 을 열어서 확인한다.


문제점:
  1. 다분히 내 스킨에 맞도록 만들었기 때문에 다른 스킨들에서 제대로 동작하지 않을 가능성이 매우매우 높다. 이 경우, 소스의 title_reg, content_reg, page_reg 부분을 수정하면 된다. 하지만 저 regular expression 을 수정할 실력의 사람이라면 내 소스를 가져다짜는 것 보다 스스로 짜는 것이 더 빠를 꺼야.
  2. 제대로 동작하는 지 잘 모르겠다. 푸하하하. 못찾아내는 특별한 case가 있을 수도 있다.
  3. 아무나 남의 egloos에 대해 실행할 수 있으므로 오히려 저작권파파라치(이런 사람이 있나?)의 도구가 될 수도?
  4. 방문통계에 집착하는 사람의 경우, 통계가 어그러질 수도 있다.


만드는 데 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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 = /&nbsp;&nbsp;&nbsp;<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
  }
}



트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://kingori.egloos.com/tb/3273922 [도움말]

덧글

덧글 입력 영역