2014-01-28 6 views
5

저는 Python 2.7 및 service account을 사용하여 Google 드라이브의 파일을 제목을 기반으로 다른 폴더에 복사합니다. 이를 위해서는 5 개의 명령 (5!)을 실행해야합니다.Google 드라이브 API를 사용하여 파일을 특정 상위 폴더로 복사 하시겠습니까?

  1. 제목으로 파일 ID를 찾으십시오. 제목별로 (files().list)
  2. 찾기 상위 폴더 ID 진짜 계정 상위 폴더로 (files().insert)
  3. 이동로 (files().list)
  4. 파일 복사 (files().copy)
  5. 소유권 이전. (parents().insert)

이 모두 작동하지만 난 files().list를 호출 할 필요가 없습니다 있도록 아이디의 캐싱을 의미합니다 첫 번째 호출 수를 줄이고 싶습니다. 내가하려고하는 다음 일, 특히 내가이 질문과 함께있는 곳은 files().copy 명령 내에서 부모 폴더를 설정하는 방법입니다. 설명서에는 다음과 같이 설명 된 선택형 parents 매개 변수가 있습니다.

이 파일이 들어있는 상위 폴더 모음입니다. 이 필드를 설정하면 제공된 모든 폴더에 파일이 저장됩니다. 삽입시 폴더가 제공되지 않으면 파일은 기본 루트 폴더에 저장됩니다. 이 말을하지 않지만

, 내가 뜻을 알고 부모 ID의이 다른 곳에서 사용되는 무엇 때문에. 그러나 클라이언트 라이브러리에서이 배열을 설정해도 효과가 발생하지 않습니다. 오류가 없으며 파일이 올바른 폴더에 없습니다.

newfile = {'title': newtitle, 'parents' : [ parentFolderId ]} 
service.files().copy(fileId=originalId, body=newfile).execute() 

아무도 행운이 없었습니까 with this? 내가 놓친 다른 것이 있습니까?

보너스 : 복사 명령에서 소유권을 이전 하시겠습니까? 아마도 내 서비스 계정이 나를 사칭 할 수 있습니까?

답변

7

아하! 나는 또한 권한을 설정하는 방법을 알아낼 때/만약 내가이 업데이트됩니다

newfile = {'title': newtitle, 'parents' : [ { "id" : parentFolderId } ]} 
service.files().copy(fileId=originalId, body=newfile).execute() 

다음 parents 배열은 id 필드와 객체의 목록입니다.

하나의 이상한 메모는 파일이 인데 여전히이 내가 지정한 부모 폴더와 드라이브 루트에 복사된다는 것입니다.

+0

+1 좋은 캐치! 방금 문제가 생겨서 저장되었습니다. –

+0

하위 폴더가 있으면 어떻게해야합니까? –

관련 문제