создать новую папку в Google Drive с остальным API - PullRequest
0 голосов
/ 14 января 2019

Как я могу создать новую папку на диске Google, используя python, только если она не существует? Я совершенно новичок в этом API Google и Python.

(У меня есть токен доступа для моей учетной записи, и я хочу создать папку, используя это.)

создать папку

import json
import requests
headers = {"Authorization": "Bearer Token"}

data = {
    "name": "name",
    "mimeType": "application/vnd.google-apps.folder"
}

r = requests.post("https://www.googleapis.com/drive/v3/files",
    headers=headers,data = data)
print(r.text)

Создается только файл, а не папка. Как я могу исправить проблему?

Ответы [ 2 ]

0 голосов
/ 14 января 2019


    def get_folder_id(self, folder, parent):
        _r = None
        try:
            url = 'https://www.googleapis.com/drive/v3/files?q={0}'. \
                format(quote(
                    "mimeType='application/vnd.google-apps.folder'"
                    " and name ='{0}'"
                    " and trashed != true"
                    " and '{1}' in parents".format(folder, parent),
                    safe='~()*!.\''
                    )
                )
            _r = requests.get(url, headers={
                "Authorization": "Bearer {0}".format(self.get_access_token()),
                "Content-Type": self.file_bean.get_content_type(),
            })
            _r.raise_for_status()
            _dict = _r.json()
            if 'files' in _dict and len(_dict['files']):
                return _dict['files'][0]['id']
            else:
                _f = self.create_folder(folder, parent)
                if _f:
                    return _f
                status, status_message = self.get_invalid_folder()
        except requests.exceptions.HTTPError:
            status, status_message = self.get_http_error(_r)
        except Exception as e:
            logger.exception(e)
            status, status_message = self.get_unknown_error()


    def create_folder(self, folder_name, parent_folder_id):
        url = 'https://www.googleapis.com/drive/v3/files'
        headers = {
            'Authorization': 'Bearer {}'.format(self.get_access_token()), # get your access token
            'Content-Type': 'application/json'
        }
        metadata = {
            'name': folder_name, #folder_name as a string
            'parents': [parent_folder_id], # parent folder id (="root" if you want to create a folder in root)
            'mimeType': 'application/vnd.google-apps.folder'
        }
        response = requests.post(url, headers=headers, data=json.dumps(metadata))
        response = response.json()
        if 'error' not in response:
            return response['id']  # finally return folder id

использовать get_folder_id, который внутренне создает папку, если ее не существует.

PS: Этот код слепо скопирован из моей работы, если у вас возникнут затруднения с пониманием, я могу уточнить ответ.

0 голосов
/ 14 января 2019

Ваш первый шаг - определить, что вы подразумеваете под словом «только если его не существует». В Google Диске файлы (а папка - это просто файл со специальным типом пантомимы) идентифицируются по их идентификатору, , а не по их имени. Поэтому у меня может быть много папок с одинаковыми именами.

Я предполагаю, что «только если он не существует» на самом деле означает «только если папка с заданным именем еще не существует». Шаги: -

  1. Сделать файл / список с запросом name=foldername, trashed=false, mime-type=application/vnd.google-apps.folder. Убедитесь, что ваш файл files.list правильно обрабатывает nextPageToken
  2. If the count of results == 0, files.create foldername
...