Created
February 21, 2012 02:50
-
-
Save jonmarkgo/1873218 to your computer and use it in GitHub Desktop.
Twilio Cat Facts by Akiva Bamberger
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
application: cat-facts | |
version: 1 | |
runtime: python | |
api_version: 1 | |
handlers: | |
- url: /.* | |
script: index.py |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Numbers(db.Model): | |
number = db.StringProperty() | |
created = db.DateTimeProperty(auto_now_add=True) | |
last_touched = db.DateTimeProperty(auto_now=True) | |
count = db.IntegerProperty() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from random import choice | |
def catfacts(): | |
facts = ["cat fact #1", ..., "cat fact #200"] | |
return choice(facts) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{% if condition1 %} X {% else %} Y {% endif %} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import datetime | |
import os | |
import re | |
from google.appengine.ext import db | |
from google.appengine.ext import webapp | |
from google.appengine.ext.webapp import template | |
from google.appengine.ext.webapp.util import run_wsgi_app | |
from twilio.rest import TwilioRestClient | |
from facts import catfacts |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head><title>cat facts for Your Phone!</title></head> | |
<body> | |
<h1>cat facts</h1> | |
<h2>Add your number to get a cat fact every 4 hours (for 24 hours of cat loving fun)!</h2> | |
<h2> | |
{% if error %} | |
You made a Meow-stake. Try again. | |
{% else %} {% if return %} | |
Added to cat-facts! Isn't that purrfect. | |
{% else %} {% if number %} | |
Already added! Thanks anyways. | |
{% endif %} {% endif %} {% endif %} | |
</h2> | |
<form method="post" action="/"> | |
<label for="number">phone number: | |
<input type='text' name='number' /> | |
</label> | |
<input type='submit' /> | |
</form> | |
<img src="http://placekitten.com/g/200/200" /> | |
<img src="http://placekitten.com/g/301/200" /> | |
<img src="http://placekitten.com/g/101/200" /> | |
<p>Random fact: </p> | |
<p>text STOP back to us and we'll unsubscribe you!</p> | |
<p>questions? comments? <a href="http://www.twitter.com/xoob">xoob</a></p> | |
<script type="text/javascript"> | |
var _gaq = _gaq || []; | |
_gaq.push(['_setAccount', 'UA-xxxxxxxx-x']); | |
_gaq.push(['_trackPageview']); | |
(function() { | |
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |
ga.src = ('https:' == document.location.protocol ? | |
'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | |
})(); | |
</script> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import datetime | |
import os | |
import re | |
from google.appengine.ext import db | |
from google.appengine.ext import webapp | |
from google.appengine.ext.webapp import template | |
from google.appengine.ext.webapp.util import run_wsgi_app | |
from twilio.rest import TwilioRestClient | |
from facts import catfacts | |
MAX_COUNT = 6 | |
def last_time(): | |
return datetime.datetime.now() - datetime.timedelta(hours=4) | |
class Numbers(db.Model): | |
number = db.StringProperty() | |
created = db.DateTimeProperty(auto_now_add=True) | |
last_touched = db.DateTimeProperty(auto_now=True) | |
count = db.IntegerProperty() | |
class MainPage(webapp.RequestHandler): | |
def get(self): | |
template_values = { 'fact': catfacts() } | |
path = os.path.join(os.path.dirname(__file__), 'index.html') | |
self.response.out.write(template.render(path, template_values)) | |
def post(self): | |
number=self.request.get('number').strip().replace(" ", "").replace("-","") | |
template_values = { 'return': False, 'number': number, 'error': False } | |
if re.search(r'^\d+$',number) and len(number) == 10: | |
seenBefore = Numbers.gql("WHERE number=:1",number).get() | |
if not seenBefore: | |
newbie = Numbers(number=number, count=1) | |
newbie.put() | |
self.call_people(newbie) | |
template_values['return'] = True | |
else: | |
template_values['return'] = False | |
else: | |
template_values['error'] = True | |
template_values['fact'] = catfacts() | |
path = os.path.join(os.path.dirname(__file__), 'index.html') | |
self.response.out.write(template.render(path, template_values)) | |
def call_people(self, newbie): | |
self.work_it(newbie) | |
people = Numbers.gql("WHERE last_touched < :1", last_time()).fetch(5) for person in people: self.work_it(person) def call_person(self, person): SIZE = 155 fact = catfacts() account = "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4f" token = "72xxxxxxxxxxxxxxxxxxxxxxxxxxxx3a" client = TwilioRestClient(account, token) num_messages = len(fact) / SIZE + 1 if num_messages == 1: client.sms.messages.create(to="+1"+person.number, from_="+18053228518", body=fact ) else: for i in xrange(num_messages): client.sms.messages.create(to="+1"+person.number, from_="+18053228518", body="%d/%d: %s" % ((i+1), num_messages, fact[i*155:((i+1)*155)] )) person.count = person.count + 1 if person.count >= MAX_COUNT: | |
db.delete(person) | |
return | |
person.put() | |
application = webapp.WSGIApplication([('/', MainPage)], debug=False) | |
def main(): | |
run_wsgi_app(application) | |
if __name__ == '__main__': | |
main() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MainPage(webapp.RequestHandler): | |
def get(self): | |
template_values = { 'fact': catfacts() } | |
path = os.path.join(os.path.dirname(__file__), 'index.html') | |
self.response.out.write(template.render(path, template_values)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def post(self): | |
number=self.request.get('number').strip().replace(" ", "").replace("-","") | |
template_values = { 'return': False, 'number': number, 'error': False } | |
if re.search(r'^\d+$',number) and len(number) == 10: | |
seenBefore = Numbers.gql("WHERE number=:1",number).get() | |
if not seenBefore: | |
newbie = Numbers(number=number, count=1) | |
newbie.put() | |
self.call_people(newbie) | |
template_values['return'] = True | |
else: | |
template_values['return'] = False | |
else: | |
template_values['error'] = True | |
template_values['fact'] = catfacts() | |
path = os.path.join(os.path.dirname(__file__), 'index.html') | |
self.response.out.write(template.render(path, template_values)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def last_time(): | |
return datetime.datetime.now() - datetime.timedelta(hours=4) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment