Feed::mixi

mixiPraggerで読めるようにする。自分でHTMLを解析するのではなく、mixiツールバー用のAtomを取得するようにしている。
ただ、Atomをパースする方法がよく分からなかったし、特に必要もなかったので、パースせずに文字列のまま渡している。

設定ファイル例

- module: Feed::mixi
  config:
    username: username
    password: password
    member_id: 1000000
- module: file
  config:
    filename: feeds/mixi.atom

ソースコード

Feed/mixi.rb

#! /opt/local/bin/ruby -w
# -*- mode:ruby; coding:utf-8 -*-
#
# mixi.rb -
#
# Copyright(C) 2008 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2008/02/08 12:16:36
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#
require 'openssl'
require 'open-uri'
require 'base64'

def mixi(config,data)
  wsse = lambda{|username,password|
    t = Time.now
    nonce = OpenSSL::Digest::SHA1.digest(OpenSSL::Digest::SHA1.digest(t.to_s + rand.to_s))
    now = t.utc.iso8601
    digest = Base64.encode64(OpenSSL::Digest::SHA1.digest(nonce+now+config['password'])).chop

    %(UsernameToken Username="#{username}", PasswordDigest="#{digest}", Nonce="#{Base64.encode64(nonce).chop}", Created="#{now}")
  }

  open("http://mixi.jp/atom/updates/member_id=#{config['member_id']}",
       'X-WSSE' => wsse.call(config['username'],config['password'])).read
end

file.rb

def file(config,data)
  open(config['filename'],'w'){|io|
    io.print data.to_s
  }
end