Example #1
0
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})