def get(self): #get basic user information params = {'user_id': self.user.twitter_id} userInfo = call_api.twitter_api('GET', '/1.1/users/show.json', params, self.user.tw_access_token, self.user.tw_token_secret) #get friends params = {'user_id': self.user.twitter_id, 'cursor': '-1'} response = call_api.twitter_api('GET', '/1.1/friends/ids.json', params, self.user.tw_access_token, self.user.tw_token_secret) friends = [str(id) for id in response['ids']] m_userInfo = { 'twitter_id': self.user.twitter_id, 'realname': userInfo.get('name') or '', 'username': userInfo.get('screen_name') or '', 'picture': userInfo['profile_image_url'], 'location': userInfo.get('location') or '', 'website': userInfo.get('url') or '', 'friends': friends } data_models.update_twitter_info(self.user, m_userInfo) data_models.update_twitter_friends(self.user, m_userInfo) self.redirect('/profile')
def getTWFriend(self, reload): client = memcache.Client() # friend_ids = client.get(self.user.user_id+'tw_fids') m_friends = TWFriends.gql('WHERE twitter_id = :1', self.user.twitter_id).get() friend_ids = m_friends.friends cursor = client.get(self.user.user_id + 'tw_cursor') # if not friend_ids or reload: if reload: # params = {'user_id':self.user.twitter_id, # 'cursor':'-1'} # response = call_api.twitter_api('GET', '/1.1/friends/ids.json', params, # self.user.tw_access_token, # self.user.tw_token_secret) # friend_ids = response['ids'] cursor = 0 # client.add(self.user.user_id+'tw_fids', friend_ids) # client.add(self.user.user_id+'tw_cursor', cursor) if cursor >= len(friend_ids): return ({}, 0, m_friends.num_on_cw) if cursor + FRIENDS_EACH_BULK > len(friend_ids): next_part = friend_ids[cursor:] else: next_part = friend_ids[cursor:(cursor + FRIENDS_EACH_BULK)] cursor += FRIENDS_EACH_BULK params = {'user_id': ','.join([str(id) for id in next_part])} response = call_api.twitter_api('GET', '/1.1/users/lookup.json', params, self.user.tw_access_token, self.user.tw_token_secret) TW_friends = [] current_cws = 0 for friend in response: tw_friend = { 'id': friend['id_str'], 'name': friend['name'], 'picture': friend['profile_image_url'] } if friend['id_str'] in friend_ids[:m_friends.num_on_cw]: tmpuser = User.gql('WHERE twitter_id = :1', friend['id_str']).get() tw_friend['uid'] = tmpuser.user_id TW_friends.insert(0, tw_friend) current_cws += 1 else: TW_friends.append(tw_friend) client.set(self.user.user_id + 'tw_cursor', cursor) return (TW_friends, current_cws, m_friends.num_on_cw)
def get(self): #get basic user information params = {'user_id':self.user.twitter_id} userInfo = call_api.twitter_api('GET', '/1.1/users/show.json', params, self.user.tw_access_token, self.user.tw_token_secret) #get friends params = {'user_id':self.user.twitter_id, 'cursor':'-1'} response = call_api.twitter_api('GET', '/1.1/friends/ids.json', params, self.user.tw_access_token, self.user.tw_token_secret) friends = [str(id) for id in response['ids']] m_userInfo = {'twitter_id':self.user.twitter_id, 'realname':userInfo.get('name') or '', 'username':userInfo.get('screen_name') or '', 'picture':userInfo['profile_image_url'], 'location':userInfo.get('location') or '', 'website':userInfo.get('url') or '', 'friends':friends} data_models.update_twitter_info(self.user, m_userInfo) data_models.update_twitter_friends(self.user, m_userInfo) self.redirect('/profile')
def getTWFriend(self, reload): client = memcache.Client() # friend_ids = client.get(self.user.user_id+'tw_fids') m_friends = TWFriends.gql('WHERE twitter_id = :1', self.user.twitter_id).get() friend_ids = m_friends.friends cursor = client.get(self.user.user_id+'tw_cursor') # if not friend_ids or reload: if reload: # params = {'user_id':self.user.twitter_id, # 'cursor':'-1'} # response = call_api.twitter_api('GET', '/1.1/friends/ids.json', params, # self.user.tw_access_token, # self.user.tw_token_secret) # friend_ids = response['ids'] cursor = 0 # client.add(self.user.user_id+'tw_fids', friend_ids) # client.add(self.user.user_id+'tw_cursor', cursor) if cursor >= len(friend_ids): return ({}, 0, m_friends.num_on_cw) if cursor + FRIENDS_EACH_BULK > len(friend_ids): next_part = friend_ids[cursor:] else: next_part = friend_ids[cursor:(cursor + FRIENDS_EACH_BULK)] cursor += FRIENDS_EACH_BULK params = {'user_id':','.join([str(id) for id in next_part])} response = call_api.twitter_api('GET', '/1.1/users/lookup.json', params, self.user.tw_access_token, self.user.tw_token_secret) TW_friends = [] current_cws = 0 for friend in response: tw_friend = {'id':friend['id_str'], 'name':friend['name'], 'picture':friend['profile_image_url']} if friend['id_str'] in friend_ids[:m_friends.num_on_cw]: tmpuser = User.gql('WHERE twitter_id = :1', friend['id_str']).get() tw_friend['uid'] = tmpuser.user_id TW_friends.insert(0, tw_friend) current_cws += 1 else: TW_friends.append(tw_friend) client.set(self.user.user_id+'tw_cursor', cursor) return (TW_friends, current_cws, m_friends.num_on_cw)
def twitter_auth(self, callback): oauth_token = self.request.get('oauth_token') oauth_verifier = self.request.get('oauth_verifier') # check if the users has already granted access if not oauth_token: # step 1 - obtaining a request token # generate the oauth header oauth_header = twitter_oauth.get_oauth_header( 'POST', conf.TWITTER_API + '/oauth/request_token', None, conf.WEB_SERVER + callback, conf.TWITTER_CONSUMER_KEY, conf.TWITTER_CONSUMER_SECRET) #sending a signed message to POST oauth/request_token step1 = urlfetch.fetch(conf.TWITTER_API + '/oauth/request_token', method=urlfetch.POST, headers={ u'Authorization': oauth_header }).content step1_response = self.get_key_value_from_string(step1) #step 2 - redirecting the user self.redirect(conf.TWITTER_API + '/oauth/authenticate?oauth_token=' + step1_response['oauth_token']) else: # if access has been granted params = {'oauth_verifier': oauth_verifier} # generate the oauth header oauth_header = twitter_oauth.get_oauth_header( 'POST', conf.TWITTER_API + '/oauth/access_token', params, None, conf.TWITTER_CONSUMER_KEY, conf.TWITTER_CONSUMER_SECRET, oauth_token, None) payload = 'oauth_verifier=' + oauth_verifier # step 3 - converting the request token to an access token # make a request to the POST oauth/access_token endpoint, containing the oauth_verifier value obtained in step 2 step3 = urlfetch.fetch(conf.TWITTER_API + '/oauth/access_token', payload=payload, method=urlfetch.POST, headers={ u'Authorization': oauth_header, u'Content-Type': 'application/x-www-form-urlencoded' }).content step3_response = self.get_key_value_from_string(step3) twitter_id = step3_response['user_id'] oauth_token = step3_response['oauth_token'] oauth_token_secret = step3_response['oauth_token_secret'] #get basic user information params = {'user_id': twitter_id} userInfo = call_api.twitter_api('GET', '/1.1/users/show.json', params, oauth_token, oauth_token_secret) #get friends params = {'user_id': twitter_id, 'cursor': '-1'} response = call_api.twitter_api('GET', '/1.1/friends/ids.json', params, oauth_token, oauth_token_secret) friends = [str(id) for id in response['ids']] m_userInfo = { 'twitter_id': twitter_id, 'firstname': (userInfo.get('name') or '').capitalize(), 'lastname': '', 'realname': userInfo.get('name') or '', 'username': userInfo.get('screen_name') or '', 'picture': userInfo['profile_image_url'], 'tw_access_token': oauth_token, 'tw_token_secret': oauth_token_secret, 'location': userInfo.get('location') or '', 'website': userInfo.get('url') or '', 'friends': friends } return m_userInfo return None
def twitter_auth(self, callback): oauth_token = self.request.get("oauth_token") oauth_verifier = self.request.get("oauth_verifier") # check if the users has already granted access if not oauth_token: # step 1 - obtaining a request token # generate the oauth header oauth_header = twitter_oauth.get_oauth_header( "POST", conf.TWITTER_API + "/oauth/request_token", None, conf.WEB_SERVER + callback, conf.TWITTER_CONSUMER_KEY, conf.TWITTER_CONSUMER_SECRET, ) # sending a signed message to POST oauth/request_token step1 = urlfetch.fetch( conf.TWITTER_API + "/oauth/request_token", method=urlfetch.POST, headers={u"Authorization": oauth_header}, ).content step1_response = self.get_key_value_from_string(step1) # step 2 - redirecting the user self.redirect(conf.TWITTER_API + "/oauth/authenticate?oauth_token=" + step1_response["oauth_token"]) else: # if access has been granted params = {"oauth_verifier": oauth_verifier} # generate the oauth header oauth_header = twitter_oauth.get_oauth_header( "POST", conf.TWITTER_API + "/oauth/access_token", params, None, conf.TWITTER_CONSUMER_KEY, conf.TWITTER_CONSUMER_SECRET, oauth_token, None, ) payload = "oauth_verifier=" + oauth_verifier # step 3 - converting the request token to an access token # make a request to the POST oauth/access_token endpoint, containing the oauth_verifier value obtained in step 2 step3 = urlfetch.fetch( conf.TWITTER_API + "/oauth/access_token", payload=payload, method=urlfetch.POST, headers={u"Authorization": oauth_header, u"Content-Type": "application/x-www-form-urlencoded"}, ).content step3_response = self.get_key_value_from_string(step3) twitter_id = step3_response["user_id"] oauth_token = step3_response["oauth_token"] oauth_token_secret = step3_response["oauth_token_secret"] # get basic user information params = {"user_id": twitter_id} userInfo = call_api.twitter_api("GET", "/1.1/users/show.json", params, oauth_token, oauth_token_secret) # get friends params = {"user_id": twitter_id, "cursor": "-1"} response = call_api.twitter_api("GET", "/1.1/friends/ids.json", params, oauth_token, oauth_token_secret) friends = [str(id) for id in response["ids"]] m_userInfo = { "twitter_id": twitter_id, "firstname": (userInfo.get("name") or "").capitalize(), "lastname": "", "realname": userInfo.get("name") or "", "username": userInfo.get("screen_name") or "", "picture": userInfo["profile_image_url"], "tw_access_token": oauth_token, "tw_token_secret": oauth_token_secret, "location": userInfo.get("location") or "", "website": userInfo.get("url") or "", "friends": friends, } return m_userInfo return None