携帯メールで散財.com

予告通り、散財.comにメールで投稿できるようにした。
ただ、来年の2月のアップデータで携帯に対応されるらしいので、適当に作ってある。
どう適当かと言うと、品名と値段しか登録できない。添付画像ができたり、ジャンル・カテゴリが選べたりしたら楽しいとは思うけど、面倒なのでパス。

設置方法

http://howdyworld.org/junk/3zai.rb

何らかの方法で、メール受信時にこのプログラムに渡すようにする。
自分は、mailfilterで、次のようにしている。

cc "| ruby /home/mzp/3zai.rb"

自前で設置できない人や、面倒な人のために、3zai@howdyworld.orgに設置してあります。
ただ、mzpにパスワードがばれるので、あまりお勧めしません。

使い方

To: 3zai@howdyworld.org
Subject: username password

海老フライ定食 640

というメールを送ると、散財.comに登録される。

ソースコード

#! /opt/local/bin/ruby
# -*- mode:ruby; coding:utf-8 -*-
#
# 3zai.rb -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2007/12/06 21:50:32
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Ruby itself.
#
require 'rubygems'
require 'mechanize'
require 'kconv'

class Sanzai
  def initialize(user,passwd)
    @agent = WWW::Mechanize.new
    login(user,passwd)
  end

  def login(user,passwd)
    page = @agent.get 'http://www.3zai.com'

    form = page.forms.with.name('loginForm').first
    form.user_id  = user
    form.password = passwd

    @agent.submit form
  end

  def account(option)
    page = @agent.get 'http://www.3zai.com/manage/account/'

    form = page.forms.with.name('account_create_form').first
    count = form.start_item_count

    option.each{|key,value|
      form["#{key}#{count}"] = value
    }

    @agent.submit form
  end
end

def parse(lines)
  option = {
    :account_genre_seq => '11',
    :account_category_seq => '85'
  }

  head,body = lines.split("\n\n",2)

  subject = head.find{|item| item =~ /\ASubject:/i }
  if subject =~ /\ASubject:\s+(\S+)\s+(\S+)\Z/i
    username = $1
    password = $2
  end

  item,price = body.toutf8.to_a.first.split(' ',2)
  option[:item_name] = item
  option[:unit_price]= price

  [username,password,option]
end

username,password,option = parse(ARGF.read)
if username == nil or password == nil then
  raise 'invalid username/password'
end

sanzai = Sanzai.new username,password
sanzai.account option