Google Drive API / Сохранение свойства файла в виде числа вместо строки - PullRequest
1 голос
/ 11 июля 2020

Учитывая files справочную страницу API Google Диска, кажется, что метаданные, которые могут быть добавлены с помощью «свойств», могут быть только строками.

{
  "kind": "drive#file",
  "id": string,
  "name": string,
  "mimeType": string,
  "description": string,
  "trashingUser": {  },
  "trashedTime": datetime,
  "parents": [string],
  "properties": { (key): string },
}

Однако у меня есть необходимо сохранить метку времени, которая в основном представляет собой int.

Когда запрашивает , я хотел бы иметь возможность выбирать все файлы с меткой времени меньше или больше заданного значения.

Пожалуйста, а есть ли способ добиться этого? Если это новое свойство timestamp является строкой, как использовать операторы > или <?

Большое спасибо за вашу помощь. Удачного дня, Bests,

PS: Я использую клиент Google Drive API python.

1 Ответ

2 голосов
/ 12 июля 2020

Я считаю, что ваша ситуация и ваша цель следующие.

  • В вашей ситуации есть файлы, которые имеют properties с timestamp в качестве ключа и числовое значение на вашем Google Диске.
  • Вы хотите получить файлы, сравнивая со значением timestamp с использованием значения.
  • Из a timestamp, which is basically an int значение timestamp - это unix время.
  • Вы хотите добиться этого с помощью googleapis для Python.

Для достижения вашей цели я хотел бы предложить следующий ответ.

Проблема и обходной путь:

На текущем этапе для поиска файлов с использованием properties поискового запроса метода files.list в Drive API необходимо использовать properties has {key='timestamp' and value='###'}. В этом случае значение должно быть строкового типа. А также, к сожалению, например, файлы с timestamp в properties не могут быть напрямую получены с помощью properties has {key='timestamp'}. Похоже, это текущая спецификация. К сожалению, на текущем этапе файлы, которые вы хотите получить, не могут быть получены напрямую с помощью поискового запроса.

Итак, в этом ответе я хотел бы предложить обходной путь. Последовательность этого обходного пути выглядит следующим образом.

  1. Получить все файлы на Google Диске с помощью метода files.list в Drive API.
  2. Получить файлы с timestamp как введите properties. В это время значение timestamp сравнивается с введенным значением.

Когда образец сценария подготовлен из описанного выше обходного пути, он становится следующим:

Пример сценария:

compareValue = datetime.datetime(2020, 7, 12).timestamp()  # Please input the date value you want to compare.

service = build('drive', 'v3', credentials=creds)
fileList = []
pt = ""
while True:
    res = service.files().list(pageSize=1000, pageToken=pt if pt != "" else "", fields="nextPageToken, files(id, name, properties)").execute()
    files = res.get('files', [])
    filesWithProp = [f for f in files if f.get('properties') and f.get('properties').get('timestamp') and int(f.get('properties').get('timestamp')) > compareValue]
    fileList.extend(filesWithProp)
    pt = res.get('nextPageToken')
    if not pt:
        break
print(fileList)
  • В текущем скрипте можно получить более новые файлы, чем compareValue.
  • При изменении с int(f.get('properties').get('timestamp')) > compareValue на int(f.get('properties').get('timestamp')) < compareValue старые файлы, чем compareValue можно получить.

Примечание:

  • В этом примере скрипта ключ и значение properties равны timestamp, а unix время соответственно. Так что будьте осторожны.
  • Этот пример сценария предполагает, что вы уже смогли получить метаданные файла с помощью Drive API с googleapis для Python.
  • Если файлы вы которые вы хотите получить, помещаются в указанную папку c, вы также можете использовать параметр запроса, например 'folderId' in parents. Таким образом можно снизить стоимость процесса.

Ссылки:

...