Лучшие практические проекты для начинающих Python

задняя часть Python WeChat биткойн

Добавить Автора

Публичный аккаунт WeChat:PythonНаука о данных

Знаю почти:Аналитик данных Python


Многие друзья спрашивали меня, есть ли хорошие проекты для практики после изучения Python.

На самом деле, проект в основном основан на потребностях. Но для новичка многие сложные проекты не могут быть выполнены самостоятельно, поэтому блогер выбрал проект, который очень подходит для новичков.Содержание не очень сложное, но очень интересно.Не очень хороший проект.

В этом проекте мы создадим службу оповещения о ценах на биткойны.

  • В основном вы будете учитьсяHTTPзапрос и как использоватьrequestspackage для отправки этих запросов.

  • При этом вы пойметеwebhooksи как использовать его для подключения вашего приложения Python к внешним устройствам, таким как мобильные оповещения или службы Telegram.

Менее 50 строк кода могут завершить функцию службы оповещения о ценах на биткойны и могут быть легко расширены на другие криптовалюты и сервисы.

Давайте посмотрим прямо сейчас.

Реализация оповещений о ценах на биткойны с помощью Python

Мы все знаем, что Биткойн — движущаяся вещь. Вы не можете точно знать, куда это идет. Итак, чтобы нам не приходилось постоянно обновлять страницу, чтобы увидеть, что происходит, мы можем создать приложение Python, которое сделает всю работу за вас.

Для этого воспользуемся популярным автоматизированным сайтомIFTTT. IFTTT**("если это, то это")** – это инструмент, который позволяет установить связь между различными приложениями и веб-сервисами.

Мы создадим два апплета IFTTT:

  • Один из них — экстренное напоминание, когда цена биткойна падает до определенного порога.
  • Другой — регулярное обновление цен на биткойны.

Обе программы будут запущены нашим приложением Python, которое начинается сCoinmakercap API кликните сюдаполучить данные.

Программа IFTTT состоит из двух частей:спусковая частьиЧасть действия.

В нашем случае триггером был сервис веб-перехватчиков, предоставляемый IFTTT. Вы можете думать о вебхуке как "user-defined HTTP callbacks", для получения дополнительной информации см.:WEBHOOK

Наше приложение Python сделает HTTP-запрос к URL-адресу веб-перехватчика, и URL-адрес веб-перехватчика вызовет действие. Теперь самое интересное, это действие может быть чем угодно. IFTTT предлагает множество действий, таких как отправка электронной почты, обновление электронной таблицы Google и даже звонок вам.

элемент конфигурации

Если у вас установлен python3, то просто установите еще одинrequestsПакет в порядке.

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

Выберите редактор, например Pycharm, для редактирования кода.

Получить цену биткойна

Код прост и может быть выполнен в консоли. Импортироватьrequestsпакет, затем определитьbitcoin_api_urlпеременная, эта переменная является URL-адресом API Coinmarketcap.

Далее используйтеrequests.get()Функция отправляет HTTP-запрос GET, а затем сохраняет ответ. Поскольку API возвращает ответ JSON, мы можем передать.json()Преобразуйте его в объект 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
<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'}

Выше нас интересуетprice_usd.

Отправить напоминание IFTTT для теста

Теперь мы можем перейти к IFTTT. Перед использованием IFTTT нам нужно создать новую учетную запись.IFTTT, затем установите мобильное приложение (если хотите получать уведомления на телефон) После успешной настройки создайте новый апплет IFTTT для тестирования.

Чтобы создать новый тестовый апплет, выполните следующие действия:

  1. Нажмите большую кнопку «это»;
  2. Найдите сервис «вебхуки» и выберите триггер «Получить веб-запрос»;
  3. переименовать событие вtest_event;
  4. Затем выберите большую кнопку «это»;
  5. Найдите службу «уведомления» и выберите «отправить уведомление из приложения IFTTT».
  6. Изменить СМС наI just triggered my first IFTTT action!, затем нажмите «Создать действие»;
  7. Нажмите кнопку «Готово» для завершения;

Чтобы узнать, как использовать веб-перехватчики IFTTT, нажмите кнопку «Документация». На странице документации есть URL-адрес веб-перехватчиков.

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

Далее вам необходимо{event}Замените на имя, которое вы дали себе на шаге 3.{your-IFTTT-key}является существующим ключом IFTTT.

Теперь вы можете скопировать URL-адрес веб-перехватчика и запустить другую консоль. импортировать то же самоеrequestsЗатем отправьте запрос на публикацию.

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

После запуска вы можете увидеть:

Создание апплетов IFTTT

Передняя часть — это всего лишь тест, теперь мы переходим к основной части. Прежде чем снова запустить код, нам нужно создать два новых апплета IFTTT: один для экстренных уведомлений о цене биткойнов и один для регулярных обновлений.

Апплет для экстренного уведомления о цене биткойнов:

  1. Выберите службу «веб-перехватчики» и выберите триггер «Получить веб-запрос»;
  2. Назовите событие события какbitcoin_price_emergency;
  3. Для части ответа с действием выберите службу «Уведомления», затем выберите действие «отправить расширенное уведомление из приложения IFTTT»;
  4. Укажите заголовок, например «Чрезвычайная ситуация с ценами на биткойны!»
  5. Установить SMS наBitcoin price is at ${{Value1}}. Buy or sell now!(Мы вернемся к{{Value1}}часть)
  6. При желании вы можете добавить URL-ссылку на страницу Coinmarketcap Bitcoin:https://coinmarketcap.com/currencies/bitcoin/;
  7. Создайте действие, а затем завершите настройку апплета;

Апплет регулярного обновления цен:

  1. Также выберите службу «вебхуки» и выберите триггер «Получить веб-запрос»;
  2. Назовите событие события какbitcoin_price_update;
  3. Для части действия ответа выберите услугу «Telegram», затем перейдите к выбору действия «Отправить сообщение»;
  4. Установите текст SMS-сообщения:Latest bitcoin prices:<br>{{Value1}};
  5. Создайте действие, а затем завершите настройку апплета;

связать все это вместе

Теперь, когда у нас есть IFTTT, вот код. Вы начнете с создания стандартного скелета приложения командной строки Python, как показано ниже. код и сохраните его какbitcoin_notifications.py:

import requests
import time
from datetime import datetime

def main():
    pass

if __name__ == '__main__':
    main()

Далее нам также нужно преобразовать код двух предыдущих частей консоли Python в две функции, которые будут возвращать последнюю цену биткойнов, а затем отправлять их в веб-перехватчик IFTTT соответственно. Добавьте следующий код в функцию main().

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)

Помимо изменения цены со строки на число с плавающей запятой,get_latest_bitcoin_priceНе так много изменилось.psot_ifttt_webhookТребуются два параметра:eventиvalue.

eventПараметры соответствуют именам триггеров, которые мы назвали ранее. В то же время веб-хуки IFTTT позволяют нам отправлять дополнительные данные через запросы, и данные в формате JSON.

Вот почему нам нужноvalueПараметры: При настройке нашего апплета имеем в тексте сообщения{{Value1}}Этикетка. Этот тег будет заменен полезной нагрузкой JSON.values1Замена текста.requests.post()функция позволяет установитьjsonКлючевое слово отправляет дополнительные данные JSON.

Теперь мы можем перейти к основному коду основной функции нашего приложения. включает в себяwhile Trueцикл, так как мы хотим, чтобы приложение работало вечно. В цикле мы вызываем API Coinmarkertcap, чтобы получить самую последнюю цену биткойна и записать текущую дату и время.

Основываясь на текущей цене, мы решим, хотим ли мы отправить срочное уведомление. Для наших регулярных обновлений мы будем помещать текущие цены и даты вbitcoin_historyв списке. Как только список достигает определенного числа (скажем, 5), мы завершаем его, отправляем обновление и сбрасываем историю для последующих обновлений.

Одно предостережение: не отправляйте сообщения слишком часто по двум причинам:

  • API Coinmarketcap заявляет, что они обновляются каждые 5 минут, поэтому слишком частое обновление не помогает.
  • Если ваше приложение отправляет слишком много запросов к API Coinmarketcap, ваш IP может быть забанен.

Таким образом, мы закончили тем, что добавили сон «перейти в сон», установив не менее 5 минут для получения новых данных. Следующий код реализует нашу желаемую функцию:

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функция. будетbitcoin_historyв качестве параметра, затем используйте основные теги HTML, разрешенные Telegram (например,<br>, <b>, <i>и т. д.) формат преобразования. Скопируйте эту функцию выше 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']
        # <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)

Окончательный результат, отображаемый на телефоне, таков:

Затем наша функция завершена, пока цена биткойна обновляется, на мобильном терминале будет подсказка. Конечно, вы также можете отключить его в приложении, если вас это раздражает.

Ссылка: https://realpython.com/python-bitcoin-ifttt/

Обратите внимание на публичный аккаунт WeChatPythonНаука о данных,Получать120GУчебные материалы по искусственному интеллекту.