Esempio n. 1
0
 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')
Esempio n. 2
0
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