10:14PM

用Ruby做的Gmail新邮件提醒

My Works, by Wei.

前段时间看到一个php的飞信模拟接口,可以实现免费短信发送,所以我就将其拿来做了个自己用的API

前一段时间由于各种事务的繁忙,我几乎没有什么时间来查邮件,现在趁着这几天难得的假,我就写了一段用Ruby的Mechanize来获取Gmail或Google Apps Mail的代码。

这种模拟登录抓取网页内容的程序写出来就是比较乱,写注释以后自己都不一定记得,呵呵。

前期写模拟抓取网页和登录的时候还算顺利,但是抓取到的信息就是死活发不出去。(我用的是一个web接口,实际发短信部分是用php实现的,不是我写的,但我忘了是从哪里拿来的了,原作者看到请联系我。)

经过调查发现原来得到的信息不是纯的UTF-8编码,必须要转成纯UTF-8的形式才能顺利在手机端被识别。代码如下:

require 'rubygems'
require 'mechanize'
require 'iconv'
 
def check(address,email,passwd,phone,phonepw)
  agent = WWW::Mechanize.new
  agent.user_agent = 'Opera Mini'
  agent.follow_meta_refresh = true
  page = agent.get address
  form = page.forms.first
  form.Email = email
  form.Passwd = passwd
  page = agent.submit form #login
  tmp = []
  page.body.scan(/<b>(.*)</){|str| tmp.push(Iconv.conv('UTF-8//IGNORE', 'UTF-8', str[0][0..-5]))}
  #get new email and push them in to tmp after encode it in to pure UTF-8
  tmp.delete_at(-1) #delete extra shit
  msg = []
  exit if tmp.size ==0 #exit if theres none
  for i in 0..tmp.size/2-1 #form messages
    msg.push("#{tmp[i*2][0..-2]}--#{tmp[i*2+1]}")
  end
  page.links[0..(msg.size-1)].each{|l| l.click} #click those new links to make it as read
  for t in msg #send each
    page = agent.get('http://x.rookee.net')
    form = page.forms.first
    form.pn = phone
    form.pw = phonepw
    form.to = phone
    form.msg = t
    page = agent.submit form
  end
end

用法实例:

check('http://mail.google.com/','你的邮件地址','你的密码','移动手机号','飞信密码')

PS:其实一开始我准备用rfetion来做(rfetion是一个Ruby的飞信接口,很不错),但是不知道为什么收到的短信总是不全。所以就改用了php的接口。

Back Top

回复自“用Ruby做的Gmail新邮件提醒”

  1. 没有任何评论。
  1. 没有任何引用。

发表回复

Back Top

注意: 评论者允许使用'@user:'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC:'(不包括单引号)将会自动将您的评论发送给ABC。