ћерион Ќетворкс

7 минут чтени€

ѕредставьте ситуацию, пользователи пытаютс€ получить доступ к вашему сайту, но он не открываетс€. «наете в чЄм дело? ¬озможно, есть ошибки, которые не были вы€влены и решены раньше. –азочарованные пользователи покидают ваш сайт, а вы тер€ете ло€льных пользователей.

 ак решить эту проблему?  ак узнать о состо€нии сайта раньше пользователей?

—уществует два возможных способа - eсли вы не против потратить немного денег, то можно обратитьс€ к таким мониторинговым решени€м, как StartCake и т.п. ќднако если вы разработчик или не готовы тратитьс€ ежемес€чно, можете воспользоватьс€ преимуществами API Geekflare - Site Up?

ƒанный API провер€ет доступность сайта из разных точек.

¬ данном материале рассмотрим Python код, который немедленно уведомит вас через Gmail, как только сайт станет недоступен. Ќачнем с изучени€ API ЂIs Site Up?ї


API Is Site Up?

ѕеред началом работы с API необходимо установить пакет requests, который в Python используетс€ дл€ работы с API. Ќо не об€зательно использовать Python. ћожно использовать любой другой €зык. ¬ любом случае, убедитесь, что настроили все необходимое, чтобы сделать API запрос.

»так, дл€ тех, кто использует Python, установите пакет запросов с помощью команды:

pip install requests 

¬ыполните настройку дл€ других €зыков (если выбран другой €зык, кроме Python) и переходите к следующим шагам.

“еперь перейдите на страницу API Geekflare.

API Geekflare

¬ы можете найти различные типы API, включа€ ЂIs Site Up?ї. ƒл€ использовани€ API Geekflare нам нужен ключ API, который мы можем получить через RapidAPI.

Ќажмите на кнопку GET API KEY, чтобы перейти к RapidAPI.

GET API KEY

RapidAPI откроетс€ в новой вкладке и выгл€дит следующим образом:

RapidAPI

„тобы получить ключ API нужно создать учетную запись. —оздайте учетную запись в RapidAPI, если у вас ее нет.

RapidAPI

«атем в верхней части всех доступных API Geekflare вы увидите API ЂIs Site Up?ї, который мы ищем. ≈сли он не активен, найдите его с помощью поиска и нажмите на него. ѕосле этого в правой стороне должно отобразитьс€ руководство по данному API. »з раздела Code Snippets в правой части выберите Python -> Requests.

Code Snippets

»ли же если вы не используете Python, выберите другой €зык с соответствующим пакетом.

¬ы получите код дл€ вызова API ЂIs Site Up?ї. ƒавайте изменим его немного, чтобы потом легче было добавл€ть код. ѕосмотрите на измененный код в Python.

import requests
API_URL = "https://geekflare.p.rapidapi.com/up"
def make_api_request():
    headers = {
        'content-type': "application/json",
        'x-rapidapi-host': "geekflare.p.rapidapi.com",
        'x-rapidapi-key': "YOUR_API_KEY"
    }
    payload = r'{"url": "https://www.geekflare.com"}'
    response = requests.request("POST", API_URL, data=payload, headers=headers)
    return response.json()   
if __name__ == '__main__':
    data = make_api_request()
    print(data)
    

«амените API_KEY своим собственным ключом API из RapidAPI в приведенном выше коде. ќн будет разным дл€ каждого пользовател€. ¬ы найдете его в RapidAPI в разделе ѕараметры заголовка:

API_KEY

“от же ключ API вы сможете найти в примере кода, как показано ниже.

API_KEY

Ќесколько расположений

¬ приведенном выше коде сайт провер€етс€ из одного датацентра (Ќью-…орк, —Ўј). Ќо мы можем посылать запросы на сайт из разных мест с указав буквенные коды стран в теле запроса. ƒругие доступные места - јнгли€ (Ћондон) и —ингапур. ћы можем передать данные местоположени€ вместе с URL-адресом сайта следующим образом:

{
    "locations": [
        "uk",
        "us",
        "sg"
    ],
    "url": "geekflare.com"
}
    

¬ы можете передать предпочитаемые расположени€ из списка.

ћы написали код, чтобы сделать запрос API, который получает данные независимо от того, работает сайт или нет. ѕришло врем€ написать еще код, который отправл€ет почту, когда сайт не работает.


ѕолучение уведомлени€ на почту

¬ сети можно найти немало руководств о том, как отправл€ть электронные письма через Gmail в Python или же использовать следующий код, который использует пакет под названием yagmail специально разработан дл€ отправки почты из Gmail.

ѕеред отправкой сообщени€ через учетную запись Gmail необходимо включить параметр –азрешить небезопасные приложени€. ¬ы можете включить его здесь. ѕосмотрим код:

def send_mail():
    gmail = yagmail.SMTP("gmail", "password")
    receiver = "receiver@domain.com"
    subject = "Testing Subject"
    body = "This is a testing mail"
    gmail.send(
        to=receiver,
        subject=subject,
        contents=body,
    )    

ѕолное руководство по yagmail можно найти здесь.

“еперь у нас есть код дл€ запросов API и отправки почты. —ледующим шагом €вл€етс€ вызов send_mail вс€кий раз, когда в ответе на запрос сайт указываетс€ как недостпный.

»так, откуда мы знаем, что наш сайт не работает или работает?  огда мы посылаем запрос к API ЂIs Site Up?ї, он возвращает нам Python словарь с некоторыми данными как следующем скриншоте:

Python словарь

¬ данном словаре есть ключ message. «начение этого ключа и показывает нам состо€ние сайта. ƒанный ключ может иметь два значени€:

  • Site is up
  • Site is down

»так, мы отправим почту, когда получим сообщение ЂSite is downї. ќкончательный код будет выгл€деть так:

import requests
import yagmail
API_URL = "https://geekflare.p.rapidapi.com/up"
def make_api_request():
    headers = {
        'content-type': "application/json",
        'x-rapidapi-host': "geekflare.p.rapidapi.com",
        'x-rapidapi-key': "API_KEY"
    }
    payload = r'{"url": "https://www.abcd.com"}'
    response = requests.request("POST", API_URL, data=payload, headers=headers)
    return response.json()
def send_mail(content):
    gmail = yagmail.SMTP("gmail", "password")
    receiver = "email@domain.com"
    subject = "Your Site is Down"
    gmail.send(
        to=receiver,
        subject=subject,
        contents=content,
    )
if __name__ == '__main__':
    data = make_api_request()
    
    message = data['message']
    ## seding the mail
    if message == 'Site is down.':
        ## extracting the errors from different locations
        locations_data = data['data']
        mail_content = "Your site is down due to unexpected error. See the useful data to resolve errors below.\n\n"
        for location in locations_data:
            mail_content += f"{location['city']}, {location['country']} - {location['error']}\n"
        mail_content += "\nCheck the error and resolve them as soon as possible."
        send_mail(mail_content)
    

“ело сообщени€ можете редактировать по своему усмотрению. ћы завершили код отправки почты вс€кий раз, когда наш сайт не работает. —мотри образец сообщени€, полученного с помощью вышеуказанного кода.

ќбразец сообщени€

Ќо, есть еще проблема.

ћы должны выполнить наш код, чтобы проверить, работает ли наш сайт или нет. „астота запуска данного скрипта зависит от ваших предпочтений. ƒопустим, мы должны провер€ть сайт каждые час.

ѕравда, мы можем каждый час открыть терминал и запустить скрипт. Ќо это скучно и неэффективно. ѕлюс к этому, никто так не делает. –ешение напрашиваетс€ само: использовать cron дл€ автоматического выполнени€ нашего кода каждый час. ѕосмотрим, как его настроить.


Ќастройка Cron

–ассмотрим шаги по настройке cron в операционной системе на базе UNIX.

  • ќткрыть терминал.
  • ¬ыполните команду crontab -e, котора€ открывает файл crontab на терминале.
  • Ќажмите клавишу i дл€ перехода в режим ¬¬ќƒј.
  • “еперь добавьте шаблон cron, пути к исполн€емому файлу Python и нашему файлу, как указано ниже:
0 * * * * /usr/bin/python3 /home/sample.py
ѕодробно про cron можно прочесть в этой статье.

»так, мы настроили планировщик дл€ ежечасного запуска кода. ≈сли нужно будет указать другое расписание, можно воспользоватьс€ разными утилитами дл€ генерации шаблона расписани€ дл€ cron.

ѕожалуй, теперь все. ћы настроили проверку сайта каждый час и получение уведомлени€ на почту, если сайт станет недоступен.


«аключение

јвтоматизаци€ экономит много времени и работает на нас. ћожно настроить cron на каком-нибудь облаке, чтобы он посто€нно работал, провер€л состо€ние сайта и уведомл€л нас при сбое.


—кидки 50% в Merion Academy

¬ыбрать курс