Silphire (7255) の日記

2002 年 03 月 13 日
午前 01:22

改良版・日記の取得スクリプト

#!/usr/bin/ruby -Ke

require 'net/http'

# HTMLを取得
def gethtml(server, path)

  # 初期化
  s = ""
  Net::HTTP.version_1_2

  Net::HTTP.start(server, 80) do |http|
    res , = http.get(path)
    return res.body
  end
end

# URLをサーバ部とパス部に分ける
def urlparse(url)
  /http:\/\/(.*?)(\/.*$)/ =~ url
  [$1, $2]
end

JOURNAL_START = /<!-- start template: ID (\d+), journallist;journal;default -->/
JOURNAL_PATTERN = /<TD VALIGN=.*?><A HREF="(.*?)"><B>.*?<\/B><\/A><\/TD>/

# 日記を取得
def getjournal(url, name)
  server, path = urlparse(url)
  html = gethtml(server, path)

  # ファイルに保存
  /&id=(\d+)/ =~ url
  name = $1 + '.html'
  file = open(name, "w")
  file.write(html)
  file.close
end

# 日記のリストを取得
def getlist(uid)
  # html取得
  server, path = urlparse("http://srad.jp/journal.pl?op=list&uid=#{uid}")
  html = gethtml(server, path).gsub(/\s+/m, ' ')

  # リストの手前まで移動
  JOURNAL_START =~ html
  html = $'

  if html == nil
    print "ごめん。このユーザはまだ日記を書いてないようです。\n"
    exit
  end

  # リストから日記を取得
  html.scan(JOURNAL_PATTERN) do |s|
    url = s.shift.gsub(/&amp;/, '&')

    # ファイルが存在していなければ取得
    /&id=(\d+)/ =~ url
    name = $1 + '.html'
    unless File.exist? name
      print url, "\n"
      getjournal(url, name)
    end
  end
end

if ARGV.empty?
  print "Usage: #{$0} [user ID]\n"
  exit
end

uid = ARGV.shift

# uidのディレクトリを作成
Dir.mkdir(uid) unless FileTest.exist?(uid)
Dir.chdir(uid)

# 日記取得
getlist(uid)
Dir.chdir('..')
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

処理中...