LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 如何用Python收取邮件,并筛选币安的公告

如何用Python收取邮件,并筛选币安的公告

2020-09-17 杨卫祥 来源:区块链网络


最近币安的公告页面(链接)升级,无法通过爬虫的方式获取最新公告,包括非小号和MyToken也捕捉不到币安的公告,自己尝试了各种方法也没成功。


币安的公告经常会发出一些活动或者上币之类,比如某种币一旦有类似消息,很快会爆拉超过10个点,第一时间获得公告就至关重要。


后来突发其想,币安公告页面提供关注并邮件订阅功能,如下图,点击关注,需要登陆自己的币安账户,登陆成功之后右上角会显示自己的邮箱前缀,再点击关注新文章,这样有公告时会第一时间收到邮件,币安建议关注两个组:“最新公告”和“币币交易”。




接下来的问题就是如何用Python收到邮件,在网了寻找了很多,发现太多已经失效不能用了。


后来在这里https://www.liaoxuefeng.com/wiki/1016959663602400/1017800447489504找到一篇还能运行的。感谢这篇文章的作者廖雪峰,这篇文章阅读量87万多了,我直接在他的代码上更改的。


我要做的就是监控最新的邮件,然后用关键字binance去筛选收件人,如果是币安的邮件,就发钉钉提醒我。


测试了几个邮箱结果:

网易,经常出现登陆不上的情况 b'-ERR Unable to log on’,最后放弃

Gmail:首先需要开启'允许安全性较低的应用'https://myaccount.google.com/lesssecureapps。其次登陆后会的邮件提示'登录尝试已被阻止',这个要同意,证明是本人。安全性要求非常高,最后还是放弃了。

搜狐:发现其邮件索引是倒序,并且还有一个欢迎的新邮件,没调试好

QQ邮箱最好用,最先就选择了它。


使用的库是poplib

# 邮箱QQ 需要开启POP服务,并申请授权码,比使用密码更安全
pop3_server = 'pop.qq.com'
username = '[email protected]'
password = 'XXX' # 授权码
# 连接到POP3服务器:
server = poplib.POP3(pop3_server)
# 身份认证:
server.user(username)
server.pass_(password)
# list()返回所有邮件的编号:
resp, mails, octets = server.list()
# 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
num = 3 # 监控几个邮件
text_or_not = 1 # 是否需要查看正文,这个设置个开关,有时候正文内容太多,显示不方便
notice_List = [] # 内容列表
Subject_List = [] # 主题列表
From_List = [] # 发件人列表
# 最新一封邮件, 注意索引号从1开始, 最大的是最新的邮件
i = 0
index = len(mails)
while i < num: # 获取多个邮件
resp, lines, octets = server.retr(index - i)

# 可以获得整个邮件的原始文本:
msg_content = b'\r\n'.join(lines).decode('utf-8') #
# 解析出邮件:这个是库的内容,把邮件内容解析为Message对象
msg = Parser().parsestr(msg_content)

handle_info(msg)
Subject_List.append(Subject)
From_List.append(From)
i = i + 1
print('邮件主题', Subject_List)
print('发件人是', From_List)

通过以上程序就可以获得主题和发件人,接下来根据需要筛选就行了。


这里出现一个小插曲值得提下,原来处理邮件的函数名叫print_info(), 但我在输入 print(content)时,因为Pycharm在输入print回车会带出来print_info(content),导致耽误大半天时间找不出问题。所以print_info这种名字不能用,改成handle_info了


另外时间间隔我测试几天后,发现设置成至少设置成14秒,否则QQ邮箱会当成攻击关闭链接,不过延时还是不小。

while True:
try:
resp, mails, octets = server.list()
index = len(mails)
resp, lines, octets = server.retr(index)
msg_content = b'\r\n'.join(lines).decode('utf-8')
msg = Parser().parsestr(msg_content)
handle_info(msg)
# 新邮件提醒
if 1:
if Subject not in Subject_List:

content = '新邮件' + '\n' + Subject
print(content)
print('邮件正文', text_content)
send_msg1 = send_dingding_msg1(content)
print(send_msg1)
# break
# 币安新邮件提醒
if 1:
if 'binance' in From and (Subject not in Subject_List):
print('币安新公告', Subject)
content = '币安新公告' + '\n' + Subject
print('邮件正文', text_content)
send_msg1 = send_dingding_msg1(content)
print(send_msg1)
time.sleep(14)
except Exception as err:
time.sleep(2)
print('查询错误', err)


完整代码放在了Github上了:https://github.com/Yang-Weixiang/Python/blob/master/Mail/Fetch-Email-and-Binance-Latest-Announcements

—-

编译者/作者:杨卫祥

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...