예제 #1
0
    def get(self):
        verifier = self.request.get('oauth_verifier')
        logging.info('verify id = %s' % verifier)
        
        signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1()
        
        # Get token - key and secret from memcache that we set on SinaOauthPhaseOne
        tokenstr = memcache.get("PK_"+self.request.get('id'))
        memcache.delete("PK_"+self.request.get('id'))
        token = oauth.OAuthToken.from_string(tokenstr)                
               
        consumer = oauth.OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET)
        client = SimpleOAuthClient(SERVER, PORT, REQUEST_TOKEN_URL,
                                   ACCESS_TOKEN_URL, AUTHORIZATION_URL)
        
        oauth_request = oauth.OAuthRequest.from_consumer_and_token(
                            consumer,
                            token=token, verifier=verifier,
                            http_url=client.access_token_url)
        oauth_request.sign_request(signature_method_hmac_sha1, consumer, token)
        
        # Finally get access_token after verifier is matched.
        access_token = client.fetch_access_token(oauth_request)
        logging.info('Sina Authorized access_token = %s' % access_token)
        
        # Set cookie into browser in case for further use.
        self.response.headers.add_header('Set-Cookie',
                                         'oauth_key=' + access_token.key + cookie)
        self.response.headers.add_header('Set-Cookie',
                                         'oauth_secret=' + access_token.secret + cookie)
        
        # Call Sina weibopy API auth.OAuthHandler() and set access_token to
        # fetch access_resource aka:user resource.
        auth_access_resource = OAuthHandler(
                                    consumer_key=CONSUMER_KEY,
                                    consumer_secret=CONSUMER_SECRET)
        auth_access_resource.set_access_token(access_token.key,
                                              access_token.secret)
        
        # API() inherits auth_access_resource return.
        api = API(auth_access_resource)
        
        # I call api.verify_credentials instead of use auth.OAuthHandler.get_username
        username = api.verify_credentials()
 
        if username:
            self.username = username.screen_name
            self.response.headers.add_header('Set-Cookie',
                                             'sina_username='******'Sina username: %s' % self.username)
        else:
            logging.info('NO SINA USER')

        
        self.redirect('/')
예제 #2
0
    def get(self):
        verifier = self.request.get('oauth_verifier')
        logging.info('verify id = %s' % verifier)

        signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1()

        # Get token - key and secret from memcache that we set on SinaOauthPhaseOne
        tokenstr = memcache.get("PK_" + self.request.get('id'))
        memcache.delete("PK_" + self.request.get('id'))
        token = oauth.OAuthToken.from_string(tokenstr)

        consumer = oauth.OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET)
        client = SimpleOAuthClient(SERVER, PORT, REQUEST_TOKEN_URL,
                                   ACCESS_TOKEN_URL, AUTHORIZATION_URL)

        oauth_request = oauth.OAuthRequest.from_consumer_and_token(
            consumer,
            token=token,
            verifier=verifier,
            http_url=client.access_token_url)
        oauth_request.sign_request(signature_method_hmac_sha1, consumer, token)

        # Finally get access_token after verifier is matched.
        access_token = client.fetch_access_token(oauth_request)
        logging.info('Sina Authorized access_token = %s' % access_token)

        # Set cookie into browser in case for further use.
        self.response.headers.add_header(
            'Set-Cookie', 'oauth_key=' + access_token.key + cookie)
        self.response.headers.add_header(
            'Set-Cookie', 'oauth_secret=' + access_token.secret + cookie)

        # Call Sina weibopy API auth.OAuthHandler() and set access_token to
        # fetch access_resource aka:user resource.
        auth_access_resource = OAuthHandler(consumer_key=CONSUMER_KEY,
                                            consumer_secret=CONSUMER_SECRET)
        auth_access_resource.set_access_token(access_token.key,
                                              access_token.secret)

        # API() inherits auth_access_resource return.
        api = API(auth_access_resource)

        # I call api.verify_credentials instead of use auth.OAuthHandler.get_username
        username = api.verify_credentials()

        if username:
            self.username = username.screen_name
            self.response.headers.add_header(
                'Set-Cookie', 'sina_username='******'Sina username: %s' % self.username)
        else:
            logging.info('NO SINA USER')

        self.redirect('/')
예제 #3
0
def post_to_wb(request):
    if request.method == 'POST':
        success = ""
        access_token = request.session['oauth_access_token']
        auth = OAuthHandler(SINA_APP_KEY, SINA_APP_SECRET)
        auth.set_access_token(access_token.key, access_token.secret)
        api = API(auth)
        try:
            content = request.POST.get("content")
            api.update_status(content)
            success = "成功发布"
        except:
            raise
            success = "失败"
        return HttpResponseRedirect('/status')
    return HttpResponseRedirect('/status')
예제 #4
0
def post_to_wb(request):
    if request.method == 'POST':
        success = ""
        access_token = request.session['oauth_access_token']
        auth = OAuthHandler(SINA_APP_KEY, SINA_APP_SECRET)
        auth.set_access_token(access_token.key, access_token.secret)
        api = API(auth)
        try:
            content = request.POST.get("content")
            api.update_status(content)
            success = "成功发布"
        except:
            raise
            success = "失败"
        return HttpResponseRedirect('/status')
    return HttpResponseRedirect('/status')
예제 #5
0
def test_rp(request):
    if request.method == 'POST':
        success = ""
        access_token = request.session['oauth_access_token']
        auth = OAuthHandler(SINA_APP_KEY, SINA_APP_SECRET)
        auth.set_access_token(access_token.key, access_token.secret)
        api = API(auth)
        try:
            username = api.me().screen_name
            number = int(md5.md5(username.encode('utf-8')).hexdigest(), 16)
            rp = number % 100
            rating = rp2rating(rp)
            api.update_status(u"%s, 你的人品是 %d, %s" %(username, rp, rating))
            success = u"成功发布"
        except:
            raise
            success = u"失败"
        return HttpResponseRedirect('/status')
    return HttpResponseRedirect('/status')
예제 #6
0
def test_rp(request):
    if request.method == 'POST':
        success = ""
        access_token = request.session['oauth_access_token']
        auth = OAuthHandler(SINA_APP_KEY, SINA_APP_SECRET)
        auth.set_access_token(access_token.key, access_token.secret)
        api = API(auth)
        try:
            username = api.me().screen_name
            number = int(md5.md5(username.encode('utf-8')).hexdigest(), 16)
            rp = number % 100
            rating = rp2rating(rp)
            api.update_status(u"%s, 你的人品是 %d, %s" % (username, rp, rating))
            success = u"成功发布"
        except:
            raise
            success = u"失败"
        return HttpResponseRedirect('/status')
    return HttpResponseRedirect('/status')
예제 #7
0
    def get(self):
        query = db.GqlQuery("SELECT * FROM OauthUser")
        if query.count() > 0:
            for result in query:
                # rebuild twitter api
                twitter = tweepy.OAuthHandler(consumer_key,consumer_secret)
                twitter.set_access_token(result.twitter_access_key,result.twitter_access_secret)
                twitter_api = tweepy.API(twitter)
                
                timeline = twitter_api.user_timeline()
                last_id = result.twitter_last_id
                tweets_to_be_post = []
                for tl in timeline:
		    # disable jiepang
                    if int(tl.id_str) > int(last_id):
			if tl.source.find(unicode('街旁(JiePang)','utf8')) == -1  and tl.source.find('Instagram') == -1:
			    tweets_to_be_post.append({'id_str':tl.id_str,'text':tl.text})
                    else:
                        break
                if len(tweets_to_be_post) > 0:
                    # rebuild sina api
                    sina = OAuthHandler(app_key,app_secret)
                    sina.set_access_token(result.sina_access_key,result.sina_access_secret)
                    sina_api = API(sina)
                    
                    for tweet_obj in reversed(tweets_to_be_post):
                        user = OauthUser.get_by_key_name(result.sina_name)
                        cur_id = tweet_obj['id_str']
                        cur_tweet = tweet_obj['text']
                        if cur_tweet.find('#nosina') != -1 or cur_tweet.startswith('@'):
                            continue
                        tweet = replace_tweet(cur_tweet)
			self.response.out.write(tweet)
                        try:
                            sina_api.update_status(tweet)
                            user.twitter_last_id = cur_id
                            user.put()
                            self.response.out.write('同步成功!')
                        except WeibopError,e:
                            self.response.out.write(e)
                            self.response.out.write('<br>')
예제 #8
0
def showstatus(request):
    logined = False
    if request.session.get('oauth_access_token'):
        logined = True
        access_token = request.session['oauth_access_token']
    else:
        return render_to_response('wb/status.html', locals())
    access_token = request.session['oauth_access_token'] 
    auth = OAuthHandler(SINA_APP_KEY, SINA_APP_SECRET)
    auth.set_access_token(access_token.key, access_token.secret)
    api = API(auth)
    try: 
        gender = "male" if api.me().gender == "m" else "female"
        id = api.me().id
        screen_name = api.me().screen_name
        description = api.me().description
        location = api.me().location
        profile_image_url = api.me().profile_image_url
    except :
        return render_to_response('wb/status.html', locals())
    return render_to_response('wb/status.html', locals())
예제 #9
0
def showstatus(request):
    logined = False
    if request.session.get('oauth_access_token'):
        logined = True
        access_token = request.session['oauth_access_token']
    else:
        return render_to_response('wb/status.html', locals())
    access_token = request.session['oauth_access_token']
    auth = OAuthHandler(SINA_APP_KEY, SINA_APP_SECRET)
    auth.set_access_token(access_token.key, access_token.secret)
    api = API(auth)
    try:
        gender = "male" if api.me().gender == "m" else "female"
        id = api.me().id
        screen_name = api.me().screen_name
        description = api.me().description
        location = api.me().location
        profile_image_url = api.me().profile_image_url
    except:
        return render_to_response('wb/status.html', locals())
    return render_to_response('wb/status.html', locals())