def youtube_new(request): # set scope scope = u'{0} {1} {2}'.format( 'https://www.googleapis.com/auth/youtube', 'https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email' ) # create session youtube = get_youtube_service() # redirect to dialog params = { 'scope': scope, 'access_type':'offline', 'approval_prompt':'force', 'response_type': 'code', 'redirect_uri': YOUTUBE_CALLBACK_URL } authorization_url = youtube.get_authorize_url(**params) return redirect(authorization_url)
def youtube_callback(request): # get/check params redirect_uri = YOUTUBE_CALLBACK_URL code = request.GET.get('code', None) if not code: messages.error(request, u'Ocorreu um erro ao adicionar a conta do youtube.') return redirect('accounts_account_list') # create session youtube = get_youtube_service() # fetch tokens data = {'code':code, 'redirect_uri':redirect_uri, 'grant_type': 'authorization_code'} r = youtube.get_raw_access_token(data=data).json() access_token = r['access_token'] expires = r['expires_in'] refresh_token = r['refresh_token'] # get information about user client = youtube.get_session(token=access_token) me = client.get('https://www.googleapis.com/oauth2/v1/userinfo').json() # create new social account account, created = Account.objects.get_or_create( user=request.user, provider='youtube', provider_id=me['id'], provider_username=me['email'] ) account.refresh_token = refresh_token account.oauth_token = access_token account.expires_in = datetime.now() + timedelta(seconds=int(expires)) account.save() # redirect messages.success(request, u'Conta do youtube adicionada com sucesso.') return redirect('accounts_account_list')