国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

給Python初學者的最好練手項目

Leo_chen / 3289人閱讀

摘要:我們將會創(chuàng)建兩個一個是當比特幣價格下滑到一定閾值后的緊急提醒另一個是常規(guī)的比特幣價格的更新兩個程序都將被我們的觸發(fā),從獲取數(shù)據(jù)。

作者:xiaoyu
微信公眾號:Python數(shù)據(jù)科學
知乎:python數(shù)據(jù)分析師


有很多朋友問我學習了Python后,有沒有什么好的項目可以練手。

其實,做項目主要還是根據(jù)需求來的。但是對于一個初學者來說,很多復(fù)雜的項目沒辦法獨立完成,因此博主挑選了一個非常適合初學者的項目,內(nèi)容不是很復(fù)雜,但是非常有趣,我相信對于初學者小白來說是再好不過的項目了。

這個項目中,我們將要建立一個比特幣價格的提醒服務(wù)。

你將主要會學習到HTTP的請求,以及如何使用requests包來發(fā)送這些請求。

同時,你會了解webhooks和如何使用它將Python app與外部設(shè)備連接,例如移動端手機提醒或者 Telegram 服務(wù)。

僅僅不到50行的代碼就能完成一個比特幣價格提醒服務(wù)的功能,并且可以輕松的擴展到其它加密數(shù)字貨幣和服務(wù)中。

下面我們馬上來看看。

用Python實現(xiàn)比特幣價格提醒

我們都知道,比特幣是一個變動的東西。你無法真正的知道它的去向。因此,為了避免我們反復(fù)的刷新查看最新動態(tài),我們可以做一個Python app來為你工作。

為此,我們將會使用一個很流行的自動化網(wǎng)站IFTTT。IFTTT("if this, then that")是一個可以在不同app設(shè)備與web服務(wù)之間建立連接橋梁的工具。

我們將會創(chuàng)建兩個IFTTT applets:

一個是當比特幣價格下滑到一定閾值后的緊急提醒

另一個是常規(guī)的比特幣價格的更新

兩個程序都將被我們的Python app觸發(fā),Python app從Coinmakercap API (https://coinmarketcap.com/api/) 獲取數(shù)據(jù)。

一個IFTTT程序有兩個部分組成:觸發(fā)部分動作部分

在我們的情況下,觸發(fā)是一個IFTTT提供的webhook服務(wù)。你可以將webhook想象為"user-defined HTTP callbacks",更多請參考:http://timothyfitz.com/2009/0...

我們的Python app將會發(fā)出一個HTTP請求到webhook URL,然后webhook URL觸發(fā)動作。有意思的部分來了,這個動作可以是你想要的任何東西。IFTTT提供了眾多的動作像發(fā)送一個email,更新一個Google電子數(shù)據(jù)表,甚至可以給你打電話。

配置項目

如果你安裝了python3,那么只要再安裝一個requests包就可以了。

$ pip install requests==2.18.4  # We only need the requests package

選一個編輯器,比如Pycharm進行代碼編輯。

獲取比特幣價格

代碼很簡單,可以在console中進行。導(dǎo)入requests包,然后定義bitcoin_api_url變量,這個變量是Coinmarketcap API的URL。

接著,使用requests.get()函數(shù)發(fā)送一個 HTTP GET請求,然后保存響應(yīng)response。由于API返回一個JSON響應(yīng),我們可以通過.json()將它轉(zhuǎn)換為python對象。

>>> 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

>>> # 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"}

上面我們感興趣的是price_usd

發(fā)送一個測試的IFTTT提醒

現(xiàn)在我們可以轉(zhuǎn)到IFTTT上面來了。使用IFTTT之前,我們需要創(chuàng)建一個新賬戶(https://ifttt.com/join),然后安裝移動端app(如果你想在手機上接到通知)
設(shè)置成功后就開始創(chuàng)建一個新的IFTTT applet用于測試。

創(chuàng)建一個新的測試applet,可以按一下步驟進行:

點擊大的 "this" 按鈕;

搜索 "webhooks" 服務(wù),然后選擇 "Receive a web request"觸發(fā);

重命名event為test_event;

然后選擇大的 "that" 按鈕;

搜索 "notifications" 服務(wù),然后選擇 "send a notification from the IFTTT app"

改變短信息為 I just triggered my first IFTTT action!,然后點擊 "Create action";

點擊 "Finish" 按鈕,完成;

要看如何使用IFTTT webhooks,請點擊 "Documentation" 按鈕documentation頁有webhooks的URL。

https://maker.ifttt.com/trigger/{event}/with/key/{your-IFTTT-key}

接著,你需要將{event}替換為你在步驟3中自己起的名字。{your-IFTTT-key}是已經(jīng)有了的IFTTT key。

現(xiàn)在你可以復(fù)制webhook URL,然后開啟另一個console。同樣導(dǎo)入requests然后發(fā)送post請求。

>>> 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)

運行完之后,你可以看到:

創(chuàng)建IFTTT Applets

前面只是測試,現(xiàn)在我們到了最主要的部分了。再開始代碼之前,我們需要創(chuàng)建兩個新的IFTTT applets:一個是比特幣價格的緊急通知,另一個是常規(guī)的更新。

比特幣價格緊急通知的applet:

選擇 "webhooks" 服務(wù),并且選擇 "Receive a web request" 的觸發(fā);

命名一個事件 event 為 bitcoin_price_emergency;

對于響應(yīng)的動作部分,選擇 "Notifications"服務(wù),然后繼續(xù)選擇 "send a rich notification from the IFTTT app" 動作;

提供一個標題,像 "Bitcoin price emergency!"

設(shè)置短信息 為 Bitcoin price is at ${{Value1}}. Buy or sell now!(我們一會兒將返回到{{Value1}}部分)

可選的,你可以加入一個URL link 到 Coinmarketcap Bitcoin page:https://coinmarketcap.com/currencies/bitcoin/;

創(chuàng)建動作,然后完成applet的設(shè)置;

常規(guī)價格更新的applet:

一樣的選擇 "webhooks" 服務(wù),并且選擇 "Receive a web request" 的觸發(fā);

命名一個事件 event 為 bitcoin_price_update;

對于響應(yīng)的動作部分,選擇 "Telegram" 服務(wù),然后繼續(xù)選擇 "Send message" 動作;

設(shè)置短信信息文本為:Latest bitcoin prices:
{{Value1}}

創(chuàng)建動作,然后完成applet的設(shè)置;

將所有連到一起

現(xiàn)在,我們有了IFTTT,下面就是代碼了。你將通過創(chuàng)建像下面一樣標準的Python命令行app骨架來開始。 代碼碼上去,然后保存為 bitcoin_notifications.py:

import requests
import time
from datetime import datetime

def main():
    pass

if __name__ == "__main__":
    main()

接著,我們還要將前面兩個Python console部分的代碼轉(zhuǎn)換為兩個函數(shù),函數(shù)將返回最近比特幣的價格,然后將它們分別post到IFTTT的webhook上去。將下面的代碼加入到main()函數(shù)之上。

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)

除了將價格從一個字符串變成浮點數(shù)之外,get_latest_bitcoin_price基本沒太變。psot_ifttt_webhook需要兩個參數(shù):eventvalue

event參數(shù)與我們之前命名的觸發(fā)名字對應(yīng)。同時,IFTTT的webhooks允許我們通過requests發(fā)送額外的數(shù)據(jù),數(shù)據(jù)作為JSON格式。

這就是為什么我們需要value參數(shù):當設(shè)置我們的applet的時候,我們在信息文本中有{{Value1}}標簽。這個標簽會被 JSON payload 中的values1文本替換。requests.post()函數(shù)允許我們通過設(shè)置json關(guān)鍵字發(fā)送額外的JSON數(shù)據(jù)。

現(xiàn)在我們可以繼續(xù)到我們app的核心main函數(shù)碼代碼了。它包括一個while True的循環(huán),由于我們想要app永遠的運行下去。在循環(huán)中,我們調(diào)用Coinmarkertcap API來得到最近比特幣的價格,并且記錄當時的日期和時間。

根據(jù)目前的價格,我們將決定我們是否想要發(fā)送一個緊急通知。對于我們的常規(guī)更新我們將把目前的價格和日期放入到一個bitcoin_history的列表里。一旦列表達到一定的數(shù)量(比如說5個),我們將包裝一下,將更新發(fā)送出去,然后重置歷史,以為后續(xù)的更新。

一個需要注意的地方是避免發(fā)送信息太頻繁,有兩個原因:

Coinmarketcap API 聲明他們只有每隔5分鐘更新一次,因此更新太頻也沒有用

如果你的app發(fā)送太多的請求道 Coinmarketcap API,你的IP可能會被ban

因此,我們最后加入了 "go to sleep" 睡眠,設(shè)置至少5分鐘才能得到新數(shù)據(jù)。下面的代碼實現(xiàn)了我們的需要的特征:

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)

我們幾乎快成功了。但是還缺一個format_bitcoin_history函數(shù)。它將bitcoin_history作為參數(shù),然后使用被Telegram允許的基本HTML標簽(像
, , 等等)變換格式。將這個函數(shù)復(fù)制到main()之上。

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"]
        #  (bold) tag creates bolded text
        # 24.02.2018 15:09: $10123.4
        row = "{}: ${}".format(date, price)
        rows.append(row)

    # Use a 
(break) tag to create a new line # Join the rows delimited by
tag: row1
row2
row3 return "
".join(rows)

最后在手機上顯示的結(jié)果是這樣的:

然后,我們的功能就完成了,只要比特幣的價格一更新,手機移動端就有提示。當然,如果你嫌煩也可以在app里面off掉。

參考:https://realpython.com/python...

關(guān)注微信公眾號Python數(shù)據(jù)科學,獲取 120G 人工智能 學習資料。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44713.html

相關(guān)文章

  • 伸手黨福利:Python 新手入門引導(dǎo)

    摘要:如果你仍然無法抉擇,那請選擇,畢竟這是未來的趨勢,參考知乎回答還是編輯器該如何選我推薦社區(qū)版,配置簡單功能強大使用起來省時省心,對初學者友好。 這是一篇 Python 入門指南,針對那些沒有任何編程經(jīng)驗,從零開始學習 Python 的同學。不管你學習的出發(fā)點是興趣驅(qū)動、拓展思維,還是工作需要、想要轉(zhuǎn)行,都可以此文作為一個參考。 在這個信息爆炸的時代,以 Python入門 為關(guān)鍵字搜索出...

    用戶84 評論0 收藏0
  • Python爬蟲學習路線

    摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優(yōu)秀的時候,你應(yīng)該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...

    liaoyg8023 評論0 收藏0
  • 【精華分享】:轉(zhuǎn)行數(shù)據(jù)分析一份學習清單

    摘要:數(shù)據(jù)分析的發(fā)展方向一般有商業(yè)方向,行業(yè)分析業(yè)務(wù)方向,和機器學習數(shù)據(jù)挖掘方向。機器學習的書籍推薦統(tǒng)計學習方法,機器學習,機器學習實戰(zhàn)三本書。 作者:xiaoyu 微信公眾號:Python數(shù)據(jù)科學 知乎:python數(shù)據(jù)分析師 上一篇主要分享了博主親身轉(zhuǎn)行數(shù)據(jù)分析的經(jīng)歷: 【從零學起到成功轉(zhuǎn)行數(shù)據(jù)分析,我是怎么做的?】 本篇繼上一篇將分享轉(zhuǎn)行數(shù)據(jù)分析的一些經(jīng)驗和學習方法,看完這篇你將會解...

    suemi 評論0 收藏0
  • 沒有基礎(chǔ)或者基礎(chǔ)差,如何快速學會編程?這6招絕對好使

    摘要:第一點,先清楚你的目的你學編程想要做什么你對哪方面感興趣然后去百度查一下哪些編程語言適合做那個方向,帶著目的去學習,如果一開始沒選好,中途掉頭就很可惜了。 你是不是...

    EasonTyler 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<