A Pythonic interface for building IFTTT plugins routed over email.
Project description
# ifttt (If That Then This)
`ifttt` is a simple package for connecting [IFTTT](http://ifttt.com)
channels with your service via email.
## what?
[IFTTT](http://ifttt.com) provides an interface to an amazing number of services, but since they
lack their own API and have a closed submission process, it's difficult to integrate it into
your own applications.
By creating a set of transformations for routing IFTTT channels to email,
we can pass structured data to custom email-listener functions – `ifthat`
which can be routed to an arbitrary `thenthis` callback function.
## Installation
requires `gevent` and `pytz`
```
pip install ifttt
```
## Usage
### If That Then Say Tweet ...
Make an "IfThis" Twitter Recipe that has an "ThenThat"
mail step (customize the address to match your configuration)
[![](examples/twitter.png)](https://ifttt.com/recipes/229283-if-twitter-then-data)
Now write a python script to read from this inbox, filtered by the subject,
copy the pattern from the "body" field, and pass the message to a
custom function that speaks the tweet text.
```python
from ifttt import ifthat
@ifthat('twitter', pattern = "{{UserName}}|||||{{LinkToTweet}}|||||{{Text}}|||||")
def twitter(msg):
import os
os.system('tweet from {text}'.format(**msg['body']))
return msg
for msg in twitter():
print msg
```
### If This Then Say YO
Make an "IfThis" Yo Recipe that has an "ThenThat"
mail step (customize the address to match your configuration)
[![](examples/yo.png)](https://ifttt.com/recipes/229285-if-yo-then-data)
Now write a similar python script as above:
```python
from ifttt import ifthat
@ifthat('yo', pattern="{{ReceivedAt}}|||||{{From}}|||||")
def yo(msg):
import os
os.system('say yo from {from} &'.format(**msg['body']))
return msg
for msg in yo():
print msg
```
This basic approach works for every channel!
## Input Format
All email messages routed to `thenthis` steps
are processed to have the following
format (a simple python dictionary):
```python
{
'id': '548d15ea3c46c_119282d32c497a2@ip-10-180-52-134.mail',
'subject': 'yo',
'from': 'gmail@example.com',
'to': 'brian@newslynx.org',
'timestamp': 1418553603, # utc timestamp when message was processed
'body': { # parsed body
'received_at': 'December 13, 2014 at 11:45PM',
'from': 'ABELSONLIVE'
}
}
```
## Configuration
You can pass more parameters into the decorator:
```python
from ifttt import ifthat
config = {
subject='yo',
pattern="{{ReceivedAt}}|||||{{From}}|||||",
username='username@example.com',
password='123456',
server='mail.example.com',
port=993,
cache_size=100, # how many message ids to keep track in the cache (non-persistent),
num_workers=5, # how many workers for the processing queue.
refresh=120 # how often to refresh the inbox
}
@ifthat(**config)
def yo(msg):
import os
os.system('say yo from {from} &'.format(**msg['body']))
return msg
for msg in yo():
print msg
```
You can also simply inherit from the core class and overwrite the `thenthis` method:
```python
from ifttt import IfThat
class Yo(IfThat):
def __init__(self):
IfThat.__init__(self,
subject = 'yo',
pattern="{{ReceivedAt}}|||||{{From}}|||||",
username='username@example.com',
password='123456',
server='mail.example.com',
port=993,
cache_size=100, # how many message ids to keep track in the cache (non-persistent),
num_workers=5, # how many workers for the processing queue.
refresh=120 # how often to refresh the inbox
)
def thenthis(self, msg):
import os
os.system('say yo from {from} &'.format(**msg['body']))
return msg
yo = Yo()
for msg in yo.listen():
print msg
```
Alternatively, you can set these environmental variables:
```bash
export IFTTT_USERNAME='username@domain.com'
export IFTTT_PASSWORD='password'
export IFTTT_SERVER='mail.domain.com'
export IFTTT_PORT=993
```
## TODO
- [ ] Delete Messages
- [ ] Support for more complicated email searches.
- [ ] Instead of caching, update last update and filter for messages after that point?
`ifttt` is a simple package for connecting [IFTTT](http://ifttt.com)
channels with your service via email.
## what?
[IFTTT](http://ifttt.com) provides an interface to an amazing number of services, but since they
lack their own API and have a closed submission process, it's difficult to integrate it into
your own applications.
By creating a set of transformations for routing IFTTT channels to email,
we can pass structured data to custom email-listener functions – `ifthat`
which can be routed to an arbitrary `thenthis` callback function.
## Installation
requires `gevent` and `pytz`
```
pip install ifttt
```
## Usage
### If That Then Say Tweet ...
Make an "IfThis" Twitter Recipe that has an "ThenThat"
mail step (customize the address to match your configuration)
[![](examples/twitter.png)](https://ifttt.com/recipes/229283-if-twitter-then-data)
Now write a python script to read from this inbox, filtered by the subject,
copy the pattern from the "body" field, and pass the message to a
custom function that speaks the tweet text.
```python
from ifttt import ifthat
@ifthat('twitter', pattern = "{{UserName}}|||||{{LinkToTweet}}|||||{{Text}}|||||")
def twitter(msg):
import os
os.system('tweet from {text}'.format(**msg['body']))
return msg
for msg in twitter():
print msg
```
### If This Then Say YO
Make an "IfThis" Yo Recipe that has an "ThenThat"
mail step (customize the address to match your configuration)
[![](examples/yo.png)](https://ifttt.com/recipes/229285-if-yo-then-data)
Now write a similar python script as above:
```python
from ifttt import ifthat
@ifthat('yo', pattern="{{ReceivedAt}}|||||{{From}}|||||")
def yo(msg):
import os
os.system('say yo from {from} &'.format(**msg['body']))
return msg
for msg in yo():
print msg
```
This basic approach works for every channel!
## Input Format
All email messages routed to `thenthis` steps
are processed to have the following
format (a simple python dictionary):
```python
{
'id': '548d15ea3c46c_119282d32c497a2@ip-10-180-52-134.mail',
'subject': 'yo',
'from': 'gmail@example.com',
'to': 'brian@newslynx.org',
'timestamp': 1418553603, # utc timestamp when message was processed
'body': { # parsed body
'received_at': 'December 13, 2014 at 11:45PM',
'from': 'ABELSONLIVE'
}
}
```
## Configuration
You can pass more parameters into the decorator:
```python
from ifttt import ifthat
config = {
subject='yo',
pattern="{{ReceivedAt}}|||||{{From}}|||||",
username='username@example.com',
password='123456',
server='mail.example.com',
port=993,
cache_size=100, # how many message ids to keep track in the cache (non-persistent),
num_workers=5, # how many workers for the processing queue.
refresh=120 # how often to refresh the inbox
}
@ifthat(**config)
def yo(msg):
import os
os.system('say yo from {from} &'.format(**msg['body']))
return msg
for msg in yo():
print msg
```
You can also simply inherit from the core class and overwrite the `thenthis` method:
```python
from ifttt import IfThat
class Yo(IfThat):
def __init__(self):
IfThat.__init__(self,
subject = 'yo',
pattern="{{ReceivedAt}}|||||{{From}}|||||",
username='username@example.com',
password='123456',
server='mail.example.com',
port=993,
cache_size=100, # how many message ids to keep track in the cache (non-persistent),
num_workers=5, # how many workers for the processing queue.
refresh=120 # how often to refresh the inbox
)
def thenthis(self, msg):
import os
os.system('say yo from {from} &'.format(**msg['body']))
return msg
yo = Yo()
for msg in yo.listen():
print msg
```
Alternatively, you can set these environmental variables:
```bash
export IFTTT_USERNAME='username@domain.com'
export IFTTT_PASSWORD='password'
export IFTTT_SERVER='mail.domain.com'
export IFTTT_PORT=993
```
## TODO
- [ ] Delete Messages
- [ ] Support for more complicated email searches.
- [ ] Instead of caching, update last update and filter for messages after that point?
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ifttt-0.2.1.tar.gz
(5.5 kB
view details)
Built Distribution
File details
Details for the file ifttt-0.2.1.tar.gz
.
File metadata
- Download URL: ifttt-0.2.1.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 10344b892d1f8d5e7cd2a2c8f85f44b2e52882b905eb0c41286580ea272154ee |
|
MD5 | c4b1e84867bbc238c44ae88d73ccb932 |
|
BLAKE2b-256 | 41c06822e92d34568d6f91b63c4dae7d55e6eeadbcca423c3035d5f1b45f866a |
File details
Details for the file ifttt-0.2.1.macosx-10.10-intel.exe
.
File metadata
- Download URL: ifttt-0.2.1.macosx-10.10-intel.exe
- Upload date:
- Size: 74.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12d7aacfc95407f3e44ef13baa05284a3aa6b710f4af90a3fe6a874cbd0ce95c |
|
MD5 | 7559ef83381b33a5847581fbd70b8371 |
|
BLAKE2b-256 | f80f390063e21a98a6cd6a4d29ea9509367ec142923c15eb112db1f80d9e1741 |