forked from adicu/pericles
/
pericles.py
116 lines (85 loc) · 3.55 KB
/
pericles.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import settings
from gdata.calendar.client import CalendarClient, CalendarEventQuery
from datetime import datetime, timedelta
from mailsnake import MailSnake
def find_template(name):
mc = MailSnake(settings.MC_API_KEY)
templates = mc.templates()['user']
for temp in templates:
if temp['name'] == name:
return temp['id']
return 0
def find_list(name):
mc = MailSnake(settings.MC_API_KEY)
lists = mc.lists(filters = {"list_name": name})
if lists['total'] == 0:
return 0
return lists['data'][0]['id']
def parse_timestamp(ts):
daystr, timestr = tuple(ts.split('T'))
year, month, day = tuple([int(part) for part in daystr.split('-')])
hour, minute = tuple([int(part) for part in timestr.split(':')[:2]])
return datetime(year, month, day, hour, minute)
def event_text(event, html=True):
event_dict = {}
event_dict['title'] = event.title.text
start_time = parse_timestamp(event.when[0].start)
end_time = parse_timestamp(event.when[0].end)
event_dict['date'] = start_time.strftime(settings.DATE_FORMAT)
event_dict['start'] = start_time.strftime(settings.TIME_FORMAT)
event_dict['end'] = end_time.strftime(settings.TIME_FORMAT)
event_dict['location'] = event.where[0].value
event_dict['description'] = event.content.text
if html:
template = unicode(settings.EVENT_HTML_TEMPLATE)
else:
template = unicode(settings.EVENT_TEXT_TEMPLATE)
return template.format(**event_dict)
def get_events():
client = CalendarClient(source='adicu-pericles-v1')
client.ClientLogin(settings.GCAL_USERNAME,
settings.GCAL_PASSWORD,
client.source)
uri = "https://www.google.com/calendar/feeds/" + settings.GCAL_ID + \
"/private/full"
start_date = datetime.today()
end_date = start_date + timedelta(weeks=1)
query = CalendarEventQuery()
query.start_min = start_date.strftime('%Y-%m-%d')
query.start_max = end_date.strftime('%Y-%m-%d')
return client.GetCalendarEventFeed(uri=uri, q=query)
def gen_email_text():
feed = get_events()
text = u'\n\n'.join([event_text(event, False)
for event in reversed(feed.entry)])
html = u'\n\n'.join([event_text(event, True)
for event in reversed(feed.entry)])
return html, text
def create_campaign(html, text):
mc = MailSnake(settings.MC_API_KEY)
options = {
"subject" : datetime.today().strftime(settings.SUBJECT_TEMPLATE),
"from_email" : settings.MC_EMAIL,
"from_name" : settings.MC_FROM_NAME,
"to_name" : settings.MC_TO_NAME,
"template_id" : find_template(settings.MC_TEMPLATE_NAME),
"list_id" : find_list(settings.MC_LIST_NAME)
}
section_name = 'html_' + settings.MC_TEMPLATE_SECTION
content = {section_name: html, "text": text}
cid = mc.campaignCreate(type='regular', content=content, options=options)
return cid
def campaign_info(cid):
mc = MailSnake(settings.MC_API_KEY)
campaigns = mc.campaigns(filters = {"campaign_id": cid})
if campaigns['total'] == 0:
return 0
webid = campaigns['data'][0]['web_id']
title = campaigns['data'][0]['title']
region = settings.MC_API_KEY.split('-')[1]
url = "https://%s.admin.mailchimp.com/campaigns/show?id=%d" % (region, webid)
return title, url
if __name__ == '__main__':
cid = create_campaign(*gen_email_text())
title, url = campaign_info(cid)
print "Created new campaign %s. Edit it at %s." % (title, url)