Vollirik_M
@Vollirik_M
Данные анализирую, немного питонирую

Почему я получаю Ошибку 403 при наличии авторизации в коде?

Привет!

Наваял код для выкачивания фото из листа 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 по каждой картине.

Как быть? Что я делаю не так?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы