Я считаю, что ваша ситуация и ваша цель следующие.
- В вашей ситуации есть файлы, которые имеют
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'}
. Похоже, это текущая спецификация. К сожалению, на текущем этапе файлы, которые вы хотите получить, не могут быть получены напрямую с помощью поискового запроса.
Итак, в этом ответе я хотел бы предложить обходной путь. Последовательность этого обходного пути выглядит следующим образом.
- Получить все файлы на Google Диске с помощью метода files.list в Drive API.
- Получить файлы с
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
. Таким образом можно снизить стоимость процесса.
Ссылки: