Python3 и django3 Ошибка Google Business API - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть следующий код в python 3 и django 3. У меня есть все предыдущие шаги API Google, задокументированные в API, когда я запускаю свой сервер, я могу завершить sh процесс и получить учетные данные access_token , Но когда я пытаюсь использовать его, он не работает, когда я пытаюсь выполнить запрос к методам бизнес-API.

from django.http import HttpResponseRedirect,

from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
import google_auth_oauthlib.flow
from django.views.decorators.clickjacking import xframe_options_exempt

from .models import GoogleCredentialsModel

CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json')
SCOPES = ['https://www.googleapis.com/auth/business.manage',]

@xframe_options_exempt
def auth_request(request):
    user = User.objects.get(id=request.user.id)  # request.user
    flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
        CLIENT_SECRETS,
        SCOPES,
    )
    flow.redirect_uri = settings.GOOGLE_BUSINESS_CALLBACK
    authoritation_url, state = flow.authorization_url(
    #     # Enable offline access so that you can refresh an access token without
    #     # re-prompting the user for permission. Recommended for web server apps.
         access_type='offline',
    #     # Enable incremental authorization. Recommended as a best practice.
         include_granted_scopes='true',
    #     # ask always if consent
         prompt='consent'
    )
    return HttpResponseRedirect(authoritation_url)

@xframe_options_exempt
def auth_return(request):
    state = request.GET["state"]
    code = request.GET["code"]
    flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
        CLIENT_SECRETS,
        SCOPES,
        state=state)
    flow.redirect_uri = settings.GOOGLE_BUSINESS_CALLBACK
    try:
        flow.fetch_token(code=code)
        user = request.user
        user = TSMUser.objects.get(id=user.id)
        if GoogleCredentialModel.objects.filter(user=user).exists():
            gcred = GoogleCredentialModel.objects.get(user=user)
            gcred.set_data(Credentials(**flow.credentials))
        else:
            GoogleCredentialModel.objects.create(user=user,
                            credential=Credentials(**flow.credentials))
        service = build('business', 'v4', discoveryServiceUrl='https://developers.google.com/my-business/samples/mybusiness_google_rest_v4p5.json', credentials=flow.credentials)
        list = service.accounts().list().execute()
        # Previous  line returns <HttpError 404 when requesting https://mybusiness.googleapis.com/v4/accounts?alt=json returned "Method not found.">

    except:
        pass
    return render('google_business.html', {'business_list': list.json()})

Но я не могу найти или найти решение для этой ошибки в python 3 Каждый сайт, который я ищу, нахожу документацию старой версии, используя python2, oauth2client и httplib2

В этой ссылке приведены примеры использования python 2 и oauth2client: https://github.com/googleapis/google-api-python-client

1 Ответ

0 голосов
/ 21 апреля 2020

Проблема в моем случае заключалась в том, что я добавлял неверный секретный файл клиента, когда добавляю правильный, этот код начинает работать. Я оставил это, если кому-то нужно

...