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

資訊專欄INFORMATION COLUMN

給Python初學(xué)者的最好練手項(xiàng)目

Leo_chen / 3283人閱讀

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

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


有很多朋友問我學(xué)習(xí)了Python后,有沒有什么好的項(xiàng)目可以練手。

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

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

你將主要會(huì)學(xué)習(xí)到HTTP的請(qǐng)求,以及如何使用requests包來發(fā)送這些請(qǐng)求。

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

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

下面我們馬上來看看。

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

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

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

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

一個(gè)是當(dāng)比特幣價(jià)格下滑到一定閾值后的緊急提醒

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

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

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

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

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

配置項(xiàng)目

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

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

選一個(gè)編輯器,比如Pycharm進(jìn)行代碼編輯。

獲取比特幣價(jià)格

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

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

>>> 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ā)送一個(gè)測(cè)試的IFTTT提醒

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

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

點(diǎn)擊大的 "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!,然后點(diǎn)擊 "Create action";

點(diǎn)擊 "Finish" 按鈕,完成;

要看如何使用IFTTT webhooks,請(qǐng)點(diǎn)擊 "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,然后開啟另一個(gè)console。同樣導(dǎo)入requests然后發(fā)送post請(qǐng)求。

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

運(yùn)行完之后,你可以看到:

創(chuàng)建IFTTT Applets

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

比特幣價(jià)格緊急通知的applet:

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

命名一個(gè)事件 event 為 bitcoin_price_emergency;

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

提供一個(gè)標(biāo)題,像 "Bitcoin price emergency!"

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

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

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

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

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

命名一個(gè)事件 event 為 bitcoin_price_update;

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

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

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

將所有連到一起

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

import requests
import time
from datetime import datetime

def main():
    pass

if __name__ == "__main__":
    main()

接著,我們還要將前面兩個(gè)Python console部分的代碼轉(zhuǎn)換為兩個(gè)函數(shù),函數(shù)將返回最近比特幣的價(jià)格,然后將它們分別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)

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

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

這就是為什么我們需要value參數(shù):當(dāng)設(shè)置我們的applet的時(shí)候,我們?cè)谛畔⑽谋局杏?b>{{Value1}}標(biāo)簽。這個(gè)標(biāo)簽會(huì)被 JSON payload 中的values1文本替換。requests.post()函數(shù)允許我們通過設(shè)置json關(guān)鍵字發(fā)送額外的JSON數(shù)據(jù)。

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

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

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

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

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

因此,我們最后加入了 "go to sleep" 睡眠,設(shè)置至少5分鐘才能得到新數(shù)據(jù)。下面的代碼實(shí)現(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)

我們幾乎快成功了。但是還缺一個(gè)format_bitcoin_history函數(shù)。它將bitcoin_history作為參數(shù),然后使用被Telegram允許的基本HTML標(biāo)簽(像
, , 等等)變換格式。將這個(gè)函數(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)

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

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

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

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

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

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

相關(guān)文章

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

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

    用戶84 評(píng)論0 收藏0
  • Python爬蟲學(xué)習(xí)路線

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

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

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

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

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

    EasonTyler 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<