Форум сайта python.su
Здравствуйте, уважаемые форумчане!
Пытаюсь писать скрипт автоматической загрузки файлов на Dropbox (адаптирую другой скрипт под этот ресурс). Столкнулся с проблемой, которую не могу решить без помощи знающих людей.
Токен доступа для моего скрипта “живет” меньше суток… Как решить эту проблему? Если можно, пожалуйста, объясните поподробнее. Заранее спасибо!
Офлайн
Другой скрипт это сценарий для Селениум. Разумно ли его адаптировать для автоматической загрузки файлов на Dropbox? У Dropbox кажется есть вменяемый API для автоматизации, и загрузку файлов можно автоматизировать без браузера
Про время жизни токена, вот эту страницу видели?
Офлайн
FishHookПрошу прощения. Не то. Я писал скрипт для загрузки на Яндекс-диск. Там такой проблемы не было.
Другой скрипт это сценарий для Селениум. Разумно ли его адаптировать для автоматической загрузки файлов на Dropbox? У Dropbox кажется есть вменяемый API для автоматизации, и загрузку файлов можно автоматизировать без браузераПро время жизни токена, вот эту страницу видели?
Офлайн
FishHookСпасибо! Это то что нужно!
Другой скрипт это сценарий для Селениум. Разумно ли его адаптировать для автоматической загрузки файлов на Dropbox? У Dropbox кажется есть вменяемый API для автоматизации, и загрузку файлов можно автоматизировать без браузераПро время жизни токена, вот эту страницу видели?
Офлайн
Как можно получить ссылку для уже созданной общедоступной папки (DxFold)?
dbx.get_shared_link_metadata() и get_shared_link_file()
Traceback (most recent call last): File "/home/vas/UploadDx/DxRMS.py", line 78, in <module> sharedlink = dbx.get_shared_link_metadata(DxFold) AttributeError: 'Dropbox' object has no attribute 'get_shared_link_metadata'
Отредактировано VasiliyS (Дек. 30, 2021 12:55:37)
Офлайн
Вот мой быдлокод для загрузки файлов:
#!/usr/bin/python3 import dropbox from datetime import datetime import os import subprocess import shutil import glob import logging #Get name of temporal folder - year Year = datetime.strftime(datetime.now(), "%Y") #Adjustment script #================================================= #Get token: TOKEN = "000000000" #User USER = str(subprocess.check_output(['whoami']))[2:-3] #Path of temporal folder csvFold="/home/" + USER + "/RMS_data/UFOOrbit_files_" + Year #Create csvFold (True or False)? flag=False #Folder for log-files: Logfiles="/home/" + USER + "/RMS_data/Dropbox_logs" #Folder with files for upload targetPattern = "/home/" + USER + "/RMS_data/ArchivedFiles/*/*_" + Year + "*.csv" #Format of uploaded files form = '.csv' #Get name of Dropbox folder DxFold = '/' + Year #================================================= #Path for temporal Folder temp_fold = csvFold + '/temp' #Logging: https://python-scripts.com/logging-python #Create log's folder if os.path.exists(Logfiles): print("Log folder for Dx exist") else: print("Create Dx log folder") os.mkdir(Logfiles) #Get name for log folder logname = datetime.strftime(datetime.now(), "%Y.%m.%d.-%H.%M.%S") + '_YD_upload.log' print("Log file: " + logname + " created") #Config logger logging.basicConfig(level=logging.INFO, filename=os.path.join(Logfiles, logname), format='%(asctime)s %(levelname)s:%(message)s') #Create folder csvFold if os.path.exists(csvFold): logging.info("Folder UFOOrbit exist") print("Folder UFOOrbit exist") else: os.mkdir(csvFold) #Copy csv-files to csvFold: https://coderoad.ru/296173/ files = glob.iglob(os.path.join(targetPattern)) for file in files: if os.path.isfile(file): shutil.copy2(file, csvFold) #Check exist temporal folder if os.path.exists(temp_fold): shutil.rmtree(temp_fold) #Connect to Dropbox dbx = dropbox.Dropbox(TOKEN) #Check and refresh TOKEN dbx.check_and_refresh_access_token() #Create Dropbox-disk folder #Check folder flag1 = False # List file items in folder for entry in dbx.files_list_folder('').entries: if (entry.path_display == DxFold): flag1 = True print('Folder Dx exist!') logging.info('Folder Dx exist!') ''' #https://practicaldatascience.co.uk/data-science/how-to-use-the-dropbox-api-with-python sharedlink = dbx.sharing_get_shared_links(DxFold).links[0].url print('URL:\n', sharedlink) logging.info('URL:') logging.info(sharedlink) ''' #Create folder if (flag1 == False): print('Create Dx folder!') logging.info('Create Dx folder!') dbx.files_create_folder(DxFold) ''' #Share cloud folder shared_link_metadata = dbx.sharing_create_shared_link(DxFold).url print('URL:\n', shared_link_metadata) logging.info('URL:') logging.info(shared_link_metadata) ''' #Sorting files #=============================================================================================== #Types of files Files_on_PC = [] UploadedFiles = [] #Get list of files on PC for i in os.walk(csvFold): Files_on_PC.append(i) Files_on_PC = i[2] #Get list of files on cloud for entry in dbx.files_list_folder(DxFold).entries: UploadedFiles.append(entry.name) #Get list of files for upload Files_for_upload = list(set(Files_on_PC) - set(UploadedFiles)) print('\n====================================================================================') print('\nOn PC:', *Files_on_PC, sep = '\n') print('\nOn Cloud:', *UploadedFiles, sep = '\n') print('\nDifference:', *Files_for_upload, sep = '\n') print('====================================================================================\n') #Create temporal folder os.mkdir(temp_fold) #Move files for upload to temporal folder for file in Files_for_upload: shutil.copy2(csvFold + '/' + file, temp_fold) #=============================================================================================== logging.info("Upload files...") print("Upload files...") #Upload a small file (150 MB or less) for path_ in glob.glob(os.path.join(temp_fold, '*'+ form)): with open(path_, 'rb') as file: #Get filename filename = os.path.splitext(os.path.basename(path_))[0] print(filename + form) logging.info(filename + form) #Upload files dbx.files_upload(file.read(), DxFold + '/' + filename + form) print('Upload sucsessfull!') logging.info('Upload sucsessfull!') #Delete csvFold? if flag: logging.info("Folder UFOOrbit_files created") print("Folder UFOOrbit_files created") shutil.rmtree(temp_fold) else: logging.info("Remove temporal folders") print("Remove temporal folders") shutil.rmtree(csvFold) logging.info("Done!") print("Done!")
Traceback (most recent call last):
File "/home/pi/UploadDx/DxRMS.py", line 85, in <module>
sharedlink = dbx.sharing_get_shared_links(DxFold).links[0].url
File "/home/pi/.local/lib/python3.4/site-packages/dropbox/base.py", line 4350, in sharing_get_shared_links
None,
File "/home/pi/.local/lib/python3.4/site-packages/dropbox/dropbox_client.py", line 345, in request
returned_data_type, obj, strict=False)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 978, in json_compat_obj_decode
data_type, obj)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 558, in json_compat_obj_decode_helper
return self.decode_struct(data_type, obj)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 607, in decode_struct
self.decode_struct_fields(ins, all_fields, obj)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 626, in decode_struct_fields
v = self.json_compat_obj_decode_helper(field_data_type, obj[name])
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 566, in json_compat_obj_decode_helper
data_type, obj)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 844, in decode_list
for item in obj]
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 844, in <listcomp>
for item in obj]
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 556, in json_compat_obj_decode_helper
return self.decode_struct_tree(data_type, obj)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 797, in decode_struct_tree
return self.decode_struct(subtype, obj)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 607, in decode_struct
self.decode_struct_fields(ins, all_fields, obj)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 626, in decode_struct_fields
v = self.json_compat_obj_decode_helper(field_data_type, obj[name])
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 563, in json_compat_obj_decode_helper
return self.decode_union(data_type, obj)
File "/home/pi/.local/lib/python3.4/site-packages/stone/backends/python_rsrc/stone_serializers.py", line 662, in decode_union
return data_type.definition(six.ensure_str(tag), val)
AttributeError: 'module' object has no attribute 'ensure_str'
dbx.sharing_create_shared_link()
Офлайн
VasiliySСоздай абсолютно новый файл на питоне. Дальше в него занеси код входа на Dropbox. Если работает вход (как на версии питона 3.8, так и на версии питона 3.4), то добавь в него код закачивания одного файла на Dropbox после входа на Dropbox. Если работает вход и закачивание одного файла (как на версии питона 3.8, так и на версии питона 3.4), то скопируй содержимое этого скрипта в новый файл на питоне и потом добавь в этот новый файл на питоне некоторые куски своего исходного скрипта. Постепенно добавляй что-то, потом сразу проверяй, работает ли оно. Когда убедился, что работает, продолжай добавлять понемногу.
Как это устранить на текущей версии питона?
Отредактировано py.user.next (Янв. 2, 2022 02:45:27)
Офлайн
Я написал какая функция не работает.
dbx.sharing_create_shared_link()
dbx.sharing_get_shared_links()
Почему данная функция не работает на RaspberryPi.
Отредактировано VasiliyS (Янв. 3, 2022 21:30:23)
Офлайн
VasiliySДа там может быть 100500 причин и все они проистекают из твоей тупости. Так что чтобы время не тратить просто впустую на выяснение всех обстоятельств и закутков твоей тупизны, я тебе сказал, что нужно делать, чтобы достичь результа. Тебе же нужно не про RaspberryPi что-то узнать, а чтобы всё выкладывалось на Dropbox.
Я задал вопрос. Почему данная функция не работает на RaspberryPi.
VasiliySТебя тоже с праздником! Надеюсь, мой маленький подарок повысит тебе настроение.
Всех с праздником!
Отредактировано py.user.next (Янв. 3, 2022 02:23:29)
Офлайн
Мда. Кое-кому стоит научиться читать внимательнее.
Во-первых. Тема называется Dropbox API TOKEN.
Во-вторых, в третьем сообщении я написал что ошибся ссылкой. Это совсем другое задание.
В-третьих, в моем коде, приводимом выше, во второй строке:
import dropbox
#!/usr/bin/python3 import dropbox TOKEN = "000000000000000000000000000000000000000000000000000000000000000" #Connect to Dropbox dbx = dropbox.Dropbox(TOKEN) DxFold = '/2021' shared_link_metadata = dbx.sharing_create_shared_link(DxFold) sharedlink = dbx.sharing_get_shared_links(DxFold) print('URL:\n', sharedlink)
Отредактировано VasiliyS (Янв. 3, 2022 15:54:59)
Офлайн