Actually , Projects are mainly based on needs . But for a beginner , Many complex projects cannot be completed independently , So the blogger chose a project that is very suitable for beginners , The content is not very complicated , But it's very interesting , I believe it is the best project for beginners Xiaobai .
In this project , We're going to set up a bitcoin price reminder service .
HTTP Request , And how to use it requests Package to send these requests .webhooks And how to use it will Python app Connect to external devices , For example, mobile phone reminder or Telegram service .Less than 50 Line of code can complete the function of a bitcoin price reminder service , And it can be easily extended to other encrypted digital currencies and services .
Now let's take a look at .
use Python Realize bitcoin price reminder
We all know , Bitcoin is a changing thing . You can't really know where it's going . therefore , In order to avoid repeated refresh and check the latest developments , We can make a Python app To work for you .
So , We will use a popular automated website IFTTT.IFTTT**("if this, then that")** Is one that can be in different app Equipment and web Tools to build bridges between services .
We will create two IFTTT applets:
Both programs will be used by us Python app Trigger ,Python app from Coinmakercap API Click here get data .
One IFTTT The program consists of two parts : The trigger part and The action part .
In our case , The trigger is a IFTTT Provided webhook service . You can take webhook Imagine as "user-defined HTTP callbacks", Please refer to :WEBHOOK
our Python app Will send a HTTP Ask to webhook URL, then webhook URL Trigger action . Here comes the interesting part , This action can be anything you want .IFTTT Provides many actions like sending a email, Update one Google Spreadsheet , I can even call you .
Configuration items
If you install it python3, Then just install another requests A bag will do .
$ pip install requests==2.18.4 # We only need the requests package
Choose an editor , such as Pycharm Edit the code .
Get bitcoin price
The code is simple , Can be in console In the middle of . Import requests package , Then define bitcoin_api_url Variable , This variable is Coinmarketcap API Of URL.
next , Use requests.get() Function to send a HTTP GET request , Then save the response response. because API Return to one JSON Respond to , We can go through .json() Convert it to python object .
>>> import requests
>>> bitcoin_api_url = 'https://api.coinmarketcap.com/v1/ticker/bitcoin/'
>>> response = requests.get(bitcoin_api_url)
>>> response_json = response.json()
>>> type(response_json) # The API returns a list
<class 'list'>
>>> # Bitcoin data is the first element of the list
>>> response_json[0]
{'id': 'bitcoin', 'name': 'Bitcoin', 'symbol': 'BTC', 'rank': '1',
'price_usd': '10226.7', 'price_btc': '1.0', '24h_volume_usd': '7585280000.0',
'market_cap_usd': '172661078165', 'available_supply': '16883362.0',
'total_supply': '16883362.0', 'max_supply': '21000000.0',
'percent_change_1h': '0.67', 'percent_change_24h': '0.78',
'percent_change_7d': '-4.79', 'last_updated': '1519465767'} What we are interested in above is price_usd.
Send a test IFTTT remind
Now we can go to IFTTT Here comes . Use IFTTT Before , We need to create a new account IFTTT, Then install the mobile terminal app( If you want to be notified on your mobile phone ) After setting successfully, start to create a new IFTTT applet Used for testing .
Create a new test applet, You can follow the steps below :
test_event;I just triggered my first IFTTT action!, And then click "Create action";It depends on how to use IFTTT webhooks, Please click on "Documentation" Button documentation Page has webhooks Of URL.
https://maker.ifttt.com/trigger/{event}/with/key/{your-IFTTT-key} next , You need to {event} Replace with you in step 3 Name yourself in .{your-IFTTT-key} It's already there IFTTT key.
Now you can copy webhook URL, Then turn on the other console. Also import requests And then send post request .
>>> import requests
>>> # Make sure that your key is in the URL
>>> ifttt_webhook_url = 'https://maker.ifttt.com/trigger/test_event/with/key/{your-IFTTT-key}'
>>> requests.post(ifttt_webhook_url)
<Response [200]>After running , You can see :
establish IFTTT Applets
It's just a test , Now we have reached the main part . Before starting the code again , We need to create two new IFTTT applets: One is the urgent notice of bitcoin price , The other is a regular update .
Bitcoin price emergency notification applet:
bitcoin_price_emergency;Bitcoin price is at ${{Value1}}. Buy or sell now!( We will return to {{Value1}} part )https://coinmarketcap.com/currencies/bitcoin/;Regular price update applet:
bitcoin_price_update;Latest bitcoin prices:<br>{{Value1}};Connect all together
Now? , We have it. IFTTT, Here's the code . You will create a standard like the following Python Command line app Start with the skeleton . Code up , And save it as bitcoin_notifications.py:
import requests import time from datetime import datetime def main(): pass if __name__ == '__main__': main()
next , We'll also take the first two Python console Part of the code is converted to two functions , The function will return the price of the nearest bitcoin , Then separate them post To IFTTT Of webhook Up . Add the following code to the main() Function .
BITCOIN_API_URL = 'https://api.coinmarketcap.com/v1/ticker/bitcoin/'
IFTTT_WEBHOOKS_URL = 'https://maker.ifttt.com/trigger/{}/with/key/{your-IFTTT-key}'
def get_latest_bitcoin_price():
response = requests.get(BITCOIN_API_URL)
response_json = response.json()
# Convert the price to a floating point number
return float(response_json[0]['price_usd'])
def post_ifttt_webhook(event, value):
# The payload that will be sent to IFTTT service
data = {'value1': value}
# inserts our desired event
ifttt_event_url = IFTTT_WEBHOOKS_URL.format(event)
# Sends a HTTP POST request to the webhook URL
requests.post(ifttt_event_url, json=data) In addition to changing the price from a string to a floating point number ,get_latest_bitcoin_price It hasn't changed much .psot_ifttt_webhook Two parameters are required :event and value.
event The parameter corresponds to the trigger name we named earlier . meanwhile ,IFTTT Of webhooks Allow us to pass requests Send additional data , Data as JSON Format .
That's why we need value Parameters : When setting our applet When , We have... In the message text {{Value1}} label . This label will be JSON payload Medium values1 Text substitution .requests.post() The function allows us to set json Keyword to send additional JSON data .
Now we can continue until we app At the heart of main Function code . It includes a while True The cycle of , Because we want to app Run forever . In circulation , We call Coinmarkertcap API To get the latest bitcoin price , And record the date and time at that time .
According to the current price , We will decide whether we want to send an urgent notice . For our regular updates, we will put the current price and date into a bitcoin_history In the list of . Once the list reaches a certain number ( for instance 5 individual ), We'll pack , Send updates , Then reset the history , For subsequent updates .
One thing to note is to avoid sending messages too often , There are two reasons :
therefore , We finally joined "go to sleep" sleep , Set at least 5 Minutes to get new data . The following code implements the features we need :
BITCOIN_PRICE_THRESHOLD = 10000 # Set this to whatever you like
def main():
bitcoin_history = []
while True:
price = get_latest_bitcoin_price()
date = datetime.now()
bitcoin_history.append({'date': date, 'price': price})
# Send an emergency notification
if price < BITCOIN_PRICE_THRESHOLD:
post_ifttt_webhook('bitcoin_price_emergency', price)
# Send a Telegram notification
# Once we have 5 items in our bitcoin_history send an update
if len(bitcoin_history) == 5:
post_ifttt_webhook('bitcoin_price_update',
format_bitcoin_history(bitcoin_history))
# Reset the history
bitcoin_history = []
# Sleep for 5 minutes
# (For testing purposes you can set it to a lower number)
time.sleep(5 * 60) We almost succeeded . But one is still missing format_bitcoin_history function . It will bitcoin_history As a parameter , Then use to be Telegram Allowed basic HTML label ( image <br>, <b>, <i> wait ) Transform format . Copy this function to main() above .
def format_bitcoin_history(bitcoin_history):
rows = []
for bitcoin_price in bitcoin_history:
# Formats the date into a string: '24.02.2018 15:09'
date = bitcoin_price['date'].strftime('%d.%m.%Y %H:%M')
price = bitcoin_price['price']
# <b> (bold) tag creates bolded text
# 24.02.2018 15:09: $<b>10123.4</b>
row = '{}: $<b>{}</b>'.format(date, price)
rows.append(row)
# Use a <br> (break) tag to create a new line
# Join the rows delimited by <br> tag: row1<br>row2<br>row3
return '<br>'.join(rows)The final result displayed on the mobile phone is :
then , Our function is finished , As soon as the price of bitcoin is updated , There is a prompt on the mobile terminal of the mobile phone . Of course , If you're bored, you can also app Inside off fall .
Today's article is shared here , Thank you for reading