def process_messages(request): most_recent = Datapoint.all().order("-created_at").get() url = "https://twitter.com/direct_messages.json?since_id=%u" % (most_recent.message_id if most_recent else 0) install_opener() response = simplejson.load(urllib2.urlopen(url)) for tweet in response: dp = dict( message_id=tweet["id"], sender_screen_name=tweet["sender_screen_name"].lower(), created_at=datetime.strptime(tweet["created_at"], "%a %b %d %H:%M:%S +0000 %Y"), ) (metric, sep, value) = tweet["text"].partition(":") if sep != ":": logging.warn("Tweet " + str(tweet) + " improperly formatted") continue dp["metric"] = metric.lower() match = re.match("-?\d+(\.\d+)?", value.lstrip()) if match: dp["numerical"] = float(match.group()) dp["annotation"] = value.lstrip()[match.end() :].strip() else: logging.warn("Tweet " + str(tweet) + " improperly formatted") continue follower = Follower.get_or_insert( str(tweet["sender"]["id"]), use_id=tweet["sender"]["id"], screen_name=tweet["sender_screen_name"].lower(), metrics=[dp["metric"]], ) if dp["metric"] not in follower.metrics: follower.metrics.append(dp["metric"]) follower.put() dp["follower"] = follower Datapoint(**dp).put() return direct_to_template(request, "graph/messages.html", extra_context={"response_json": response})