ChezarovIMG

Документация

Здесь описано, как подключить ваш сервис к загрузке изображений на платформу ChezarovIMG и получать готовые ссылки для публикаций и профилей GTA5RP.

Для обращения к API используйте авторизованную сессию пользователя ChezarovIMG. Достаточно выполнить обычный вход и передавать cookie chezarovimg_session и XSRF-TOKEN вместе с заголовком X-CSRF-TOKEN и Accept: application/json в каждом запросе.

Эндпоинт загрузки

Отправьте POST запрос на https://img.davidordyan.online/upload с типом multipart/form-data. Поддерживаются следующие поля:

  • files[] - одно или несколько изображений (обязательное поле).
  • title - заголовок, будет применён ко всем изображениям (необязательно).
  • album_id - ID существующего альбома пользователя.
  • new_album - название нового альбома, создаётся автоматически.
  • auto_delete - время автоудаления (доступно: 0, 5m, 1h, 1d, 1w).
  • is_public - 1 или 0, определяет видимость снимков.

Минимальный пример на curl:

curl -X POST "https://img.davidordyan.online/upload" \
  -H "Accept: application/json" \
  -H "X-CSRF-TOKEN: <ваш_csrf_token>" \
  -b "XSRF-TOKEN=<cookie>; chezarovimg_session=<cookie>" \
  -F "files[]=@/path/to/screenshot.png" \
  -F "title=Вид из окна"

Ответ сервера

Успешная загрузка возвращает JSON с массивом созданных изображений:

{
  "items": [
    {
      "id": 418,
      "user_id": 7,
      "album_id": null,
      "title": "night-city",
      "slug": "xk39p4m2q1vw",
      "path": "uploads/xk39p4m2q1vw.png",
      "mime": "image/png",
      "ext": "png",
      "size_bytes": 482133,
      "width": 1920,
      "height": 1080,
      "delete_at": null,
      "views": 0,
      "is_public": true,
      "ip_address": "127.0.0.1",
      "is_blocked": false,
      "created_at": "2024-03-25T12:13:14.000000Z",
      "updated_at": "2024-03-25T12:13:14.000000Z"
    }
  ]
}
Публичная ссылка формируется как https://img.davidordyan.online/f/<slug>.<ext>. Для embed-форматов можно самостоятельно собрать BBCode и HTML, используя те же ссылки.

Python (requests)

import requests

session = requests.Session()
session.headers.update({"Accept": "application/json"})

# Сюда поместите действительные cookie после авторизации
session.cookies.set("chezarovimg_session", "<session-cookie>")
session.cookies.set("XSRF-TOKEN", "<xsrf-cookie>")

files = {"files[]": ("garage.png", open("garage.png", "rb"), "image/png")}
data = {"title": "GTA5RP Garage", "auto_delete": "0"}
headers = {"X-CSRF-TOKEN": "<ваш_csrf_token>"}

response = session.post("https://img.davidordyan.online/upload", files=files, data=data, headers=headers)
response.raise_for_status()

for item in response.json().get("items", []):
    public_link = f"https://img.davidordyan.online/f/{item['slug']}.{item['ext']}"
    print("Загружено:", public_link)

JavaScript (браузер)

async function uploadScreenshot(file) {
  const csrf = document.querySelector('meta[name="csrf-token"]').content;
  const formData = new FormData();
  formData.append('files[]', file);
  formData.append('title', 'Raid highlight');

  const response = await fetch('https://img.davidordyan.online/upload', {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'X-CSRF-TOKEN': csrf,
    },
    credentials: 'include',
    body: formData,
  });

  if (!response.ok) {
    throw new Error('Upload failed');
  }

  const payload = await response.json();
  return payload.items.map(item => ({
    slug: item.slug,
    url: `https://img.davidordyan.online/f/${item.slug}.${item.ext}`,
  }));
}

Функция ожидает, что пользователь уже авторизован в том же домене (куки и CSRF-токен доступны на странице).

Node.js (axios)

import axios from 'axios';
import FormData from 'form-data';
import fs from 'node:fs';

const form = new FormData();
form.append('files[]', fs.createReadStream('heist.jpg'));
form.append('is_public', '1');

const response = await axios.post('https://img.davidordyan.online/upload', form, {
  headers: {
    ...form.getHeaders(),
    'Accept': 'application/json',
    'X-CSRF-TOKEN': process.env.CSRF_TOKEN,
  },
  withCredentials: true,
  xsrfCookieName: 'XSRF-TOKEN',
  xsrfHeaderName: 'X-CSRF-TOKEN',
});

for (const item of response.data.items) {
  console.log('Direct link:', `https://img.davidordyan.online/f/${item.slug}.${item.ext}`);
}

Перед выполнением запроса сохраните cookies авторизованного аккаунта (например, через tough-cookie) и передайте их в axios.