Получение файлов из общей папки - PullRequest
0 голосов
/ 25 апреля 2018

Я хотел бы получить доступ к файлам из общей папки и затем загрузить их.Проблема в том, что я получаю только файл «Getting Started» и не знаю, как это решить.Я пробовал несколько вещей, включая выполнение запроса в функции files (). Get, но безуспешно.Это мой код:

from google.oauth2 import service_account
import googleapiclient.discovery
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
from httplib2 import Http


scopes = ['https://www.googleapis.com/auth/drive.metadata.readonly']
credentials = ServiceAccountCredentials.from_json_keyfile_name('server_secret.json', scopes)

http_auth = credentials.authorize(Http())
service = build('drive', 'v3', http=http_auth)

results = service.files().list(
    pageSize=10, fields="nextPageToken, files(id, name)").execute()

files = results.get('files', [])

for f in files:
    print(f)

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

File.list имеет параметр q, который позволяет искать .поиск 'sharedWithMe' вернет все, что было передано вам другими пользователями.

sharedWithMe boolean =,! = Файлы, которые находятся в пользовательской коллекции "Shared with me".

def get_folder(name):
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('drive', 'v3', http=http)
    results = service.files().list(
        pageSize=10,
        q=("sharedWithMe"),
        corpora="user",
        fields="*").execute()
    items = results.get('files', [])
    if not items:
        return None
    return items[0]

Это даст вам все, что вам поделились.

Если вы знаете название того, что ищете, вы также можете добавить его.

sharedWithMe, а имя содержит 'hello'

0 голосов
/ 25 апреля 2018

Если папка, на которую вы ссылаетесь, имеет уникальное имя, вы можете попробовать что-то вроде следующего:

def get_folder(name):
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('drive', 'v3', http=http)
    results = service.files().list(
        pageSize=10,
        q=("name = '{0}'".format(name) +
           " and mimeType = 'application/vnd.google-apps.folder'"),
        corpora="user",
        fields="nextPageToken, files(id, name, webContentLink, " +
               "createdTime, modifiedTime)").execute()
    items = results.get('files', [])
    if not items:
        return None
    return items[0]

Эта функция указывает тип mime, соответствующий папке на диске, и возвращает первый результат, который соответствуетсобственное имя.Если имя вашей папки не является уникальным, вы можете изменить его, чтобы оно возвращало каждый соответствующий результат.

def get_folder_contents(folder_id):
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('drive', 'v3', http=http)

    results = service.files().list(
        q=("'{0}' in parents".format(folder_id)),
        corpora="user",
        fields="nextPageToken, files(id, name, webContentLink, " +
               "createdTime, modifiedTime)").execute()
    items = results.get('files', [])
    if not items:
        print('No files found.')
    return items

Как только вы узнаете id папки Drive, вы можете запросить все элементы, которые имеют id в parents.С этими двумя функциями вы можете сделать что-то вроде:

folder = get_folder('my_folder_name')
folder_items = get_folder_contents(folder['id'])

for item in folder_items:
    # decide if you should download
    my_download_function(url=item['webContentLink'])
...