2018-07-23 02:49:53 +02:00
import requests
from platypush . message import Message
from platypush . plugins import Plugin , action
class IftttPlugin ( Plugin ) :
"""
This plugin allows you to interact with the IFTTT maker API
< https : / / ifttt . com / maker_webhooks > to programmatically trigger your own
IFTTT hooks from Platypush - e . g . send a tweet or a Facebook post , create a
Todoist item or a Trello task , trigger events on your mobile device , or run
any action not natively supported by Platypush but available on your IFTTT
configuration .
Requires :
* * * requests * * ( ` ` pip install requests ` ` )
2018-07-24 09:06:05 +02:00
An example : :
2018-07-23 02:49:53 +02:00
2018-07-24 09:06:05 +02:00
# Trigger an IFTTT event named "at_home"
2018-07-23 02:49:53 +02:00
{
" type " : " request " ,
2018-07-24 09:06:05 +02:00
" action " : " ifttt.trigger_event " ,
2018-07-23 02:49:53 +02:00
" args " : {
2018-07-24 09:06:05 +02:00
" event_name " : " at_home "
2018-07-23 02:49:53 +02:00
}
}
"""
_base_url = ' https://maker.ifttt.com/trigger/ {event_name} /with/key/ {ifttt_key} '
def __init__ ( self , ifttt_key , * args , * * kwargs ) :
"""
: param ifttt_key : Your IFTTT Maker API key . Log in to IFTTT and get your key from < https : / / ifttt . com / maker_webhooks > . Once you ' ve got your key, you can start creating IFTTT rules using the Webhooks channel.
: type ifttt_key : str
"""
super ( ) . __init__ ( * args , * * kwargs )
self . ifttt_key = ifttt_key
@action
def trigger_event ( self , event_name , values = None ) :
"""
Send an event to your IFTTT account
: param event_name : Name of the event
: type event_name : str
: param values : Optional list of values to be passed to the event . By convention IFTTT names the values as ` ` value1 , value2 , . . . ` .
: type values : list
"""
url = self . _base_url . format ( event_name = event_name , ifttt_key = self . ifttt_key )
if not values :
values = [ ]
response = requests . post ( url , json = { ' value {} ' . format ( i + 1 ) : v
for ( i , v ) in enumerate ( values ) } )
if not response . ok :
raise RuntimeError ( " IFTTT event ' {} ' error: {} : {} " . format ( event_name , r . status_code , r . reason ) )
# vim:sw=4:ts=4:et: