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.2.tar.gz
(5.6 kB
view details)
Built Distribution
File details
Details for the file ifttt-0.2.2.tar.gz
.
File metadata
- Download URL: ifttt-0.2.2.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d74602815f8e64c4ec129a89a0e83273c826831df9a36a648ddb853a65f7b25 |
|
MD5 | e2d8d1946a7df76bfd358a1db27e861a |
|
BLAKE2b-256 | 7f605ebc602fdb356e5a675dc6c147f59a5fb7bec844a3ed385f3b6299573bd4 |
File details
Details for the file ifttt-0.2.2.macosx-10.10-intel.exe
.
File metadata
- Download URL: ifttt-0.2.2.macosx-10.10-intel.exe
- Upload date:
- Size: 74.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e0c3cd9af87e40fa2905cd70a67c856fb11c35c1637411e613f458f569e73835 |
|
MD5 | abd596675d5c5cf9daa948b0aac7529e |
|
BLAKE2b-256 | f61c9cd77461e2ba3e706fdee8eb4de0903cae2d8c10d7949174db7953993855 |