¤Ü¤Á¤Ü¤Á»¶Êâ

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)

¥Ú¡¼¥¸¤ÎÀèÆ¬¤Ø

¤¬¤ó¤Ð¤ìlivedoor¡ª

¤Ê¤ó¤À¤«¥Û¥ê¥¨¥â¥ó»ö·ï°Ê¹ß¤Îlivedoor¤ÏÎɤ¤Êý¸þ¤Ë¸þ¤«¤Ã¤Æ¤¤¤ëµ¤¤¬¤·¤Þ¤¹¡¥ÆÃ¤Ëlivedoor Reader¤Ï¤â¤Î¤¹¤´¤¯Îɤ¯¤Ç¤­¤Æ¤¤¤ë¤·¡¤livedoor clip¤â¤Ê¤«¤Ê¤«¤¤¤¤´¶¤¸¤Ç¤¹¡¥¡Ê¤È¤ê¤¢¤¨¤º¥¢¥«¥¦¥ó¥Èºî¤Ã¤Æ¤ß¤Þ¤·¤¿¡¥¤â¤¦°ì©¤Çdel.icio.us¤«¤é¾è¤ê´¹¤¨¤é¤ì¤ë¡©¡Ë

¥È¥Ã¥×¥Ú¡¼¥¸¤âYahoo!¤Î¥Ñ¥¯¥ê¤Ã¤Ý¤«¤Ã¤¿¤Ã¤Æ¤¤¤¦¤«Yahoo!¤½¤Î¤â¤Î¤Ç¤·¤¿¤¬¡¤¤Ä¤¤¤Ë¥ª¥ê¥¸¥Ê¥ë¤Ê¤â¤Î¤ËÊѹ¹¤µ¤ìÆÈ¼«¤Î¥³¥ó¥Æ¥ó¥Ä¤òÄ󶡤·¤Æ¤¤¤¯¤½¤¦¤Ç¤¹¡¥¤¸¤ã¤¢º£Å٤ϤϤƤʤΥѥ¯¥ê¤«¡¤¤Ã¤Æ¤¤¤¦Ïä⤢¤ë¤ß¤¿¤¤¤Ç¤¹¤¬¡¤¤½¤¦¤Ç¤Ï¤Ê¤¯livedoor¤Ë¤·¤«¤Ç¤­¤Ê¤¤¥µ¡¼¥Ó¥¹¤Ë¤Ê¤ë¤³¤È¤ò´üÂÔ¤·¤Æ¤¤¤Þ¤¹¡¥

;Ã̤Ǥ¹¤¬¡¤livedoor Reader¤Ï±Ñ¸ì²½¤·¤¿¤éÉáÄ̤ËÀ¤³¦¤ò¼è¤ì¤½¤¦¤Ê¤°¤é¤¤¤Î¥¯¥ª¥ê¥Æ¥£¤À¤È¾¡¼ê¤Ë´¶¤¸¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¤livedoor¤Î¥³¥ó¥Æ¥ó¥Ä¤Î±Ñ¸ì²½¤È¤¤¤¦¤«¹ñºÝ²½¤Ï¤·¤Ê¤¤¤Î¤«¤Ê¤¡¤È¤Á¤ç¤Ã¤È»×¤¤¤Þ¤·¤¿¡¥

»²¹Í¥Ë¥å¡¼¥¹

2006/07/05 20:01 | Web | ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯(0) | ¥³¥á¥ó¥È(0)

¥Ú¡¼¥¸¤ÎÀèÆ¬¤Ø

¥Õ¥£¡¼¥É¼èÆÀ¤·¤¹¤®

µ¤¤¬¤Ä¤¤¤¿¤élivedoor Reader¤Ç¼èÆÀ¤·¤Æ¤¤¤ë¥Õ¥£¡¼¥É¤Î¿ô¤¬100·ï¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤·¤¿¡¥ÉáÄ̤˰ìÆüÅö¤¿¤ê¤Î¿·Ãåµ­»ö¤¬200·ï¤ò±Û¤¨¤ë¤Î¤ÇÌܤòÄ̤ë¤À¤±¤Ç¤âÂçÊѤÀ¤Ã¤¿¤ê¤·¤Þ¤¹¡¥¤À¤Ã¤¿¤é¡¤¼­¤á¤ì¤ÐÎɤ¤¤Î¤Ç¤¹¤¬¸«Æ¨¤¹¤È»¤·¤½¤¦¤È¤¤¤¦¤«¡¤¸«Æ¨¤¹¤Î¤¬Éݤ¯¤Æ¤É¤ó¤É¤óί¤á¹þ¤à¤Î¤Ç¡¤¥Õ¥£¡¼¥É¤Î¿ô¤¬Áý¤¨¤ë°ìÊý¤Ç¤¹¡¥

Ãμ±¤Ï¤¿¤¯¤µ¤ó»ý¤Ã¤Æ¤¤¤ë¤Ë±Û¤·¤¿¤³¤È¤Ï¤Ê¤¤¤·¡¤¿Í¤Î¥Ö¥í¥°¤ä¥Ë¥å¡¼¥¹¤òÆÉ¤à¤Î¤Ï³Ú¤·¤¤¤Î¤ÇÎɤ¤¤Î¤Ç¤¹¤¬¡¤ÌäÂê¤Ï¤½¤ÎÃ챤ò³è¤«¤»¤ë¤«¤É¤¦¤«¤À¤ÈºÇ¶á»×¤¦¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡¥Ãμ±¤Ê¤·¤Ë»×¹Í¤·¤Æ¤â¤À¤á¤À¤·¡¤Ãμ±¤Ð¤Ã¤«¤ê¤Ç»×¹Í¤·¤Ê¤¤¤Î¤â¤À¤á¤Ê¤Î¤Ç¡¤¥Õ¥£¡¼¥É¤«¤éÆÀ¤é¤ì¤ëÃ챤ò¤Ê¤ó¤é¤«¤Î·Á¤Ç¥¢¥¦¥È¥×¥Ã¥È¤·¤Æ¼«Ê¬¤Î¤â¤Î¤Ë¤·¤¿¤¤¤Ç¤¹¡¥HTML¤äCSS¤Ï¥Ö¥í¥°¤Î¥Ç¥¶¥¤¥ó¡¤JavaScript¤äPHP¤âºÇ¶á¤Ï¤È¤¢¤ë¥Ú¡¼¥¸¤Ç³è¤«¤»¤¿¤Î¤Ç¡¤´°Á´¤ËÃμ±¤Ð¤Ã¤«¤ê¤ÎƬ¤Ç¤Ã¤«¤Á¤Ç¤Ï¤Ê¤¤¤Î¤Ç¤¹¤¬¡¤¤Þ¤À¤Þ¤À¤Ê¤Î¤Ç¤¤¤í¤ó¤Ê¤³¤È¤Ë¥Á¥ã¥ì¥ó¥¸¤·¤¿¤¤¤â¤Î¤Ç¤¹¡¥

¤È¤ê¤¢¤¨¤º¡¤º£¤Î¤È¤³¤í¤ä¤Ã¤Æ¤ß¤¿¤¤¤³¤È¤È¤·¤Æ¤Ï¡¤Ruby on Rails¤Ç¤Ê¤ó¤«ºî¤ë¡¤Cocoa + Objective-C¤Ç¤Ê¤ó¤«ºî¤ë¡¤Scheme¡¤Haskell¤¢¤¿¤ê¤Î´Ø¿ô·¿¸À¸ì¤òÊÙ¶¯¤¹¤ë¡¤¤Ç¤·¤ç¤¦¤«¡¥ÊýË¡ÏÀ¤Ð¤Ã¤«¤êÀè¹Ô¤·¤ÆÌÜŪ¤¬¤Ê¤¤¤Î¤¬¤¹¤´¤¯¤À¤á¤Ç¤¹¡¥C++¡¤PHP¤¢¤¿¤ê¤ÏɬÍפËÇ÷¤é¤ì¤Æ¤¢¤ëÄøÅ٤Ǥ­¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿´¶¤¬¤¢¤ë¤Î¤Ç¡¤¤Ê¤ó¤«ÌÌÇò¤½¤¦¤ÊÌÜŪ¤ò¹Í¤¨¤Æ¤ä¤Ã¤¿Êý¤¬Îɤµ¤½¤¦¤Ç¤¹¡¥¤Ê¤ó¤À¤«¥°¥À¥°¥À¤Ç¤¹¤¬¡¤¥Þ¥¤¥Ú¡¼¥¹¤Ç¤¤¤­¤¿¤¤¤È»×¤¤¤Þ¤¹¡¥

2006/06/27 00:19 | Web | ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯(0) | ¥³¥á¥ó¥È(3)

¥Ú¡¼¥¸¤ÎÀèÆ¬¤Ø

³Ø½ÑÏÀʸÍÑ¥½¡¼¥·¥ã¥ë¥Ö¥Ã¥¯¥Þ¡¼¥¯CiteULike

³Ø½ÑÏÀʸÍѤΥ½¡¼¥·¥ã¥ë¥Ö¥Ã¥¯¥Þ¡¼¥¯¥µ¡¼¥Ó¥¹¤Ç¤¢¤ëCiteULike¤È¤¤¤¦¥µ¡¼¥Ó¥¹¤ò¸«¤Ä¤±¤Þ¤·¤¿¡¥Âç³Ø¤Ç¸¦µæ¤·¤Æ¤¤¤ë¿Í¤Ê¤ó¤«¤Ï¤ï¤«¤ë¤È»×¤¦¤Î¤Ç¤¹¤¬¡¤»²¹ÍÏÀʸ¤Î´ÉÍý¤ä¼«Ê¬¤ÇÏÀʸ¤ò½ñ¤¯¤È¤­¤ÎBibTex¤ÎÊÔ½¸¤Ê¤ó¤«¤Ï¤â¤Î¤¹¤´¤¯¤á¤ó¤É¤¯¤µ¤¤¤Ç¤¹¡¥¤½¤ÎÊÕ¤ò¤¢¤ëÄøÅÙ²ò·è¤·¤Æ¤¯¤ì¤ë¤Î¤¬¤³¤ÎCiteULike¤Ç¤¹¡¥

»È¤¤Êý¤ÏÂбþ¥µ¥¤¥È¤ÇBookmarklet¤ò¼Â¹Ô¤¹¤ë¤À¤±¤Ç¤ª¡¼¤±¡¼¤Ê¤Î¤¬ÁÇŨ¤Ç¤¹¡¥¼«Ê¬¤Ï¾ðÊó·Ï¤Ê¤Î¤ÇACM¤Ê¤É¤ò¤è¤¯»²¾È¤¹¤ë¤Î¤Ç¤¹¤¬¡¤¤Ð¤Ã¤Á¤êÂбþ¤·¤Æ¤¤¤Æ»î¤·¤ËACM¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ëÀèÇÚ¤ÎÏÀʸ¤òCiteULike¤ËÄɲ䷤Ƥߤ¿¤Î¤Ç¤¹¤¬¡¤´°àú¤Ç¤Ï¤Ê¤¤¤â¤Î¤Î¡¤Ãø¼Ô̾¡¤Ç¯¡¤½ñÀÒ̾¡¤¥Ú¡¼¥¸¿ô¤°¤é¤¤¤Ï¼«Æ°¤ÇÆþÎϤµ¤ì¤Þ¤·¤¿¡¥¤·¤«¤â¡¤BibTex¤Ç¥¨¥¯¥¹¥Ý¡¼¥È¤Ç¤­¤ë¤Î¤Ç¡¤¼«Ê¬¤ÇÏÀʸ¤ò½ñ¤¯ºÝ¤Ë¤â½ÅÊõ¤·¤½¤¦¤Ç¤¹¡¥

¤Á¤Ê¤ß¤Ë¡¤Mac¥æ¡¼¥¶¤Ê¤é¤ÐpKizzy¤â¥ª¥¹¥¹¥á¤Ç¤¹¡¥PDF¥Õ¥¡¥¤¥ë¤ò´Êñ¤ËÀ°Íý¡¤±ÜÍ÷¤Ç¤­¤ë¾å¤ËBibTex·Á¼°¤Î¥¨¥¯¥¹¥Ý¡¼¥È¤â²Äǽ¤Ê¤Î¤ÇÊØÍø¤Ç¤¹¡¥

2006/04/15 00:43 | Web | ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯(0) | ¥³¥á¥ó¥È(0)

¥Ú¡¼¥¸¤ÎÀèÆ¬¤Ø

Google¤µ¤ó¤â¥«¥ì¥ó¥À¡¼¥µ¡¼¥Ó¥¹½Ð¤·¤¿

Google Calendar¤¬¥ê¥ê¡¼¥¹¤µ¤ì¤Þ¤·¤¿¡¥¸Ä¿ÍŪ¤Ë¤Ï°ÊÁ°¾Ò²ð¤·¤¿Kiko¤ÎÊý¤¬¥Ç¥¶¥¤¥ó¤¬¤­¤ì¤¤¤À¤·¡¤»È¤¤¾¡¼ê¤âÎɤ¯¡¤¥Õ¥£¡¼¥É¥Ð¥Ã¥¯¤ËÂФ¹¤ëÊÖ»ö¤â°ÛÍͤËÁᤤ¤Î¤Ç¹¥¤ß¤Ê¤Î¤Ç¤¹¤¬¡¤Google Calendar¤ÏÆüËÜ¤ÎµÙÆü¤âɽ¼¨¤Ç¤­¤¿¤ê¡¤¤ª¤½¤é¤¯¤³¤ì¤«¤é¤ÏGmail¤Ê¤É¤ÈÏ¢·È¤·¤Æ¹Ô¤¯¤È»×¤ï¤ì¤ë¤Î¤Ç¤½¤ì¤Ï¤½¤ì¤ÇÌ¥ÎÏŪ¤Ç¤¹¡¥

¤È¤³¤í¤Ç¡¤¥Ñ¥½¥³¥ó¾å¤Ç°·¤¦¥«¥ì¥ó¥À¡¼¤ÏiCalendar¤È¤¤¤¦·Á¼°¤Çɸ½à²½¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¤¥ª¥ó¥é¥¤¥ó¡¤¥ª¥Õ¥é¥¤¥ó¤Ë´Ø¤ï¤é¤ºÁ´¤Æ¤Î¥«¥ì¥ó¥À¡¼¥¢¥×¥ê¤¬Âбþ¤·¤Æ¤¯¤ì¤¿¤ê¡¤·ÈÂÓÅÅÏ䬤¦¤Þ¤¤¤³¤È¥µ¥Ý¡¼¥È¤·¤¿¤ê¤·¤Æ¡¤¤½¤Î¾åƱ´ü¤â¼è¤ì¤ì¤Ð¥¹¥±¥¸¥å¡¼¥ë´ÉÍý¤¬¼ê·Ú¤Ë¤Ç¤­¤Æ³Ú¤·¤¤µ¤¤¬¤·¤Þ¤¹¡¥

¤Á¤Ê¤ß¤Ë¡¤Google Calendar¤ÎÍøÍѤˤÏGmail¤Î¥¢¥«¥¦¥ó¥È¤¬É¬Íפʤ褦¤Ç¤¹¡¥¥ê¥¢¥ë¤ÇÃΤäƤë¿Í¤Ê¤é¤Ð¾·ÂÔ¤¹¤ë¤Î¤Ç¡¤¶½Ì£¤Î¤¢¤ëÊý¤ÏÏ¢Íí¤¯¤À¤µ¤¤¡¥

2006/04/14 01:56 | Web | ¥È¥é¥Ã¥¯¥Ð¥Ã¥¯(0) | ¥³¥á¥ó¥È(0)

¥Ú¡¼¥¸¤ÎÀèÆ¬¤Ø

¥È¥Ã¥×¥Ú¡¼¥¸¤Ø >> ¼¡¤Î¥Ú¡¼¥¸¤Ø