Использование IFTTT для проверки содержимого JSON и отправки электронной почты или текстового сообщения

Я пытаюсь научиться использовать новую службу WebHooks в IFTTT и изо всех сил пытаюсь понять, как она должна работать. Большинство проектов, которые я могу найти в Интернете, похоже, относятся к устаревшему сервису «создателя», и очень мало ресурсов для интерпретации нового канала.

Допустим, я хочу проверять значение «онлайн» каждые десять минут в следующем файле json: https://lichess.org/api/users/status?ids=thibault

Я могу написать скрипт Python, который извлекает это значение следующим образом:

response = urlopen('https://lichess.org/api/users/status?ids=thibault')
thibault = response.read()
data = json.loads(thibault)
status = data[0]['online']

Если status равно "true", я хочу получать уведомления по электронной почте или текстовым сообщением. Как интегрировать скрипт Python и службу веб-перехватчиков? Или мне вообще нужно использовать этот скрипт? Я предполагаю, что мне нужно какое-то задание cron, которое регулярно запускает этот скрипт Python, но как связать это задание с IFTTT?

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


person Parseltongue    schedule 30.01.2018    source источник


Ответы (1)


У меня аналогичная настройка для службы веб-перехватчиков IFTTT. Насколько я понимаю, ответ на ваш вопрос - да, вам нужен этот скрипт (или аналогичный), чтобы удалить значение online, и вы, вероятно, захотите выполнить задание cron (мой подход) или оставить скрипт работающим ( не был бы моим предпочтением).

Веб-перехватчики IFTTT перехватывают json до 3 значений, которые вы можете отправить POST для данного события и имени ключа.

Ниже приведен очень простой фрагмент моего API веб-перехватчика:

def push_notification(*values, **kwargs):
    # config is in json format        
    config = get_config()  
    report = {}
    IFTTT = {}

    # set default event/key if kwargs are not present
    for i in ['event', 'key']: 
        IFTTT[i] = kwargs[i] if kwargs and i in kwargs.keys() else config['IFTTT'][i]

    # unpack values received (up to 3 is accepted by IFTTT)
    for i, value in enumerate(values, 1): 
        report[f"value{i}"] = value
    if report:
        res = requests.post(f"https://maker.ifttt.com/trigger/{IFTTT['event']}/with/key/{IFTTT['key']}", data=report)
        # TODO: add try/except for status
        res.raise_for_status() 
        return res
    else:
        return None 

Вам, вероятно, все это не нужно, но моя цель состояла в том, чтобы настроить универсальное решение. В конце концов, все, что вам действительно нужно, это вот эта строка:

requests.post(f"https://maker.ifttt.com/trigger/{event}/with/key/{key}", data={my_json_up_to_3_values})

Где вы будете размещать имя веб-перехватчика event и значение секрета key. Я сохранил их в файле конфигурации. Секретный ключ будет доступен после того, как вы зарегистрируетесь в IFTTT для службы веб-перехватчика (перейдите в настройки апплета веб-перехватчика IFTTT). Вы можете найти свой ключ с помощью ссылки для быстрой справки, например: https://maker.ifttt.com/use/{your_secret_key}. Событие может быть значением по умолчанию, которое вы установили в своем апплете, или пользователь может выбрать свое имя события, если вы позволите.

В вашем случае вы можете сделать что-то вроде:

if status:
    push_notification("Status is True", "From id thibault", event="PushStatus", key="MysEcR5tK3y")

Примечание. Я использовал f-strings с версией 3.6+ ( Это здорово!), но если у вас более ранняя версия, вы должны переключить все f-строки на str.format().

person r.ook    schedule 30.01.2018
comment
Ах! Теперь я понимаю. Большое спасибо - это очень поучительно. Я очень ценю, что вы нашли время. - person Parseltongue; 30.01.2018
comment
Пожалуйста, это просто то, что я настроил раньше. Благодаря вам я вернулся, чтобы немного обновить свой код с тем, что я узнал сейчас. Я слишком хорошо понимаю ваше разочарование, потому что было трудно найти обновленный ресурс, касающийся веб-перехватчика IFTTT. - person r.ook; 30.01.2018