很多小伙伴问我学完Python有没有什么好的项目可以实践。其实做项目主要是按需求来的。但是对于一个初学者来说,很多复杂的项目是无法独立完成的,所以博主选择了一个非常适合初学者的项目。内容不是很复杂,但是很有趣。没有比项目更好的了。在这个项目中,我们将构建一个比特币价格警报服务。您将主要了解HTTP请求以及如何使用requests包发送这些请求。此外,您还将了解webhook以及如何使用它来将您的Python应用程序与外部设备(例如手机警报或Telegram服务)连接起来。仅需不到50行代码即可完成一个比特币价格提醒服务的功能,并可轻松扩展到其他加密数字货币和服务。我们马上来看看。Python中的比特币价格提醒我们都知道比特币是一个动人的东西。你无法真正知道它的去向。因此,为了避免我们不得不反复刷新以查看发生了什么,我们可以制作一个Python应用程序来为您完成这项工作。为此,我们将使用IFTTT,一个流行的自动化站点。IFTTT(“ifthis,thenthat”)是一个可以在不同的应用程序设备和网络服务之间架起桥梁的工具。我们将创建两个IFTTT小程序:一个用于在比特币价格跌破特定阈值时发出紧急警报,另一个用于定期更新比特币价格。这两个程序都将由我们的Python应用程序从CoinmakercapAPI触发点击此处获取数据。一个IFTTT程序由两部分组成:触发部分和动作部分。在我们的例子中,触发器是IFTTT提供的Webhook服务。您可以将Webhook视为“用户定义的HTTP回调”。更多信息请参考:WEBHOOK我们的Python应用程序将向webhookURL发送HTTP请求,然后webhookURL将触发一个动作。有趣的部分来了,这个动作可以是任何你想要的。IFTTT提供多种操作,例如发送电子邮件、更新Google电子表格,甚至给您打电话。配置项目如果你安装了python3,那么只需要安装一个requests包。$pipinstallrequests==2.18.4#我们只需要将requests包复制代码,选择一个编辑器,比如Pycharm进行代码编辑。获取比特币价格代码很简单,可以在控制台中完成。导入requests包,然后定义bitcoin_api_url变量,即CoinmarketcapAPI的URL。接下来,使用requests.get()函数发送HTTPGET请求并保存响应。由于API返回JSON响应,我们可以通过.json()将其转换为Python对象。>>>导入请求>>>bitcoin_api_url='https://api.coinmarketcap.com/v1/ticker/bitcoin/'>>>response=requests.get(bitcoin_api_url)>>>response_json=response.json()>>>type(response_json)#API返回一个列表
{{Value1}};创建动作,然后完成小程序设置;将它们连接在一起现在我们有了IFTTT,这是代码。您将从创建如下所示的标准Python命令行应用框架开始。把代码上去,保存为bitcoin_notifications.py:importrequestsimporttimefromdatetimeimportdatetimedefmain():passif__name__=='__main__':main()复制代码接下来我们还要将前面两个Python的代码进行转换console部分分为两个函数,函数会返回最新的比特币价格,然后分别post到IFTTT的webhook。在main()函数上方添加以下代码。BITCOIN_API_URL='https://api.coinmarketcap.com/v1/ticker/bitcoin/'IFTTT_WEBHOOKS_URL='https://maker.ifttt.com/trigger/{}/with/key/{your-IFTTT-key}'defget_latest_bitcoin_price():response=requests.get(BITCOIN_API_URL)response_json=response.json()#将价格转换为浮点数returnfloat(response_json[0]['price_usd'])defpost_ifttt_webhook(event,value):#将发送到IFTTT服务的有效负载data={'value1':value}#插入我们想要的事件ifttt_event_url=IFTTT_WEBHOOKS_URL.format(event)#向webhookURL发送HTTPPOST请求requests.post(ifttt_event_url,json=data)复制代码get_latest_bitcoin_price除了将price由字符串改为浮点数外,基本相同。psot_ifttt_webhook需要两个参数:事件和值。事件参数对应于我们之前命名的触发器名称。同时,IFTTT的webhooks允许我们通过请求发送额外的数据,数据是JSON格式。这就是我们需要value参数的原因:在设置我们的小程序时,我们在消息文本中有{{Value1}}标记。此标记将替换为JSON负载中的values1文本。requests.post()函数允许我们通过设置json关键字来发送额外的JSON数据。现在我们可以继续我们应用程序的核心主要功能代码。它包含一个whileTrue循环,因为我们希望应用程序永远运行。在循环中,我们调用CoinmarkertcapAPI获取最新的比特币价格,并记录当前的日期和时间。根据当前价格,我们将决定是否要发送紧急通知。对于我们的定期更新,我们会将当前价格和日期放入bitcoin_history列表中。一旦列表达到一定数量(比如5),我们将把它包起来,发送更新,然后为后续更新重置历史记录。要注意的一件事是避免过于频繁地发送消息,原因有两个:CoinmarketcapAPI声明它们每5分钟才更新一次,因此如果您的应用向CoinmarketcapAPI发送过多请求,那么更新太频繁是没有用的,您的IP可能被禁止。因此,我们最后添加了一个“gotosleep”睡眠,设置至少5分钟获取新数据。以下代码实现了我们需要的功能:BITCOIN_PRICE_THRESHOLD=10000#将其设置为任何你喜欢的defmain():bitcoin_history=[]whileTrue:price=get_latest_bitcoin_price()date=datetime.now()bitcoin_history.append({'date':date,'price':price})#Sendanemergencynotificationifprice
(break)标签创建一个新行#加入由
标签分隔的行:row1
row2
row3return'
'.join(rows)复制代码,最后在手机端显示结果如下:那么,我们的功能就完成了,只要比特币的价格是更新了,手机端有提醒。当然,如果你觉得烦,你也可以在应用中将其关闭。
