import hashlib
import requests
# Конфигурация
ACCESS_TOKEN = 'OAuth токен из приложения'
GROUP_ID = 'ID группы, куда загружается фото'
PHOTO_PATH = 'Путь к фотографии.jpg'
APPLICATION_KEY = 'Ключ приложения"
SECRET_KEY = 'Секретный ключ приложения'
# Базовый URL API Одноклассников
BASE_URL = 'https://api.ok.ru/fb.do'
# Генерация сигнатуры
def generate_signature(params, secret_key):
    sorted_params = ''.join([f'{k}={params[k]}' for k in sorted(params)])
    signature = hashlib.md5((sorted_params + secret_key).encode('utf-8')).hexdigest()
    return signature
# Получение URL для загрузки фотографии
def get_upload_url():
    method = 'photosV2.getUploadUrl'
    params = {
        'application_key': APPLICATION_KEY,
        'format': 'json',
        'gid': GROUP_ID,
        'method': method,
        'access_token': ACCESS_TOKEN
    }
    params['sig'] = generate_signature(params, SECRET_KEY)
    response = requests.get(BASE_URL, params=params)
    data = response.json()
    if 'upload_url' in data:
        return data['upload_url']
    else:
        raise Exception(f"Ошибка при получении upload_url: {data}")
# Загрузка фотографии на сервер
def upload_photo(upload_url):
    with open(PHOTO_PATH, 'rb') as photo_file:
        files = {'file': photo_file}
        response = requests.post(upload_url, files=files)
        return response.json()
# Подтверждение загрузки фотографии
def confirm_photo(photo_id):
    method = 'photosV2.commit'
    params = {
        'application_key': APPLICATION_KEY,
        'format': 'json',
        'gid': GROUP_ID,
        'photo_id': photo_id,
        'method': method,
        'access_token': ACCESS_TOKEN
    }
    params['sig'] = generate_signature(params, SECRET_KEY)
    response = requests.get(BASE_URL, params=params)
    return response.json()
# Основная функция
def main():
    try:
        # Шаг 1: Получение URL для загрузки
        upload_url = get_upload_url()
        print("Upload URL получен:", upload_url)
        # Шаг 2: Загрузка фотографии
        upload_response = upload_photo(upload_url)
        print("Ответ после загрузки:", upload_response)
        if 'photos' in upload_response and isinstance(upload_response['photos'], dict):
            photo_key = next(iter(upload_response['photos']))
            if photo_key and 'token' in upload_response['photos'][photo_key]:
                photo_id = upload_response['photos'][photo_key]['token']
                print(f"Извлеченный token: {photo_id}")
                # Шаг 3: Подтверждение загрузки
                confirm_response = confirm_photo(photo_id)
                print("Фотография успешно загружена:", confirm_response)
            else:
                print("Токен не найден в ответе.")
        else:
            print("Не удалось загрузить фотографию.")
    except Exception as e:
        print("Произошла ошибка:", str(e))
if __name__ == '__main__':
    main()