`
takingoff
  • 浏览: 22427 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

第一时间获取苹果官网IPad2供货信息

    博客分类:
  • Ruby
阅读更多

因为IPad2在官网 停止销售有一段时间。

有可能恢复供货也被抢购掉。(IPhone4 在今年2月份时 在官网抢购一台4999转手能卖到5700以上)

下面ruby代码 每半小时访问一次 苹果在线商店,如果货源信息变动,发邮件给指定联系人。

代码量很少,在这种小程序上ruby真的很方便~~

#主要流程
#!/usr/bin/ruby -w
#coding:UTF-8
require 'socket'
require 'net/http'
require "./send_email"
host,port,path='store.apple.com','80','/cn/browse/home/shop_ipad/family/ipad/select?mco=MjE2MjYyNzA'
http = Net::HTTP.new(host)
SLEEP_TIME=30 # in minites
eval File.read("smtp_tls2.rb")
Net::SMTP.enable_tls()
while true
begin
headers,body=http.get(path)
if headers.code=='200'
     str=body
str=str.force_encoding("UTF-8")
p str.encoding
    if /\(?.*?)\<\/span\>/mu=~str
          if sell_time.strip !='暂无供应'
            send_email('Apple Ipad2 供应信息有变化','供应信息有变化,估计发货时间为:'+sell_time.strip)
            p 'Apple Ipad2 information has change.sell time is:'+sell_time.strip+"\n";
           else
            p "IPAD2 still are not available!\n"
            #send_email('IPAD2 还是没有!!唉!','IPAD2 还是没有!!唉!'+sell_time.strip)
          end
    else
         send_email('apple订购页面有变化','apple订购页面有变化,无法匹配供应信息,请更改程序正则表达式')
         p "apple has change its web page,can not grap the information,please change your regex\n"
    end

else
    send_email('apple网站返回了错误信息',"苹果网站返回的错误信息: #{headers.code} #{headers.message}")
    p "apple website has returned error message: #{headers.code} #{headers.message}\n"
end

rescue
    begin
        send_email('苹果网站访问异常','无法连接到苹果网站,这可能是由于dabaiblog.com网络异常,或者苹果官网不可访问造成')
    rescue
        p "network error,and send error email failed.\n"
    ensure
        p "can not reach the apple website, this maybe due to network error of dabaiblog.com,or apple webserver crashed\n";
    end
ensure
    p 'last check time:'+Time.new.to_s+"\n"
    sleep SLEEP_TIME*60
end
end
#发送email部分 这里针对GMAIL配置
#!/usr/bin/ruby -w
require 'net/smtp'

FROM_EMAIL = "你的邮箱用户名"
PASSWORD = "你的邮箱密码"
TO_EMAIL = FROM_EMAIL

def send_email(title,message)
msgstr = <<#{FROM_EMAIL} Name Your From:>
To: my phone <#{TO_EMAIL}>
Subject: #{title}
Date: #{Time.new.to_s}
#{message}
END_OF_MESSAGE

  Net::SMTP.start('smtp.gmail.com', 587, 'gmail.com',FROM_EMAIL , PASSWORD, :plain) do |smtp|
     
     smtp.send_message msgstr, FROM_EMAIL, TO_EMAIL

  end

end
#增加对邮件的 SSL/TLS支持 摘自stack over flow
# Include hook code here

require 'net/smtp'
require 'timeout'

begin
  require 'openssl'
rescue LoadError
end

Net::SMTP.class_eval do

  alias_method :old_initialize, :initialize
  def initialize(hostname,port)
    @usetls = @@usetls
    old_initialize hostname,port
  end

  @@usetls = false

  def self.enable_tls()
    @@usetls = true
  end

  def self.disable_tls()
    @@usetls = false
  end

  def self.use_tls?()
    @@usetls
  end

  def use_tls?()
    @usetls
  end

  def enable_tls()
    print "tls enabled\n"
    @usetls = true
  end

  def disable_tls()
    @usetls = false
  end

  def use_tls?()
    @usetls
  end

  private
  def do_start(helodomain, user, secret, authtype)
    raise IOError 'SMTP session already started' if @started
    check_auth_args user, secret, authtype if user or secret

    sock = timeout(@open_timeout) {TCPSocket.open(@address, @port) }
    @socket = Net::InternetMessageIO.new(sock)
    @socket.read_timeout = @read_timeout
    @socket.debug_output = STDERR

    check_response(critical {recv_response() } )
    do_helo(helodomain)

    if @usetls
      raise 'openssl is not installed' unless defined?(OpenSSL)
      ssl = OpenSSL::SSL::SSLSocket.new(sock)
      starttls
      ssl.sync_close = true
      ssl.connect

      @socket = Net::InternetMessageIO.new(ssl)
      @socket.read_timeout = @read_timeout
      @socket.debug_output = STDERR
      do_helo(helodomain)
    end

    authenticate user, secret, authtype if user
    @started = true
  ensure
    @socket.close if not @started and @socket and not @socket.closed?
  end

  def do_helo(helodomain)
    begin
      if @esmtp
        ehlo helodomain
      else
        helo helodomain
      end
    rescue Net::ProtocolError
      if @esmtp
        @esmtp = false
        @error_occured = false
        retry
      end
      raise
    end
  end

  def starttls
    getok('STARTTLS')
  end

  def quit
    begin
      getok('QUIT')
    rescue EOFError
      # gmail sucks
    end
  end
end

以上代码在 ruby 1.9.2 ubuntu 10.04 环境下测试通过,运行很稳定~~

分享到:
评论
7 楼 cg7662069 2011-06-27  
订阅那个网页不是就行了么?
6 楼 wanggp 2011-06-27  
非常时刻的工具
5 楼 lioncin 2011-06-27  
以前公司还有人 用python 写个脚本 5S 刷新一次 火车票 然后用skype 绑定 一旦有新票就自动播号码过去的 结果还真让他找到了回家的车票呢
4 楼 xiaovsme 2011-06-25  
科技改变生活
3 楼 attol 2011-06-23  
现在官网有货
2 楼 takingoff 2011-06-21  
sevk 写道
发送gmail可以用 gem install gmail_sender
不用自己写代码的,方便。

      g = GmailSender.new('xxxxx@gmail.com', 'password')
      #next unless File.exist? fn
      #g.attach(fn) # you can attach any number of files, but there are limits for total attachments size
      ti = now.strftime("%y-%m-%d")
      p g.send(:to => t, :subject => ti, :content => File.read(fn))


好的 谢谢 当时第一反应就是用smtp类来发 有没有支持很多邮箱的gem 支持飞信的gem
1 楼 sevk 2011-06-17  
发送gmail可以用 gem install gmail_sender
不用自己写代码的,方便。

      g = GmailSender.new('xxxxx@gmail.com', 'password')
      #next unless File.exist? fn
      #g.attach(fn) # you can attach any number of files, but there are limits for total attachments size
      ti = now.strftime("%y-%m-%d")
      p g.send(:to => t, :subject => ti, :content => File.read(fn))

相关推荐

    苹果最新iPad2中文版使用说明书(完整超详细).pdf

    苹果 iPad2 中文版使用说明书(完整超详细) 本文将对苹果 iPad2 的使用进行详细的介绍,从基本设置到应用程序的安装和音乐同步,这篇文章将帮助新手用户快速掌握 iPad2 的使用方法。 一、开箱与激活 在使用 ...

    苹果iPad2平板电脑说明书

    **开箱与激活**是使用iPad2的第一步。确保电脑上安装了最新版本的iTunes,打开包装后,将iPad2通过数据线连接到电脑,按照提示完成设备的激活。你可以将电脑中的音乐、视频和书籍拖拽到iTunes相应栏目,然后同步到...

    ipad2---.pcb

    苹果ipad2点位图 .

    苹果最新iPad2中文版使用说明书完整超详细.pdf

    对于新购入iPad2的用户,开箱激活是第一步。确保电脑上已经安装了最新的iTunes,然后将iPad2连接到电脑,按照提示完成激活过程。同步书籍、音乐和视频的操作类似,可以通过直接拖拽文件到iTunes对应类别中,然后同步...

    苹果最新iPad2中文版使用说明书(完整超详细).doc

    苹果最新iPad2中文版使用说明书(完整超详细).doc

    苹果最新iPad2中文版使用说明书(完整超详细)[汇编].pdf

    【苹果iPad2中文版使用教程】iPad2是苹果公司推出的第二代平板电脑,以其轻薄设计和强大功能受到用户喜爱。对于初次接触iPad2的用户,掌握其基本操作和使用方法至关重要。本教程将详细讲解如何使用iPad2,包括与电脑...

    ipad2的拆解过程全记录

    根据给定的文件信息,我们将深入探讨iPad2的拆解过程及其内部结构,这将为我们提供对这款设备的硬件配置、设计特色以及技术细节的全面理解。 ### iPad2拆解过程全记录 #### 一、iPad2外观与设计 iPad2在设计上...

    苹果iPad2平板电脑说明书(因为超详细)

    苹果iPad2是一款深受用户喜爱的平板电脑,它的出现引领了平板电脑市场的潮流。对于初次接触iPad2的新手来说,了解如何使用这款设备至关重要。本文将详细介绍如何通过iTunes进行应用程序的同步,以及iPad2的基本操作...

    苹果iPad2中文版使用说明书超详细.doc

    苹果iPad2中文版使用说明书超详细 本文档是对苹果iPad2中文版...本文档提供了一个详细的苹果iPad2中文版使用说明书,涵盖了iTunes的使用、同步程序、同步音乐等多个方面的知识点,可以帮助用户快速掌握iPad2的使用。

    Ipad2图片视频上传教程

    1. **下载iTunes**:访问苹果官方网站或通过可信的第三方平台下载最新版本的iTunes。 2. **安装iTunes**:双击下载的安装包,按照提示逐步完成安装过程,包括接受许可协议、选择安装路径等步骤。安装完成后,系统将...

    ipad2 拆机图

    标题和描述中提及的“iPad2拆机图”指向了一次详细的拆解过程,旨在揭示苹果第二代平板电脑——iPad2的内部构造与组件。这一过程不仅对于维修人员至关重要,也对科技爱好者具有极大的吸引力,因为它揭开了iPad2的...

    ipad2刷机教程 ipad2

    在 iTunes 界面中,我们可以看到 iPad 版本相关信息。然后,我们按住键盘的 Shift 键+鼠标左键点击屏幕上的恢复按钮。在弹出的窗口中,我们选择刚才下载好的固件(现在最新的是 6.0.1),选中后点击打开。 五、恢复...

    判断设备型号例如苹果5s,ipad2

    `UIDevice`是Apple提供的一个系统类,它提供了一些关于当前设备的基本信息,包括设备名、系统版本、系统名称等。我们可以通过以下代码获取设备的型号: ```swift import UIKit let device = UIDevice.current let ...

    ipad2 中文版说明书(使用手册)

    3. 服务与支持:访问苹果官网获取技术支持、维修服务等信息。 通过以上内容,用户可以对iPad2的功能和使用有全面的认识,更好地享受这款设备带来的便利和乐趣。请根据实际情况参照《iPad2中文版说明书》进行操作,...

    iPad2玩家秘籍

    资源名称:iPad2玩家秘籍内容简介: 本书是一本关于iPad2的入门和晋级的教材,由浅入深,从最基础的讲起,逐渐深入,与日常工作学习生活结合相当紧密。面向所有知识层面的读者。 本书开篇便讲述了iPad 2的基本功能...

    IPAD2电脑充电软件

    标题中的“IPAD2电脑充电软件”指的是针对iPad2设备设计的一种通过USB接口与电脑连接进行充电的应用程序。这样的软件通常能模拟iPad的专用充电器,使得用户在外出时无需携带额外的充电器,只需通过电脑USB接口即可为...

    ipad2点位图

    ipad2点位图,维修用的着

Global site tag (gtag.js) - Google Analytics