亚马逊AWS申请退款流程

15年的时候亚马逊AWS进入国内、开始提供1年免费试用、于是申请试用、开通之后选择了AWS日本东京的机房、却发现国内的网速实在是不敢恭维、所以就一直没有真正使用;后来就忘记这事儿。

16年4月中旬的时候接到AWS国内客服的电话说是AWS的主机还一直在运行、询问是否还需要继续使用。焕然大悟立马登陆AWS账户、发现3月份已经产生了$60的费用、而4月份也已经有$40费用产生。

我的小心脏立马就不淡定了、看了一下详细账单AWS T2的价格是8美分/小时、一个月$60的费用在国内按照阿里云的价格可以买4核8G内存的主机了。

立马想到看能不能申请退款、并没有真正使用、只是EC2一直开着的、所以尝试练习AWS客服、虽然AWS已经进入国内但是客服还是在美国的、所以还得写英文邮件。

继续阅读亚马逊AWS申请退款流程

亚马逊Kindle包月服务来啦

最近亚马逊中国偷偷上线了Kindle Unlimited电子书包月服务;

简单来说就是:

1、月费:12大洋

2、开通亚马逊电子书包月服务之后、每一个月可以同时借阅10本书、还书之后可以再次借书、最高同时借阅10本。

3、亚马逊中国4W多本电子书以及3500本进口英文书都可以借阅。

4、借书之后你所有的设备上都可以阅读;也就是说一个亚马逊账号、可以你们全家人使用。

5、可以使用0.1元开通7天试用

PS:访问Kindle Unlimited即可申请开通Kindle Unlimited服务

Kindle Unlimited
Kindle Unlimited服务

批量下载新浪SAE上Storage的数据

批量下载新浪SAE上Storage的数据

可能很多朋友在用新浪的SAE来作为的自己的WordPress博客;Hiadmin博客从SAE开始内测期间就开始使用了。最近由于备案的问题导致域名解析被SAE停掉了;所以想着把WordPress迁移到VPS上;

但是在迁移的过程中发现博客上有很多图片资源放在SAE的Storage上,而SAE后台却不提供批量下载的功能;几年的数据如果一张一张的下载的话会相当的消耗时间。

后来查询SAE文档之后发现Storage提供API接口可以批量下载。

批量下载SAE上Storage的数据

首先需要安装Cyberduck或者swift这类工具; 安装完成之后新建连接,在弹出的对话框里面输入如下信息

类型:Swift。
服务器:auth.sinas3.com
端口:443(默认)
用户名:应用AccessKey(在应用“汇总信息”页面中查看)
密码:应用SecretKey(在应用“汇总信息”页面中查看)

填写完成后点击连接。如果弹出auth.sinas3.com,api.sinas3.com相关证书问题,请选择信任. 

连接成功之后就和FTP工具一样可以直接下载整个文件夹。

微博抢红包辅助工具

微博抢红包辅助工具

最近微博上有很多企业在发红包;当然由于你不知道对方什么时候会发红包;经常会出现你打开红包准备开抢的时候却发现已经没有红包了。
所以我准备弄一个红包提醒工具;简单来说就是你需要提交你要关注的红包页面;脚本自动运行检测有红包可以抢的时候给你发一份邮件提醒;
剩下的你能不能抢得到就完全看你运气了。

微博红包通知功能

1.  监控指定页面;
2.  当发现有红包可以抢
3.  发送邮件到指定的邮箱里面
4.  完工

是不是很简单;其实说起来就2个功能
1. 检测页面是否有红包可以抢
2. 当有红包抢的时候发送一个邮件

功能分析

1. 打开红包页面'http://huodong.weibo.com/hongbao/1768198384'
2. 如果显示分享说明不能抢红包;如果显示抢红包就说明你可以抢了
3. 所以要做的就是判断这个页面显示的文字了。
4. 当得到一个可以抢红包的信息之后就可以发送邮件到指定邮箱了

很简单有没有。

首先我们要导入需要用到的库

import requests
import re
import smtplib
import ConfigParser
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart

这里我们用到requests第三方库;请自行下载安装

判断红包页面是否有红包可以抢

def weiboHongBao(url):
'''
分析指定微博红包页面是否有红包可以领取
如果有红包可以领取就调用sendMail函数来发送邮件提醒
'''
regexGain = u"抢红包"
regexShare = u"分享"
r = requests.get(url)
if r.status_code == 200:
    txt = r.text
    if re.search(regexGain, txt) != None:
        hongbao = re.search(regexGain, txt)
        result = "Have a HongBao"
        print result,url
        sendEmail(url,result)
    elif re.search(regexShare, txt) != None:
        hong = re.search(regexShare, txt)
        result =  "Don't have a HongBao"
        print result,url
    else:
        print "Error"

其实这段代理里面就是用requests下载整个页面的内容;然后用正则表达式去查找
如果发现可以抢红包就调用发送邮件的函数

发送邮件

当我们得到有红包可以抢的时候就需要通过发送邮件来通知了

def sendEmail(url, message):
'''
发送邮件到指定邮箱地址
'''
#获取配置信息
cf = ConfigParser.ConfigParser()
cf.read("config.ini")
mailHost = cf.get("info", "mailHost")
mailUser = cf.get("info", "mailUser")
mailPassword = cf.get("info", "mailPassword")
toMail = cf.get("info", "toMail")

#设置邮件信息
subject = message
msg = msg = MIMEMultipart("alternative")
msg["Subject"] = Header(subject,"utf-8")
part = MIMEText(subject +';'+ url,"html") #设置以html格式发送内容
msg.attach(part)

#发送邮件
smtp = smtplib.SMTP()
smtp.connect(mailHost) 
smtp.login(mailUser,mailPassword) 
smtp.sendmail(mailUser,toMail,msg.as_string())
print "Send Email Finish"
smtp.quit() 

这段代理里面为了让代理更易用;所以吧发送邮件的账号密码以及接收邮件的账号放到配置文件里面;
所以需要用'Python2'里面'ConfigParser'库来解析配置文件的内容。

准备一个检测列表

前面的weiboHongBao(url)函数需要传入一个url地址;所以我们使用单独的一个文件来保存要检测的红包页面地址。
这样如果我们需要添加检测url的话会比较简单;不用修改执行代码;

def weiboHongBaoList():
global info
info = [
    "http://huodong.weibo.com/hongbao/1610436341", #神州租车
    "http://huodong.weibo.com/hongbao/2411842134", #360
    "http://huodong.weibo.com/hongbao/1830346007", #易到用车
    "http://huodong.weibo.com/hongbao/1768198384", #天猫
    "http://huodong.weibo.com/hongbao/1746687693", #航美传媒
    "http://huodong.weibo.com/hongbao/3535169894"  #百度卫士  
    ]
return info
这个代码就是一个列表;负责给weibo.py提供url地址的。

运行结果像这样

检测列表里面的每一个url发现可以抢就发送邮件
Don't have a HongBao http://huodong.weibo.com/hongbao/1610436341
Don't have a HongBao http://huodong.weibo.com/hongbao/2411842134
Don't have a HongBao http://huodong.weibo.com/hongbao/1830346007
Don't have a HongBao http://huodong.weibo.com/hongbao/1768198384
Don't have a HongBao http://huodong.weibo.com/hongbao/1746687693
Have a HongBao http://huodong.weibo.com/hongbao/3535169894
Send Email Finish
[Finished in 3.1s]

完整代理如下

weibo.py的代码如下

# /usr/bin/env python
# encoding:utf-8
# use Python2

import requests
import re
import smtplib
import ConfigParser
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart

#==================================================
def weiboHongBao(url):
    '''
    分析指定微博红包页面是否有红包可以领取
    如果有红包可以领取就调用sendMail函数来发送邮件提醒
    '''
    regexGain = u"抢红包"
    regexShare = u"分享"
    r = requests.get(url)
    if r.status_code == 200:
        txt = r.text
        if re.search(regexGain, txt) != None:
            hongbao = re.search(regexGain, txt)
            result = "Have a HongBao"
            print result,url
            sendEmail(url,result)
        elif re.search(regexShare, txt) != None:
            hong = re.search(regexShare, txt)
            result =  "Don't have a HongBao"
            print result,url
        else:
            print "Error"

#=======================================================
def sendEmail(url, message):
    '''
    发送邮件到指定邮箱地址
    '''
    #获取配置信息
    cf = ConfigParser.ConfigParser()
    cf.read("config.ini")
    mailHost = cf.get("info", "mailHost")
    mailUser = cf.get("info", "mailUser")
    mailPassword = cf.get("info", "mailPassword")
    toMail = cf.get("info", "toMail")

    #设置邮件信息
    subject = message
    msg = msg = MIMEMultipart("alternative")
    msg["Subject"] = Header(subject,"utf-8")
    part = MIMEText(subject +';'+ url,"html") #设置以html格式发送内容
    msg.attach(part)

    #发送邮件
    smtp = smtplib.SMTP()
    smtp.connect(mailHost) 
    smtp.login(mailUser,mailPassword) 
    smtp.sendmail(mailUser,toMail,msg.as_string())
    print "Send Email Finish"
    smtp.quit() 

if __name__ == "__main__":
    import hongbao
    for x in hongbao.weiboHongBaoList():
        #print x
        weiboHongBao(x)
    #sendEmail("http://www.hiadmin.org","OK")

‘hongbao.py’的代码(就是url列表)

#! /usr/bin/env python
#! encoding:utf-8

def weiboHongBaoList():
    global info
    info = [
        "http://huodong.weibo.com/hongbao/1610436341", #神州租车
        "http://huodong.weibo.com/hongbao/2411842134", #360
        "http://huodong.weibo.com/hongbao/1830346007", #易到用车
        "http://huodong.weibo.com/hongbao/1768198384", #天猫
        "http://huodong.weibo.com/hongbao/1746687693", #航美传媒
        "http://huodong.weibo.com/hongbao/3535169894"  #百度卫士  
        ]
    return info

if __name__ == "__main__":
    for i in weiboHongBaoList():
        print i

config.ini配置文件

[info]
mailHost = smtp.126.com
mailUser = userxxxx@126.com
mailPassword = *******
toMail = *******@qq.com

接收邮件建议用QQ邮箱;QQ上会弹出提示信息。

怎么样定时运行

这个小脚本里面没有用定时任务;所以如果你希望定时检测的话windows用户请使用计划任务来执行weibo.py就可以了。
linux用户你应该知道怎么样用crond

使用说明

1.  修改config.ini配置文件;填写相应的内容即可
2.  编辑hongbao.py文件在里面加入你要检测的红包页面
3.  运行 weibo.py即可啦

完整代码下载地址

GitHub代码

电子书下载工具EbookDownloadTools

电子书下载工具EbookDownloadTools

子乌书简是我看电子书内容的主要来源;书简里面的书由子午手动校对所以质量都比较可靠; 去年子乌书简关闭之前我写过一个Python脚本吧所有的书籍下载回来;今年子乌书简重开之后Python不能用 所以就用GOlang重新写了一个程序来下载子乌书简上的书籍;

为了减轻对子乌书简服务器的压力;EbookDownloadTools一次只能下载一个分类下的书籍

为什么写这个工具

去年用Python写了一个脚本将子乌书简上的电子书内容全部下载到本地;

后来子乌书简经历了关闭改版重新开张;所以以前的Python脚本已经不可用;本来想着修改一下之前的Python脚本即可;

不过最近在学习Go;所以就索性用Go重新写了一个程序

用到的一些第三方模块

1. goquery  ;用于提取网页里面的内容;如标题/url下载地址等等
2. goini    ;用于从配置文件里面读取内容

配置文件格式

[info]
BookCategory = tljs
SavePath = F:/book

配置文件说明

[info]
BookCategory = tljs   
;要下载的分类书籍|请确保填写的分类地址和http://book.zi5.me/gentre上的分类缩写是一样的;
;http://book.zi5.me/archives/book-gentre/tljs 这个是推理惊悚的分类;填写tljs即可
SavePath = F:/book
;本地存放书籍的目录,请填写一个本地已存在的目录

工具下载地址

  1. EbookDownloadTools.exe
  2. Github代码地址

用Golang发送邮件

用Golang发送邮件

最近在学习Golang、顺便在写爬虫的过程中需要把爬取出来的结果通过邮件发送到指定邮箱里面保存; 所以需要用到Golang里面的smtp模块;

但是从Go官方的smtp介绍中直接使用官方的测试代码虽然能发送邮件、但是不能设置邮件主题甚至连邮件内容都不能设置;

所以借鉴了网上的一些经验和Go官方的smtp测试代码之后完成能够发送邮件主题和邮件内容;

用到的Go库

import (
    "fmt"
    "net/smtp"
    "strings"
)

代码如下:

func SendToMail(user, password, host, to, subject, body, mailtype string) error {
    hp := strings.Split(host, ":")
    auth := smtp.PlainAuth("", user, password, hp[0])
    var content_type string
    if mailtype == "html" {
        content_type = "Content-Type: text/" + mailtype + "; charset=UTF-8"
    } else {
        content_type = "Content-Type: text/plain" + "; charset=UTF-8"
    }

    msg := []byte("To: " + to + "rnFrom: " + user + "<" + user +
        ">rnSubject: " + subject + "rn" + content_type + "rnrn" + body)
    send_to := strings.Split(to, ";")
    err := smtp.SendMail(host, auth, user, send_to, msg)
    return err
}

测试发送邮件代码:

func main() {
    user := "huaisha1224@126.com"
    password := "********"
    host := "smtp.126.com:25"
    to := "279478776@qq.com"
    subject := "使用Golang发送邮件"
    body := `
       <html>
       <body>
       <h3>
       "Test send to email"
       </h3>
       </body>
       </html>
       `
    fmt.Println("send email")
    err := SendToMail(user, password, host, to, subject, body, "html")
    if err != nil {
        fmt.Println("Send mail error!")
        fmt.Println(err)
    } else {
        fmt.Println("Send mail success!")
    }

}

运行代码

cmd下切换到代码目录下;运行go run smtp.go即可发送邮件了

我的不是Go黑

我的不是Go黑
获取本机操作系统版本
python代码
>>> import platform
>>> print platform.platform()
Windows-8-6.2.9200

Go代码;得自己写;没有现成的模块可以用
有一个runtime.GOOS可以获得到操作系统的类型(windows/linux)
还有一个runtime.GOARCH 可以得到你的操作系统是32/64或者arm
就是不愿意直接告诉你的操作系统版本
获取本机计算机名和IP地址和MAC地址
python 获取计算机名称和IP地址
>>> myname = socket.getfqdn(socket.gethostname())
>>> myaddr = socket.gethostbyname(myname)
>>> print myname
Win8_T400
>>> print myaddr
192.168.20.1
没有幂计算
在Python中如果要计算3的5次方;3**5即可

Go里面居然没有幂计算符号;你就乖乖的3*3*3*3*3
要是你想计算3的10次方怎么办?

我为什么更喜欢用Uber、而不是更便宜的滴滴快的

我为什么更喜欢用Uber、而不是更便宜的滴滴快的
——————————————-

目前为止我使用过国内所有的专车软件;相比而言我更喜欢Uber;原因如下

1、Uber的派单模式
2、Uber打车不需要提前告诉司机目的地
3、Uber的优惠券使用规则、简单明了
4、Uber的推荐奖励政策
5、Uber行程单直接发送邮件、方便查看详情

###目前为止我的专车行程单
1、Uber的行程单:200+
2、一号专车行程单:10+
3、神州专车行程单:50+
4、滴滴专车行程单:10+
5、易到专车行程单:6+

###各专车之间的价格
我家在杭州郊区天都城(你没看错就是那个新闻上说的有铁塔有大街的那个模仿之都);
公司在杭州拱墅区;家里到公司有14公里左右;

下面是我从家里到公司的打车价格;都选择最便宜的车型

1、出租车价格:45-55之间;晚上打表的基础上加20才肯去;平时45;晚上65
2、易到价格:65-75之间;一般都会有15 20元的优惠券;实际价格40+
3、一号价格:65-75之间;那段时间有很多25元的优惠券;实际价格40+
4、神州价格:65-75之间;用25和28的优惠券;实际价格40左右
5、Uber价格:30-38之间;Uber的优惠券一般是10元或者打7折;实际价格20-28+
6、滴滴快车:20-28之间;如果是滴滴专车那么和神州什么的价格一样的;快车价格更便宜。

从上面的价格可以看出;在用优惠券的情况专车价格和出租车基本上持平;如果你用Uber或者滴滴快车那么比出租车便宜50%左右。;所以我们家后来的出行就全部选择Uber。

###我为什么选择Uber而不是最便宜的滴滴快车
从我上面的价格可以看得出来;滴滴快车其实比Uber要便宜;但是我还是选择使用Uber;

1、Uber的派单模式;更受欢迎。
我在体验滴滴快车的过程中;经常遇到通知了60辆车;但是没司机抢单;而Uber和神州的派单模式优势就马上体现出来;只要你周边有车你就肯定能打到车;乘客不需要知道周边是100辆车还是只有1辆车;我只需要打的到车就行。

2、打车不需要提前告知司机目的地;
以前用快的滴滴打出租车的时候就进经常遇到司机挑单;因为你告诉了司机你的上车地点和下车地点;司机完全可以计算自己的收益做出选择;现在国内的所有专车都是这种模式;提前告诉司机乘客的目的地;很多司机就可以选择性的抢单;

但是Uber你只要输入上车地点即可;等你上车之后直接告诉Uber司机你的目的地;完全不用担心司机拒单。

3、滴滴专车优惠券限制条件太多;
滴滴专车的优惠券是我用过所有专车中限制条件最多的;不但要求特定车型;还有金额要求;比如满100减40元;机场单减50;高级车型减30;高级车型我下单开个车门之后24元起步价没了;30能干个啥。
Uber的优惠券;8元优惠券就是所有车型减8元;7折优惠券就是每一个行程打7折;

4、推荐奖励政策;
Uber的推荐奖励经过几个阶段;刚刚进入国内的时候推荐一个用户奖励50元余额;14年年底下降到30元余额;4月底推荐一个用户奖励一张30元优惠券;3个月有效期;所有Uber车型可用。
滴滴的推荐奖励政策;推荐一个新用户奖励30元专车优惠券;7天有效期;只能用于专车;滴滴快车不可用。

5、专车行程单;
Uber的行程单都是发送到你的注册邮件、真的很方便查看你的历史行程的;如果你们公司能报销专车的费用的话;就会发现能够打印行程单的优点有多么的激动人心。

当然Uber也会很多不好的地方;没有客服电话;永远只能邮件联系;服务器在国外登陆Uber很慢;地图定位不准确。但是这些问题在我看来都不是事儿;