Привет!
Наваял код для выкачивания фото из листа Sharepoint, в качестве прослойки использую Access, подключенный к нужному листу, так как в нему уже сразу в таблице есть данные, из которых можно слепить URL до картинки.
Сам код:
import pyodbc
from datetime import datetime
from urllib.parse import quote
import requests
import os
from connection import Sharepoint
py_folder = os.path.dirname(os.path.realpath(__file__))
pep_folder = os.path.dirname(py_folder)
site = Sharepoint(pep_folder)
print("Подключились к Sharepoint")
# Параметры подключения к базе данных MS Access
db_path = "d:/users/80070768/OneDrive - Pepsico/Digital Tools Team/Claims/Claims.accdb"
user = 'login'
password = 'password'
# Параметры временного интервала для фильтрации данных
start_date = datetime(day=6, month=12, year=2023)
end_date = datetime(day=12, month=12, year=2023)
# Строка подключения
conn_str = f"DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={db_path};UID={user};PWD={password}"
# Установка соединения с базой данных
conn = pyodbc.connect(conn_str)
print('Подключились к базе данных')
# Создание объекта курсора
cursor = conn.cursor()
# Выполнение SQL-запроса для выборки данных из таблицы pretensions
sql_query = f"""
SELECT ID, Comment, Photo
FROM pretensions
WHERE Comment LIKE ?
"""
params = (f"%{start_date:%Y-%m-%d}%",)
cursor.execute(sql_query, params)
# Обработка результатов запроса
for row in cursor.fetchall():
claim_id, comment, photo = row
# Проверка условий
try:
comment_date = datetime.strptime(comment.split('_')[0], '%Y-%m-%d')
except ValueError:
continue # Пропустить строку, если не удается извлечь дату из Comment
if start_date <= comment_date <= end_date:
# Извлечение имени файла из текста в столбце Photo
photo_filename = photo.split('"')[3]
# Преобразование имени файла в безопасную для URL строку
url_safe_filename = quote(photo_filename)
# Формирование URL для загрузки изображения
download_url = f"https://pepsico.sharepoint.com/teams/SignalsOSA/Lists/pretensions/Attachments/{claim_id}/{url_safe_filename}"
# Получение содержимого изображения
response = requests.get(download_url)
# Проверка наличия ошибок при запросе
try:
response.raise_for_status()
except requests.exceptions.HTTPError as errh:
print ("HTTP Error:", errh)
except requests.exceptions.ConnectionError as errc:
print ("Error Connecting:", errc)
except requests.exceptions.Timeout as errt:
print ("Timeout Error:", errt)
except requests.exceptions.RequestException as err:
print ("Oops, something went wrong:", err)
# Продолжение только в случае успешного запроса
if response.status_code == 200:
# Определение пути для сохранения изображения
save_path = os.path.join(r'd:/users/80070768/OneDrive - Pepsico/Digital Tools Team/Claims/Attachments_test', f"{comment}.jpg")
# Запись содержимого изображения в файл
with open(save_path, 'wb') as file:
file.write(response.content)
# Закрытие курсора и соединения
cursor.close()
conn.close()
Суть проблемы - при заведомо рабочем подключении к SharePoint через:
from connection import Sharepoint
, а также при условии, что вручную перехожу по сформированной кодом ссылке и картинку вижу и могу скачать, код упорно возвращает ошибку 403 по каждой картине.
Как быть? Что я делаю не так?