Python Steem API介绍系列#2 - 帖子读取篇steemCreated with Sketch.

in #cn7 years ago (edited)

今天来说说如何获取和帖子相关的信息,最后完成一个很实用的小程序,可以自动发送指定帐号的当日最新文章汇总到你的邮箱,可以设定为一个Cron job,这样就完全自动了。感觉Steem API越来越好玩了呢。。。

顺便请教一下@oflyhigh@myfirst 两位大神,我打算测试一下发帖功能,计划把测试的帖子都加上”test”作为主标签,也是唯一标签,如果发个十来条测试帖子,不会被踩吧???

另外,根据@oflyhigh的建议,试了一下Steem官方Python API,感觉基本上和之前用的piston-lib一样,只是个别的类会有点不同。

# 安装官方Python库

pip3 install -U steem

# 读取用户发帖信息

这里主要用到了BlogPost两个类。详细的方法列表请参考github上的源文件和官方文档。

首先,导入对应的Blog类:

from steem.blog import Blog
blog = Blog("yuxi")

读取最新的两篇文章:

print( blog.take(2) )

读取文章相关的信息,比如:标题,创建时间,文章链接地址,文章分类,标签,获得的upvote数量,获得奖励/预计奖励等等

for p in blog.take(3):
  print("created: %s"    % p['created'])
  print("permlink: %s"   % p['permlink'])
  print("comments: %s"   % str(len(list(p.get_replies()))))
  print("url: %s"        % p['url'])
  print("categories: %s" % str(p['category']))
  print("tags: %s"       % str(p['tags']))
  print("votes: %s"      % str(p['net_votes']))
  print("reward: %s"     % str(p['total_payout_value'] + p['pending_payout_value']))
  print()

获取某个用户的评论信息

comments = Blog("yuxi", True)
print (comments.take(2))

自动发送感兴趣用户的当日最新帖子到指定邮箱

其实有了上面的Blog和Post类,玩法就很多了,比如:可以让程序自动搜集指定用户的特定文章,再生成RSS feed放到一个web服务器上,这样就可以在RSS阅读器中阅读了,当然也可以设定一个Cron job,每天自动发送一条感兴趣文章的汇总。更多的玩法欢迎大家大开脑洞,在下面留言。

下面实现一下自动发送感兴趣作者的当日最新文章到指定邮箱,这里只列举了 @myfirst, @oflyhigh, @tumutanzi三位的每日文章。

import smtplib
from email.mime.text import MIMEText
from datetime import datetime
from steem.blog import Blog

users  = ["myfirst","oflyhigh",”tumutanzi”]

# 只检查最新3篇文章,再多了我就怀疑文章的质量了,当然也许有大牛能每天创作更多文章
number_of_posts_to_check = 3

host   = 'https://steemit.com'

content = ''

for user in users:
  content += 'From '  + user + '<br/>'
  content += '------------------<br/>'
  posts = Blog(user)
  for p in posts.take(number_of_posts_to_check):
    p_date = p['created']
    today = datetime.today().date()
    created_today = (p_date.date()==today)

    if created_today == True:
      content += '<a href="' + host+p['url']+'">' + p['title'] + "</a><br/>"
      content +=  ' Category: ' + str(p['category']) + "<br/>"
      content +=  ' Tags: ' + str(p['tags']) + "<br/>"
      content +=  ' Votes: ' + str(p['net_votes']) + "<br/>"
      content +=  ' Comments: ' + str(len(list(p.get_replies()))) + "<br/>"
      content +=  ' Rewards: ' + str(p['total_payout_value'] + p['pending_payout_value']) + "<br/>"
      content +=  '<br/>'

  content +=  '<br/>'

fromaddr = '你的Gmail邮箱'
toaddrs  = '你的接收邮箱'
subject = 'Daily posts: ' + datetime.today().strftime('%Y-%m-%d')
message = MIMEText(content.encode('utf-8'), _subtype='html', _charset='utf-8')
message['Subject'] = subject

username = 'XXXXXXXX'
password = 'XXXXX'
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, message.as_string())
server.quit()

这是我收到的email:

https://steemit.com 首发。非常感谢阅读,欢迎FOLLOW和Upvote @yuxi 激励我创作更多更好的内容。

Sort:  

发测试贴加test 唯一标签
一般不会有人踩

你的标签处,cn显示重复了 😄

想着cn-programming可能针对更专的人群,就加了。。。

误会,我说你的程序
看你的贴图,文章tags

API返回的就是这样,我想第一个cn是主标签吧,第二个往后的是其他标签。我也就没多做处理。

大哥居然对我感兴趣了……

喜欢你的文章,想不对你感兴趣都做不到啊。。。

脸红到脖子根了,哈哈,谢谢了啦。

Coin Marketplace

STEEM 0.18
TRX 0.16
JST 0.030
BTC 62226.04
ETH 2440.49
USDT 1.00
SBD 2.63