Tweet about new notes periodically
[oweals/karmaworld.git] / karmaworld / apps / notes / tasks.py
1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # Copyright (C) 2013  FinalsClub Foundation
4
5 from celery import task
6 from karmaworld.apps.notes.models import Note
7 from karmaworld.secret.twitter import *
8 import twitter
9 import logging
10 from pyshorteners.shorteners import Shortener
11
12 logger = logging.getLogger(__name__)
13
14 @task(name="tweet_note")
15 def tweet_note():
16     """Tweet about a new note."""
17
18     api = twitter.Api(consumer_key=CONSUMER_KEY,
19                       consumer_secret=CONSUMER_SECRET,
20                       access_token_key=ACCESS_TOKEN_KEY,
21                       access_token_secret=ACCESS_TOKEN_SECRET)
22
23     newest_notes = Note.objects.all()[:100]
24     for n in newest_notes:
25         if not n.tweeted:
26             update = tweet_string(n)
27             logger.info("Tweeting:")
28             logger.info(update)
29
30             # Mark this tweeted before we actually tweet it
31             # to be extra safe against double tweets
32             n.tweeted = True
33             n.save()
34
35             api.PostUpdate(tweet_string(n))
36
37             break
38
39
40 def tweet_string(note):
41     # This url will use 13 characters
42     shortener = Shortener('GoogleShortener')
43     url = "https://www.karmanotes.org" + \
44         note.get_absolute_url()
45     short_url = shortener.short(url)
46
47     # space character
48
49     # 16 characters
50     school = note.course.school.slug
51     short_school = school[:school.find('-')][:16]
52
53     # space character
54
55     # 50 characters
56     short_course = note.course.name[:50]
57
58     # space and colon characters
59
60     # 57 characters
61     short_note = note.name[:57]
62
63     return short_url + " #" + short_school + " " + \
64         short_course + ": " + \
65         short_note
66