django アプリを Google Calendar API v3 に接続しようとしています。
これを行うには、Google API Python クライアントを使用しています
ドキュメントには、サービス オブジェクトの作成方法に関するリファレンスがあります。
Google の Django example で使用する方法の例を参照してください。これは私の見解の一部です。
import logging
import httplib2
from oauth2client.django_orm import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.util import logger
from apiclient.discovery import build
from core.models import FlowModel, CredentialsModel
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
FLOW = OAuth2WebServerFlow(
client_id= _cliente_id,
client_secret= _cliente_secret,
scope= _scope,
user_agent=_user_agent)
current_site = Site.objects.get_current()
URI = "http://"+str(current_site)+"/auth_return"
def authentice(request):
user = request.user
storage = Storage(CredentialsModel, 'id', user, 'credential')
credential = storage.get()
if credential is None or credential.invalid == True:
authorize_url = FLOW.step1_get_authorize_url(URI)
f = FlowModel(id=user, flow=flow)
f.save()
return authorize_url
else:
http = httplib2.Http()
http = credential.authorize(http)
# The Service Object
service = build(serviceName='calendar', version='v3', http=http)
return service
def auth_return(request):
f = FlowModel.objects.get(id=request.user)
credential = f.FLOW.step2_exchange(request.REQUEST) #Zica aqui...
storage = Storage(CredentialsModel, 'id', request.user, 'credential')
storage.put(credential)
f.delete()
return HttpResponseRedirect("/")
def new_calendar(request):
service = authentice(request)
if request.POST:
service = authentice(request)
calendar = {
'summary': request.POST.get("summary"),
'timeZone': 'America/Santo_Domingo'
}
created_calendar = service.calendars().insert(body=calendar).execute()
return HttpResponseRedirect("/")
else:
return render_to_response('calendar_form.html',
context_instance=RequestContext(request))
これは次のエラーを返しています:
「str」オブジェクトには属性「calendars」がありません
実際には、サービス オブジェクトではなく文字列 (URL) を返していますが、その理由はわかりません。
あなたの一人が何か考えを持っているなら、これで私を助けてください。
PS: 私の英語でごめんなさい! :P