[learning]steem区块链机器人开发学习活动(4)-基础点赞机器人

in STEEM CN/中文4 years ago (edited)

目录:

steem api,官方帮助文档:https://developers.steem.io/apidefinitions/

前面学习了一些基础知识,下面我们以开发一个点赞机器人作为例子,学习学习。

我们首先简单的设计一个机器人:

假设手头有个列表,这个列表手动更新,名单里的人点赞最新文章。每10分钟检测一次是否需要点赞。

设定一个点赞列表

name_list=[{"name":"maiyude","percent":100},{"name":"justyy","percent":100}]

简单这样写个字典就好,第一个参数是名字,第二个参数是点赞多少%。这里我们设定点赞maiyude和justyy两个人,点赞100%。

使用get_blog API获取最新文章信息

然后就是获取名单里最新文章的链接,这里可以使用get_blog API获取。一个示例:

import requests

nodes="https://api.justyy.com"
data={"jsonrpc":"2.0", "method":"condenser_api.get_blog", "params":["maiyude",0,3], "id":1}
r=requests.post(nodes,json=data)
result=r.json()["result"]

author=result[0]["comment"]["author"]#文章作者
permlink = result[0]["comment"]["permlink"]  # 文章链接
title = result[0]["comment"]["title"]  # 文章标题
print(author,permlink,title)

输出结果:
maiyude learning-steem-3-steem-api-op [learning]steem区块链机器人开发学习活动(3)-熟悉steem的API以及构建一个OP

现在我们获得了maiyude的最新文章链接,我们可以点赞了。

构建一个点赞OP

我们使用上节课学习过的知识,给上面获取的链接点赞。

from beem.steem import Steem
from beembase import operations
from beem.transactionbuilder import TransactionBuilder
import requests
nodes="https://api.justyy.com"
player="nutbox.awesome"
keys="5KYF68tH7"

name_list=[{"name":"maiyude","percent":100},{"name":"justyy","percent":100}]


author="maiyude"
permlink="learning-steem-3-steem-api-op"
s = Steem(keys=[keys],node=nodes)

weight=name_list[0]["percent"]*100
print(weight)
op=operations.Vote(**
                      {
                          'voter': player,
                          'author': author,
                          'permlink': permlink,
                          'weight': weight
                      }
                      )
tx = TransactionBuilder(steem_instance=s)
tx.appendOps(op)
#把签名添加
tx.appendSigner(player, "posting")
tx.sign()
broadcast=tx.broadcast()
print(broadcast)

image.png

我们可以看到在区块浏览器上点赞成功,接下来我们把这几个步骤组合起来,按照我们的前面写的需求,写一个简单的点赞机器人。

按照需求写点赞机器人

from beem.steem import Steem
from beembase import operations
from beem.transactionbuilder import TransactionBuilder
import requests
import time

nodes="https://api.justyy.com"
player="nutbox.awesome"
keys="5KYFnp68tH7"

name_list=[{"name":"maiyude","percent":100},{"name":"justyy","percent":100}]

while True:
    for i in name_list:
        name=i["name"]#名字
        weight=i["percent"]*100#点赞比例

        data={"jsonrpc":"2.0", "method":"condenser_api.get_blog", "params":[name,0,3], "id":1}
        r=requests.post(nodes,json=data)
        result=r.json()["result"]

        author=result[0]["comment"]["author"]#文章作者
        permlink = result[0]["comment"]["permlink"]  # 文章链接
        title = result[0]["comment"]["title"]  # 文章标题

        print("点赞:",name,"文章:",title,permlink)

        s = Steem(keys=[keys],node=nodes)

        op=operations.Vote(**
                              {
                                  'voter': player,
                                  'author': author,
                                  'permlink': permlink,
                                  'weight': weight
                              }
                              )
        tx = TransactionBuilder(steem_instance=s)
        tx.appendOps(op)
        #把签名添加
        tx.appendSigner(player, "posting")
        tx.sign()
        broadcast=tx.broadcast()
        print(broadcast)

    print("名单点赞完成,休息10分钟")
    time.sleep(60*10)

image.png

显示点赞程序运行良好,我们看看区块上的信息如何

image.png

区块上也显示成功。

课后思考

胆大心思的你,按照这个程序运行,肯定会马上发现很多问题,比如重复点赞报错了怎么办?RC不够怎么办?他一天发N篇文章,我不想重复点怎么办?

这些问题我们未来几节课后一一解决,现在留作课后思考题,仔细思考一下。

课后作业

按照教程,尝试一下

上节课的课后作业答案:
https://github.com/maiyude2018/steem-leanrning/blob/main/3%E8%AF%BE%E5%90%8E%E9%A2%98%E7%AD%94%E6%A1%88.py

Sort:  

你好鸭,maiyude!

@boylikegirl给您叫了一份外卖!

南瓜糕点

吃饱了吗?跟我猜拳吧! 石头,剪刀,布~

如果您对我的服务满意,请不要吝啬您的点赞~

石头

[WhereIn Android] (http://www.wherein.io)


It’s a tie! 平局!再来!下回我再出拳头!


You lose! 你输了!乖乖的给我点赞吧!

厉害了👍

[WhereIn Android] (http://www.wherein.io)