Skip to content
miyohide edited this page Jan 8, 2014 · 3 revisions

るびま編集に有益なスクリプトを記しています。

注意

ファイルをアップロードするスクリプト内のIDPASSWORDの値は適切なものに置換してください。

編集指針チェック

るびまのGitHubリポジトリにあるtools/rubima-lint.rbを使用してください。

各号表紙から目次を作るスクリプト

るびまのGitHubリポジトリにあるtools/mokuji.rbを使用してください。

#
# ruby upload.rb [page_name] [files...]
#

UploadURL = 'http://wiki.fdiary.net/.RubiMa/attach.cgi'
ID        = 'NEED_CHANGE'
PASSWORD  = 'NEED_CHANGE'

###

require 'net/http'
require 'uri'
require 'base64'
require 'kconv'

Net::HTTP.version_1_2

class MultiPart
  def initialize
    @boundary = '----' + Time.now.to_i.to_s(36) + '--' + rand(10000).to_s(36)
    @data = []
  end

  attr_reader :boundary

  def add_part name, data, content_type=nil, misc = ''
    @data << "--#{@boundary}"
    @data << %Q(content-disposition: form-data; name="#{name}"#{misc})
    @data << "content-type: #{content_type}" if content_type
    @data << ''
    @data << data
    @data << "--#{@boundary}"
  end

  def add_file name, file
    add_part name, open(file, 'rb'){|f| f.read},
             'application/octet-stream', "; filename=\"#{file}\""
  end

  def to_str
    @data.join("\r\n") + "--\r\n"
  end
end

def upload page_name, files
  uri  = URI.parse(UploadURL)
  auth = Base64.encode64("#{ID}:#{PASSWORD}").strip

  files.each{|file|
    p file
    mp = MultiPart.new
    mp.add_part 'p', page_name
    mp.add_part 'command', 'edit'
    mp.add_file 'attach_file', file
    mp.add_part 'attach', 'ファイルの添付'.toeuc

    Net::HTTP.start(uri.host){|http|
      header = {
        'Authorization' => "Basic #{auth}==",
        'content-type' => "multipart/form-data; boundary=#{mp.boundary}"
      }
      res = http.post(uri.path, mp.to_str, header)
      puts res.message
      puts res.body if res.code != '200'
    }
  }
end

pn = ARGV.shift
upload(pn, ARGV)