Discord社区正在建设中, 以后此类文章将首发在Discord.
今天刘社长给起了非常可爱的名字叫兔子铃铛.
代码开源地址:
https://github.com/zlexdl/chikoroko_bot
代码完全开源, 但是想要了解世博机器人如何设计, 如何开发的,请看此文章.
在开发这个机器人的那天晚上, 一位推特网友提醒了我, 我才动手去开发.
从构思到开发完成,很快,不到2个小时.
因为足够简单,所以就作为教学实战的第一篇给大家来入门吧.
第一步: 设计
流程图如下:
- 取网页数据
- 拿到取得的数据去数据里查询
- 如果发现数据库中没有网页上的新数据, 说明是新的, 所以就可以发推送
- 然后要把新的数据保存在数据库中, 以免第二次再发.
- 休息30秒后,从头再来.
第二步: 技术调研
使用语言: Python 3.X
使用Python 第三方类库: requests, BeautifulSoup, sqlalchemy, tweepy
- Requests是一个基于Apache2协议开源的Python HTTP库。
- Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。
- 提供了SQL工具包及对象关系映射(ORM)工具
- Tweepy是Twitter官方提供的Python第三方开发库,简单好用易学高效。
第三步: 实战
有了这些技术就足够了.
根据设计流程图, 首先去 expo.chikoroko.art 取网页数据.
功能一:
先要使用Requests 做个HTTP请求
url = 'https://expo.chikoroko.art/'
res = requests.get(f"https://expo.chikoroko.art/", headers={'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"})
print(res.text)
执行一下, 就能看到取得到了html代码.
功能二:
接下来要使用Beautiful Soup 取找这个按钮Collect now for free .
如何找呢?
使用浏览器的开发者工具, 在想要找的元素上点击鼠标右键 点击 检查 按钮
就很容易找到这个按钮的代码了
分析一下这个按钮是使用的span 标签, 并且class 是 text-wrapper button-text
我们试着用代码找一下
因为有多个这样的按钮,所以使用了for 语句
运行结果如下:
发现了两个**Collect now for free ->**按钮
这里需要保存状态, 才能判断出是否是新的.
接下来有两种方案,保存我们的状态.
- 保存Cookie, 只要出现Collect now for free 按钮, 就代表有新的.
- 保存每个nft名到数据库, 只要数据库中没有新的nft名就代表有新的.
我这里选择了第二种, 以后再讲解第一种.
这里给大家留个作业: 请根据上面的方法, 找到nft名字.
功能四: 设计数据库
数据库非常简单, 两个字段(其实一个字段也够了)
表名:chikoroko
- id :自增型
- name: 保存nft名字
找到名字自后保存到这个name中就可以了.
功能五: sqlalchemy 的使用
- 红色框内的代码是导入要使用的库
- 橙色框内的代码是连接数据库以及初始化Session
- 定义和数据库中和表一一对应的Class
然后和刚才的代码放在一起, 在再最后取得nft名之后把nft名字保存在数据库中.
执行结果:
再看数据库中的数据:
已经保存成功了!!
功能六: 发送推送
以发送推特为主:
分二步:
- 引入
- 初始化
推特key的话, 填写你们自己的.
只有申请了推特开发者,才有这个key. 申请不到可以想办法买.
发送推特的功能使用以下代码:
api.update_status(message)
最后一步:
参考我提供的代码, 设置好你自己的推特key, 连接上数据库, 就可以运行了, 如果有任何问题,群里讨论
https://github.com/zlexdl/chikoroko_bot
如果你觉得对你有用
请关注我的mirror: https://mirror.xyz/zlexdl.eth
和关注我的推特:https://twitter.com/zlexdl
我的Notion地址:https://zlexdl.notion.site/f4aa875aa7be4ccca3918a783c499959