コマンドラインフォルダーセレクターを作成しました。フォルダ内のすべてのファイルを一覧表示したい。 service.children()を使用して試しましたが、機能しません。動作しないもの:
files = service.children().list(folderId=file_id).execute()
service
オブジェクトをインスタンス化するコードは次のとおりです。
service = build('drive', 'v3', http=creds.authorize(Http()))
コードの他の部分が機能しているので、サービスが機能していることがわかります
私は変数file_id
は有効なフォルダです。それがそうかもしれないことを知っている誰か?
最近、APIバージョンを2から3にアップグレードしたようです。 Drive API changelog によると、children()
リソースはもうありません。予期しない変更が他にもあると思われるので、必ずその変更ログを確認してください。
Pythonクライアントライブラリのドキュメント Drive V :
about()
aboutリソースを返します。changes()
変更リソースを返します。channels()
チャネルResourceを返します。comments()
コメントリソースを返します。files()
ファイルResourceを返します。permissions()
権限リソースを返します。replies()
返信リソースを返します。revisions()
リビジョンリソースを返します。teamdrives()
teamdrivesリソースを返します。new_batch_http_request()
検出ドキュメントに基づいてBatchHttpRequest
オブジェクトを作成します。
移行したくない場合でも、 Drive V2 のchildren()
リソースがあります。
about()
aboutリソースを返します。apps()
アプリのリソースを返します。changes()
変更リソースを返します。channels()
チャネルResourceを返します。children()
子リソースを返します。comments()
コメントリソースを返します。files()
ファイルResourceを返します。parents()
親リソースを返します。permissions()
権限リソースを返します。properties()
プロパティResourceを返します。realtime()
リアルタイムリソースを返します。replies()
返信リソースを返します。revisions()
リビジョンリソースを返します。teamdrives()
teamdrivesリソースを返します。new_batch_http_request()
検出ドキュメントに基づいてBatchHttpRequest
オブジェクトを作成します。
したがって、解決策は、ドライブのV2バージョンをビルドすることですREST API:
_service = build('drive', 'v2', ...)
_
または、引き続き_v3
_を使用し、コードを更新して、現在必要なfiles()
リソースを使用します。
IDがfolderId
のフォルダーの子を適切な引数で要求し、list
と_list_next
_を呼び出すことができます。
Python3コード:
_kwargs = {
"q": "{} in parents".format(folderId),
# Specify what you want in the response as a best practice. This string
# will only get the files' ids, names, and the ids of any folders that they are in
"fields": "nextPageToken,incompleteSearch,files(id,parents,name)",
# Add any other arguments to pass to list()
}
request = service.files().list(**kwargs)
while request is not None:
response = request.execute()
# Do stuff with response['files']
request = service.files().list_next(request, response)
_
参照:
多分あなたはservice.files()
を使う必要がありますか?
_files = service.files().list(folderId=file_id).execute()
_
またはこのようなもの
_files = service.files().list().execute().get('files', [])
_
get()
ではなくlist()
で試してください
_service.children().get(folderId=folder_id).execute()
_