カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
#!/usr/bin/env ruby
require 'xmlrpc/server'
server = XMLRPC::Server.new(10080)
class WeblogUpdates
def ping(name, url)
{ "flerror" => false, "message" => "Tanks for the ping" }
end
end
server.add_handler("weblogUpdates", WeblogUpdates.new)
server.serve
#!/usr/bin/env ruby
require 'xmlrpc/client'
name = ARGV.shift
url = ARGV.shift
connection = XMLRPC::Client.new("localhost", "/RPC2", 10080)
result = connection.call("weblogUpdates.ping", name, url)
puts "message: " + result["message"]
$ruby ping_server.rb & [Thu Sep 11 13:03:08 2003] HttpServer 127.0.0.1:10080 start $ruby ping_client.rb my_blog http://www.example.com/blog/ [Thu Sep 11 13:03:47 2003] HttpServer 127.0.0.1:10080 client:40594 some.where.example.jp<127.0.0.1> connect [Thu Sep 11 13:03:47 2003] HttpServer 127.0.0.1:10080 client:40594 disconnect message: Tanks for the ping
#!/usr/bin/env ruby
require 'xmlrpc/server'
server = XMLRPC::CGIServer.new
class WeblogUpdates
def ping(name, url)
{ "flerror" => false, "message" => "Tanks for the ping" }
end
end
server.add_handler("weblogUpdates", WeblogUpdates.new)
server.serve
#!/usr/bin/env ruby
require 'xmlrpc/client'
name = "MyBlog"
url = "http://www.example.com/blog/"
connection = XMLRPC::Client.new("localhost", "/cgi-bin/ping_server.cgi", 80)
result = connection.call("weblogUpdates.ping", name, url)
puts "message: " + result["message"]
require 'rexml/document'
require 'rexml/streamlistener'
module WeblogUpdates
class Handler
include REXML::StreamListener
attr_reader :weblog_updates
def tag_start(name, attrs)
case name
when "weblogUpdates"
@weblog_updates = WeblogUpdates.new(attrs["version"], attrs["updated"], attrs["count"].to_i)
when "weblog"
weblog = Weblog.new(attrs["name"], attrs["url"], attrs["when"].to_i)
@weblog_updates.add(weblog)
end
end
end
class Parser
def self.parse(xml_source)
parser = Parser.new
parser.parse(xml_source)
end
def parse(xml_source)
handler = Handler.new
REXML::Document.parse_stream(xml_source, handler)
handler.weblog_updates
end
end
class WeblogUpdates
include Enumerable
def self.load(filename)
Parser.parse(File.new(filename))
end
def self.create(xml_source)
Parser.parse(xml_source)
end
attr_accessor :version, :updated, :count, :weblogs
def initialize(version=nil, updated=nil, count=nil)
@version = version
@updated = updated
@count = count
@weblogs = []
end
def add(weblog)
@weblogs << weblog
end
def each
@weblogs.each do |weblog|
yield weblog
end
end
def save(filename)
File.open(filename, 'w') do |f|
f.puts(self.to_s)
end
end
def to_s
str =<<-_XML_
<?xml version="1.0"?>
_XML_
str << self.to_xml
end
def to_xml
str =<<-_XML_
<weblogUpdates version="#{@version}" updated="#{@updated}" count="#{@count}">
_XML_
@weblogs.each do |weblog|
str << weblog.to_xml
end
str << "</weblogUpdates>\n"
end
end
class Weblog
attr_accessor :name, :url, :when
def initialize(name=nil, url=nil, _when=nil)
@name = name
@url = url
@when = _when
end
def to_s
to_xml
end
def to_xml
<<-_XML_
<weblog name="#{@name}" url="#{@url}" when="#{@when}"/>
_XML_
end
end
end
# -- demo
if __FILE__ == $0
require 'time'
weblog_updates = WeblogUpdates::WeblogUpdates.load("changes.xml")
updated = Time.rfc822(weblog_updates.updated)
weblog_updates.each do |weblog|
date = updated - weblog.when
name = weblog.name
puts "#{date.strftime('%m/%d/%y %H:%M:%S')}\t#{name}"
end
end
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).