Skip to content

Instantly share code, notes, and snippets.

@laiso
Created August 25, 2010 18:39
Show Gist options
  • Save laiso/550044 to your computer and use it in GitHub Desktop.
Save laiso/550044 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
# util.py
import tweepy
import settings
def get_api():
oauth = tweepy.OAuthHandler(settings.CONSUMER_KEY, settings.CONSUMER_SECRET)
oauth.set_access_token(settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)
return tweepy.API(oauth)
# models.py
from google.appengine.ext import db
class TwitterUserKey(db.Model):
last_update = db.DateTimeProperty(required=True, auto_now=True)
# views.py
from core.updater import TwitterUserUpdater
def index(request):
job = TwitterUserUpdater()
job.start()
return render_to_response('core/index.html', {'message': 'Hello'})
# updater.py
import logging
import datetime
import tweepy
from google.appengine.ext import db
from bulkupdate import BulkUpdater
from core.models import TwitterUserKey
from core.util import get_api
class TwitterUserUpdater(BulkUpdater):
INSERT_LIMIT = 10
def get_query(self):
return TwitterUserKey.all().order('last_update')
def handle_entity(self, entity):
api = get_api()
uid = entity.key().name()
logging.debug("get followers @%s" % uid)
try:
ids = api.followers_ids(uid)
except tweepy.TweepError, e:
if e == "Not authorized":
logging.log("uid:%s is protedted" % uid)
return
else:
logging.error("TweepError: %s" % e)
return
keys = []
get_count = 0
for i in ids:
if get_count > self.INSERT_LIMIT:
break
get_count += 1
is_join = TwitterUserKey.get_by_key_name(str(i))
if not is_join:
new = TwitterUserKey(key_name=str(i))
keys.append(new)
keys.append(entity)
db.put(keys)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment