読者です 読者をやめる 読者になる 読者になる

FLYING

〈全日本・紀文豆乳飲料シリーズ「麦芽コーヒー」の500ミリリットルパックを扱う小売店が少ないことに遺憾の意を表明する会〉活動記録

pukiwikiのdumpを保存するスクリプト

ruby

crontabとかで定期実行する用。

#!/usr/bin/ruby
# -*- coding: utf-8 -*-

require 'net/http'
require 'uri'

DOMAIN = 'www.foobar.com'
PATH = '/pukiwiki/index.php'
ADMIN_PASSWORD = 'PUKIWIKI_PASSWORD'
BASIC_USER = 'BASIC_AUTH_USER'
BASIC_PASSWORD = 'BASIC_AUTH_PASSWORD'
PREFIX = 'pukiwiki_'
POSTFIX = '.tar.gz'

begin
	#get params
	params = []
	query = {
		"encode_hint" => "",
		"cmd" => "dump",
		"page" => "トップページ",
		"act" => "dump",
		"pcmd" => "tgz",
		"bk_wiki" => "true",
		"bk_attach" => "true",
		"bk_backup" => "true",
		"pass" => ADMIN_PASSWORD,
		"ok" => "OK",
	}
	query.each{|k, q|
		params << URI.encode(k) + "=" + URI.encode(q)
	}
	
	#get archive
	archive = nil
	Net::HTTP.version_1_2
	req = Net::HTTP::Post.new(PATH)
	req.basic_auth(BASIC_USER, BASIC_PASSWORD)
	req.body = params.join('&')
	http = Net::HTTP.start(DOMAIN, 80) {|http|
		res = http.request(req)
		archive = res.body
	}
	
	#write archive
	date = Time.now.strftime("%Y%m%d%H%M%S")
	File.open(PREFIX + date + POSTFIX, "wb") {|f|
		f.write(archive)
	}
rescue => e
	puts e
end

Basic認証に対応してます。必要なければ適当にコメントアウトするよろし。
“encode_hint=ぷ”ってなんなんだろ……文字化け対策?