tDiary squeeze の出力を使って LiveSpace に引越し

tDiary squeeze が出力したHTMLから、各セクション別のファイルを作成する Ruby スクリプト。出力先である /var/tmp/td はあらかじめ作っておく。

テスト時は1ファイルだけ指定していたが、最終的には cd [squeeze出力ディレクトリ]; find . -type f | ruby tDiarySplitter.rb で起動した。

#!/usr/local/bin/ruby
require 'kconv'

class TDiarySplitter
  TARGETDIR = "/var/tmp/td"
  def initialize(filename)
    @filename = filename
  end

  def process
    @targetfile = @filename.sub(/^\.\//, "").gsub(/\//, "_")
    @targetpath = "#{TARGETDIR}/#{@targetfile}"
    File.open(@filename, "r") { |rfp|
      processOneFile rfp
    }
  end

  def processOneFile(rfp)
    @wfp = nil
    @sectionNumber = 0
    rfp.each { |line|
      if (line == "</div><div class=\"section\">\n") # for tDiary Style
        processOneLine "</div>\n";
        processOneLine "<div class=\"section\">\n"
      else
        processOneLine line
      end
    }
    if @wfp != nil
      @wfp.close
      @wfp = nil
    end
  end

  def processOneLine(line)
      if (line == "<div class=\"section\">\n")
        @sectionNumber += 1
        return
      end
      if line =~ /^<h3><a name=\"p(\d+)[^\>]*\>(?:<span[^\>]*\>[^<]*\<\/span\>[^\<]*\<\/a\>)?\s*(?:\[\<a href[^\>]+\>([^<]+)\<\/a\>\])*\s*((?:<a href[^\>]+\>([^<]+)\<\/a\>)?.*)\<\/h3\>\s*$/
          secnum = $1.to_i
          category = $2
          title = $3
          deanchortitle = $4
          if (secnum == @sectionNumber)
            dateCreated = "#{@targetfile}_#{secnum}"
            @wfp = File.open("#{@targetpath}_#{@sectionNumber}", "w")
            @wfp.puts "dateCreated: #{dateCreated}"
            if (deanchortitle != nil)
              @wfp.puts "title: #{deanchortitle.kconv(Kconv::UTF8, Kconv::EUC)}"
            elsif (title != nil)
              @wfp.puts "title: #{title.kconv(Kconv::UTF8, Kconv::EUC)}"
            end
            if (category != nil)
              @wfp.puts "category: #{category.kconv(Kconv::UTF8, Kconv::EUC)}"
            end
            @wfp.puts
            if (title != nil)
              @wfp.puts "<h3>#{title.kconv(Kconv::UTF8, Kconv::EUC)}</h3>"
            end
          end
          return
      end
      if (@wfp != nil)
        if (line == "</div>\n")
          @wfp.close
          @wfp = nil
        else
          strutf = line.kconv(Kconv::UTF8, Kconv::EUC)
          @wfp.write(strutf)
        end
      end
  end
end

  #  strutf = streuc.kconv(Kconv::UTF8, Kconv::EUC)

ARGV.each { |arg| TDiarySplitter.new(arg).process }

上記スクリプトで出力したファイルを Live Space に投稿する Ruby スクリプト。cd /var/tmp/td; find . -type f | ruby postSplitted.rb で起動した。

#!ruby
require 'xmlrpc/client'

class PostSplitted  
  def initialize
    uri = "https://storage.msn.com/storageservice/MetaWeblog.rpc"
    client = XMLRPC::Client.new2( uri )
    client.http.ca_file = "/usr/local/share/curl/curl-ca-bundle.crt"
    client.http.verify_mode = OpenSSL::SSL::VERIFY_PEER
    client.http.verify_depth = 5
    @metaWeblog = client.proxy("metaWeblog")
    @username = "kamiyn"
    @password = "********"
  end

  def process(filename)
    inheader = true
    title = "no title"
    dateCreated = nil
    categories = []
    description = ""
    File.open(filename, "r") { |fp|
     fp.each { |line|
      if (inheader)
        if (line == "\n")
          inheader = false
          next
        end
        if (line =~ /^dateCreated: (\d+)_(\d\d)(\d\d)_(\d+)/)
          dateCreated = XMLRPC::DateTime.new($1.to_i, $2.to_i, $3.to_i, $4.to_i, 0, 0);
        elsif (line =~ /^title: (.*)\s*$/)
          title = $1
        elsif (line =~ /^category: (.*)\s*$/)
          categories.push($1)
        end
      else 
        description += line
      end
     }
    }

    if (dateCreated != nil)
      begin
        blogid = "MyBlog"
        publish = true
        result = @metaWeblog.newPost blogid, @username, @password, {'title'=>title, 'description'=>description, 'dateCreated'=>dateCreated, 'categories'=>categories}, publish
        p result
        File.delete(filename)
      rescue XMLRPC::FaultException => e
        puts "fault #{e.faultCode}: #{e.faultString}"
      end
    end
  end
end

postSplitted = PostSplitted.new
ARGV.each { |filename| postSplitted.process(filename) }

tDiary squeeze の出力を使って LiveSpace に引越し」への3件のフィードバック

  1. Unknown より:

    wow gold!All wow gold US Server 24.99$/1000G on sell! Cheap wow gold,wow

    gold,wow gold,Buy Cheapest/Safe/Fast WoW US EU wow gold Power leveling wow gold from the time you World of Warcraft gold ordered!

    wow power levelingcheap wow power leveling wow power leveling cheap

    power leveling wow power leveling wow power leveling -13866493644755

  2. Unknown より:

    Amberdigital Branch,Southern Stars Enterprises Co is specializing in the development and manufacturing of advertising displays, advertising player and LCD displays. Established in 1996, we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers.

    amberdigital Contact Us
    Southern Stars Enterprises Co (Hong Kong Office)
    Add:3 Fl, No.2, Lane 2, Kam Tsin Tsuen, Sheung Shui, Hong Kong
    Tel:+852 2681 4099
    Fax:+852 2681 4586
    Southern Stars Enterprises Co (Shenzhen Office)
    Add:DE, 16/F, Building 2, Nanguo Tower, Sungang Road, Shenzhen, China
    Tel:+86 755 2592 9100
    Fax:+86 755 2592 7171
    E-mail:sstar@netvigator.com
    website:www.amberdigital.com.hk
    alibaba:amberdigital.en.alibaba.com[dbfifaah

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。