def get_profile_image(self, name): key_name = 'at_%s' % name profile_image_url = memcache.get(key=key_name) if profile_image_url: return profile_image_url consumer = DBYAML.load('oauth') consumer = dict(consumer_key = consumer.get('consumer_key' ), consumer_secret = consumer.get('consumer_secret')) adminuser = DBYAML.load('adminuser') adminuser = dict(token=adminuser.get('oauth_token'), token_secret=adminuser.get('oauth_token_secret')) oauth = OAuth(consumer, adminuser) api = TwitterAPI(oauth) try: res = api.show(screen_name=name) except urlfetch.DownloadError: res = None if res: return res.get('profile_image_url')
def random_tweet(via, count=1): conf = DBYAML.load('oauth') if not conf: return words = DBYAML.load('words') if not words: return format = DBYAML.load('format') if not format: format = '%s' consumer = dict(consumer_key = conf.get('consumer_key' ), consumer_secret = conf.get('consumer_secret')) from_token = via from_user = from_token._name # 自爆 suicide = False suicide_rate = DBYAML.load('suicide_rate') if suicide_rate: if count >= len(suicide_rate): suicide_rate = suicide_rate[-1] else: suicide_rate = suicide_rate[count] dice = random.random() if dice <= suicide_rate: suicide = True chk = libs.cpu.CPUChecker("random_tweet") chk.kokokara() if suicide: lst = [ from_token ] else: lst = OAuthAccessToken.get_random_access_token(5) random.shuffle(lst) lst.append(from_token) chk.kokomade("OAuthAccessToken.get_random_access_token") word = random.choice(words) status = format % word for i, item in enumerate(lst): logging.debug('random_tweet: try=%d' % (i+1)) token = dict(token = item.oauth_token, token_secret = item.oauth_token_secret) api = TwitterAPI(OAuth(consumer, token)) chk.kokokara() api_result = None try: # api_result = api.verify() api_result = api.tweet(status=status) except urlfetch.DownloadError: api_result = None logging.warning('tweet failed: timeout') except urlfetch.InvalidURLError: api_result = None item.delete() logging.warning('tweet failed: invalid access_token %s' % item.oauth_token) chk.kokomade("api_result = api.tweet(status=status)") if not api_result: continue chk.kokokara() to_user = api_result.get('user', {}).get('screen_name').encode('utf-8') status_id = int(api_result.get('id', 0)) if status_id: YouHaShockHistory( from_user = from_user, to_user = to_user, word = word , status_id = status_id ).put() logging.info('%s (posted by %s via %s)' % (status, to_user, from_user)) chk.kokomade("YouHaShockHistory") chk.kokokara() expired = datetime.datetime.now() - datetime.timedelta(hours=2) if from_token.is_saved(): # 既存ユーザー if from_token.modified < expired: from_token.randint = random.randint(0, 1000) from_token.put() else: # 新規ユーザー from_token.randint = random.randint(0, 1000) from_token.put() if item == from_token: # 新規ユーザーが自爆したときAPIの結果からアイコン画像のURLをメモしておく profile_image_url = api_result.get('user', {}).get('profile_image_url') key_name = 'at_%s' % to_user memcache.add(key=key_name, value=profile_image_url) if item != from_token: if item.modified < expired: item.randint = random.randint(0, 1000) item.put() chk.kokomade("TokenUpdate") return True # break return False