Feel Physics Backyard

HoloLensの出張授業をする会社で、教材を開発しています

090727-最近のマイミク日記を取得しGmailへ送信するには

新しい記事があります

リンク: 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