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()