新しい記事があります
リンク: 090918-mixi日記をGmailで取得するスクリプトを改良してみた: Non-programmer's Ruby in Pocket.
前回の続きで、取得した最近のマイミク日記をgmailで送信してみた。参考にしたのは以下のページ(てか、ほとんどそのまま)。
リンク: Ruby/細々としたツール - myonlineMemo!.
Gmailを使ってメール送信
今回はmixiに接続して日記を取り出す部分をMixiクラスにしてrequireしてみた。よって、以下ではまずプログラム本体を示し、次にMixiクラスの内容を示している。
プログラム本体:
$KCODE = 'UTF-8'
require 'mixi_090727'
### 日記取得
username = 'xxxxxxxx@xxxxxx.com'
password = 'xxxxxxxx'
m = Mixi.new(username, password)
body = m.get_recent_diaries
subject = "Recent Mixi Diary"
### メール送信
require 'net/smtp'
require 'tlsmail'
# setting
mail_address = "xxxxxxxx@gmail.com"
mail_pass = "xxxxxxxx"
from_address = "xxxxxxxx@gmail.com"
to_address = "xxxxxxxx@gmail.com"
# main
smtpserver = Net::SMTP.new("smtp.gmail.com", 587)
smtpserver.enable_tls(OpenSSL::SSL::VERIFY_NONE)
message = <<-endofmail from:="" from_address="" to:="" to_address="" subject:="" subject="" date:="" time::now="" strftime="" a="" d="" b="" y="" x="" z="" body="" endofmail="" smtpserver="" start="" myserverdomain="" mail_address="" mail_pass="" :login="" do="" smtp="" send_message="" message="" end="" code="">
mixi_090727.rb:
require 'mechanize'
class Mixi
@agent
def initialize(username, password)
@agent = WWW::Mechanize.new
page = @agent.get('http://mixi.jp/')
form = page.forms[0]
form.fields.find {|f| f.name == 'email'}.value = username
form.fields.find {|f| f.name == 'password'}.value = password
form.fields.find {|f| f.name == 'next_url'}.value = '/home.pl'
page = @agent.submit(form, form.buttons.first)
if /url=([^"])"/ =~ page.body
redirect_url = 'http://mixi.jp' + $1.to_s
@agent.get(redirect_url)
end
@agent.get('http://mixi.jp/home.pl')
end
def get_recent_diaries
body = ""
page_home = @agent.get('http://mixi.jp/home.pl')
page_home.links.each do |link|
url = link.href
# ホームのリンクの中からマイミク日記を参照しているものを探す
if url =~ /view_diary\.pl.*/
diary_page = @agent.get(url)
# タイトルに「|」があればmixi日記と判断する
diary_title = diary_page.title
if diary_title =~ /\|/
diary_datetime = diary_page.at('dd').inner_text
body << diary_datetime + "\n"
body << diary_title + "\n"
# div id='diary_body'の中身を日記本文として表示する
body << diary_page.at('div#diary_body').inner_text + "\n"
end
end
end
body
end
end