livedoor Clip¤«¤édel.icio.us¤ËÌá¤ë
del.icio.us¤ÎFirefox³ÈÄ¥¤ÎºÇ¿·ÈǤ¬¤¹¤´¤¤¡ª¤È¤¤¤¦Ïäòʹ¤¤Ä¤±¡¤livedoor Clip¤«¤édel.icio.us¤ËÌá¤Ã¤Æ¤ß¤ë¤³¤È¤Ë¡¥¤¿¤À¡¤livedoor Clip¤ÎÊý¤Ëdel.icio.us¤Ë¤Ê¤¤¤ä¤Ä¤¬¤¿¤¯¤µ¤ó¤¢¤Ã¤¿¤Î¤Ç¡¤°Ü¹Ô¥¹¥¯¥ê¥×¥È½ñ¤¤¤¿¡¥°ì±þ¥½¡¼¥¹¤ª¤¤¤È¤¯¤±¤É¡¤¤â¤Î¤¹¤´¤¯Å¬Åö¤Ê¤Î¤Ç¡¤ÍøÍѤ·¤¿¤¤Êý¤Ï¼«¸ÊÀÕǤ¤Ç¤ª´ê¤¤¤·¤Þ¤¹¡¥
»È¤¤Êý¤Ï¡¤LDC.new¤Î°ú¿ô¤Ë¡¤livedoor Clip¤«¤é¥¨¥¯¥¹¥Ý¡¼¥È¤·¤¿XML¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¤Î¤È¡¤username¤Èpassword¤Ëdel.icio.us¤Î¤ä¤Ä¤ò¤½¤ì¤¾¤ì»ØÄꤷ¤Æ¡¤
$ ruby ldr2delicious.rb > output.txt
¤È¤«¤·¤Æ¡¤¥í¥°¤È¤ê¤Ê¤¬¤é¼Â¹Ô¤·¤Þ¤¹¡¥¥Ý¥¹¥È¤Ë¼ºÇÔ¤¹¤ë¤Èsomething wrong¤È¤«Ê֤äƤ¯¤ë¤ß¤¿¤¤¤Ê¤Î¤Ç¡¤¤¢¤È¤Ç¼ºÇÔ¤·¤Æ¤Ê¤¤¤«¸«¤ì¤ë¤«¤â¡¥¤½¤ì¤Ë¤·¤Æ¤â¥¢¥¦¥È¥×¥Ã¥È¤âŬÅö¤ä¤Êorz
# ldr2delicious.rb
require 'pp'
require 'kconv'
# LDC¤Î¥¯¥ê¥Ã¥×°ì¸Ä
class Clip
attr_reader :title, :link, :memo, :date, :author, :rate, :tags
def initialize(title, link, memo, date, author, rate, *tags)
@title = title
@link = link
@memo = memo
@date = date
@author = author
@rate = rate
@tags = tags
end
def to_s
[
@title.to_s,
@link.to_s,
@memo.to_s,
[@date.year, @date.month, @date.day, [@date.hour, @date.min, @date.sec].join(':'), @date.offset].join(' '),
@author.to_s,
@rate.to_s,
@tags.join(', ')
].join("\n")
end
end
# LDC¤Î¥¯¥ê¥Ã¥×Á´Éô
class LDC
require 'rexml/document'
# require 'date'
attr_reader :clips
# Apr => 4, May => 5, etc..
month_abbr = Date::ABBR_MONTHNAMES.dup
month_abbr.shift
month_num = []
(1..12).each {|i| month_num.push i}
@@Month = Hash[*(month_abbr.zip(month_num).flatten)]
def initialize(file)
@clips = []
doc = REXML::Document.new open(file).read
doc.elements.each '/rss/channel/item' do |elem|
# title, link, memo
title = elem.text('title')
link = elem.text('link')
memo = elem.text('description')
# date
pubDate = elem.text('pubDate')
dates = pubDate.split(' ')
day = dates[1]
month = @@Month[dates[2]]
year = dates[3]
# time
times = dates[4].split(':')
hour = times[0]
min = times[1]
sec = times[2]
# timezone
offset = 9
# datetime object
t = Time.local(year.to_i, month.to_i, day.to_i, hour.to_i, min.to_i, sec.to_i)
date = t - 9 * 60 * 60 # »þº¹Ê¬ 9»þ´Ö
# author
author = elem.text('author')
# rate
rate = 0
(elem.text('rvw:rating').to_i / 20).times { rate += 1 }
# tag
tags = []
elem.elements.each 'dc:subject' do |tag|
tags.push tag.text
end
# add clip
@clips.push(Clip.new(title, link, memo, date, author, rate, tags))
end
end
end
class LDCtoDelicious
require 'net/https'
require 'cgi'
Net::HTTP.version_1_2
@@API_base_uri = 'api.del.icio.us'
@@API_post_uri = '/v1/posts/add'
@@SSL_port = 443
def initialize(username, password, ldc)
@username = username
@password = password
@ldc = ldc
end
def post(n = 10000)
@ldc.clips.each do |clip|
rate = ''
clip.rate.times { rate += '*' }
data = {
'url' => clip.link,
'description' => clip.title,
'extended' => clip.memo,
'tags' => clip.tags.join(' ') + ' ' + rate,
'dt' => clip.date.strftime('%Y-%m-%dT%H:%M:%SZ'), # '2007-04-10T19:00:00+0900'
'replace' => 'yes',
'shared' => 'yes'
}
begin
resp = ''
http = Net::HTTP.new(@@API_base_uri, @@SSL_port)
http.use_ssl = true
http.start do |http|
req = Net::HTTP::Get.new(@@API_post_uri + '?' + create_hash(data))
# puts 'https://' + @@API_base_uri + @@API_post_uri + '?' + create_hash(data)
req.basic_auth @username, @password
res = http.request req
resp = res.body
end
puts clip.title.tosjis
puts resp.tosjis
puts ''
rescue SocketError
raise 'Host ' + host + ' nicht erreichbar'
end
n -= 1
break if n <= 0
end
end
protected
def create_hash(data)
ret = []
data.each do |key, value|
value = '' if value == nil
ret.push key + '=' + CGI.escape(value)
end
ret.join '&'
end
end
username = 'username'
password = 'password'
ldc = LDC.new('ldc.xml')
post = LDCtoDelicious.new(username, password, ldc)
post.post()
¤Ç¡¤°Ü¹Ô¤·¤¿´¶ÁÛ¡¥º£¡¤del.icio.us¤Ë¤Ï3000·ï°Ê¾å¥Ö¥Ã¥¯¥Þ¡¼¥¯¤¢¤ó¤Í¤ó¤±¤É¡¤¤µ¤¹¤¬¤Ë¤³¤ì¤Ï¥¤¥ó¥¯¥ê¥á¥ó¥¿¥ë¥µ¡¼¥Á¤¬½Å¤¤¤Ê(-.-;)Stickn¤ÎÊý¤¬¤¤¤¤¤ä¤ó¡¥Stickn¤Î¥Ú¡¼¥¸¤Ë¤è¤ë¤È¡¤livedoor Clip¤Ø¤ÎÂбþ¤âÌܻؤ·¤Æ¤¤¤ë¤½¤¦¤Ç¡¤°Ü¹Ô¤·¤¿°ÕÌ£¤¬¤Ê¤¤µ¤¤â¤¹¤ë¡¥¤¿¤À¡¤livedoor Clip¤ÎAPI¤Ï¡¤¥¿¥°¤Î¼èÆÀ¤È¤«¡¤¥¿¥°¤Ç¹Ê¤ê¹þ¤ó¤Ç¥¯¥ê¥Ã¥×¤ò¼èÆÀ¤È¤«¤¬¤Þ¤À¤Ç¤¤Ê¤¤¤Ã¤Ý¤¤¤Î¤Ç¡¤¤¹¤°¤Ë¤ÏÆñ¤·¤¤µ¤¤â¤¹¤ë¤Ê¤¡¡¥¤È¤â¤«¤¯¡¤Sticken¤ÏĶÀäÊØÍø¤Ê¤Î¤Ç¡¤ºî¼Ô¤ÎÊý¤Ë¤Ï´¶¼Õ¤Ç¤¹¡¥
2007/04/11 11:14 | Web | ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯(0) | ¥³¥á¥ó¥È(0)