2017-07-26 5 views
0

フォルダをコピーしようとすると、ここで、GoogleのAPIとDjangoは、私はGoogleのAPI、PythonとDjangoのを使用してフォルダをコピーしようとしています

https://developers.google.com/drive/v3/web/quickstart/pythonを発見したコードの適応での作業の事を得るために管理している400エラーを取得

しかし、私は私が取得フォルダにコピーしようとすると:https://www.googleapis.com/drive/v3/files/FileId/copy?alt=json返さ「不正な要求」>

import os 
import logging 
import httplib2 
from pprint import pprint 
from googleapiclient.discovery import build 
from django.contrib.auth.decorators import login_required 
from django.conf import settings 
from django.http import HttpResponseBadRequest 
from django.http import HttpResponseRedirect 
from django.shortcuts import render 
from django.http import HttpResponse 
from django.template import loader 
from django.http import JsonResponse 
from django.db.utils import IntegrityError 
from .models import Entries, CredentialsModel 
from oauth2client.contrib import xsrfutil 
from oauth2client.client import flow_from_clientsecrets 
from oauth2client.contrib.django_util.storage import DjangoORMStorage 
from .pipeline_lib import pipeline_lib as pipeline 

FLOW = flow_from_clientsecrets(
    settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON, 
    scope=['https://www.googleapis.com/auth/drive', 
      'https://www.googleapis.com/auth/drive.file', 
      'https://www.googleapis.com/auth/drive.appdata', 
      'https://www.googleapis.com/auth/drive.metadata'], 
    redirect_uri='http://somedomain.com:8000/workflow/oauth2callback') 

@login_required 
def index(request): 
    storage = DjangoORMStorage(CredentialsModel, 'id', request.user, 'credential') 
    credential = storage.get() 
    if credential is None or credential.invalid == True: 
     FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY, 
                 request.user) 
     authorize_url = FLOW.step1_get_authorize_url() 
     return HttpResponseRedirect(authorize_url) 
    else: 
     http = httplib2.Http() 
     http = credential.authorize(http) 
     service = build("drive", "v3", http=http) 
     newfile = {'title': 'New Master 123', 'parents': [{'id': 'folderId'}]} 
     result = service.files().copy(fileId='folderId',body=newfile).execute() 
     pprint(result) 
     # results = service.files().list(pageSize=10,fields="nextPageToken, files(id, name)").execute() 
     # items = results.get('files', []) 
     # if not items: 
     #  print('No files found.') 
     # else: 
     #  print('Files:') 
     #  for item in items: 

     #   print('{0} ({1})'.format(item['name'], item['id'])) 
     return HttpResponse("Hello, world. You're at the index.") 

@login_required 
def auth_return(request): 
    credential = FLOW.step2_exchange(request.GET) 
    storage = DjangoORMStorage(CredentialsModel, 'id', request.user, 'credential') 
    storage.put(credential) 
    return HttpResponseRedirect("/workflow") 

答えて

1

問題を私はフォルダをコピーしようとしていて、明らかにfiles()をコピーしようとしていました。コピーは少なくとも子供がいないフォルダでは動作しませんが、警告はまだテストされていません。

同じ親のpdfのファイルIDでコピーしたいフォルダのIDを置き換えた後、関数はエラーなしで実行されました。

編集 - 私は自分自身のためにこれを理解したので、私はスタックオーバーフローのポストを見つけました。これはなぜこれが理由であるかを説明します。 In Google Drive SDK how do you copy a folder?

関連する問題