13 KiB
13 KiB
VH Posting System - Описание системы
Версия: 1.0 Дата: 2026-01-07 Совместимость: PHP 7.2+ Хостинг: reg.ru (shared hosting)
Общее описание
VH Posting System — веб-приложение для работы с изображениями Flickr. Позволяет конвертировать ссылки в различные форматы для публикации на форумах, блогах и социальных сетях, а также напрямую публиковать в Telegram-каналы.
Структура проекта
VH_posting_system/
├── index.php # Главная страница (требует авторизации)
├── login.php # Страница входа
├── setup.php # Первоначальная настройка (создание админа)
├── api.php # API эндпоинты для AJAX-запросов
├── config.php # Конфигурация (API ключи) - НЕ в git
├── config.example.php # Пример конфигурации
├── auth_config.php # Данные пользователей - НЕ в git, создаётся автоматически
├── .htaccess # Настройки Apache
├── .gitignore # Исключения для git
│
├── classes/ # PHP классы
│ ├── Auth.php # Система авторизации
│ ├── FlickrAPI.php # Клиент Flickr API
│ ├── FlickrParser.php # Парсер ссылок Flickr
│ ├── FormatGenerator.php # Генератор форматов вывода
│ └── TelegramBot.php # Клиент Telegram Bot API
│
├── css/
│ └── style.css # Стили интерфейса
│
├── js/
│ └── app.js # Фронтенд логика
│
└── templates/ # (зарезервировано для шаблонов)
Функциональные модули
1. Link Converter (Конвертер ссылок)
Назначение: Преобразование ссылок Flickr в различные форматы.
Поддерживаемые входные форматы:
- Страница фото:
https://www.flickr.com/photos/username/12345678901/ - Короткая ссылка:
https://flic.kr/p/ABC123 - Прямая ссылка:
https://live.staticflickr.com/65535/12345678901_abcdef1234_b.jpg
Форматы вывода:
| Ключ | Название | Шаблон | Применение |
|---|---|---|---|
bbcode |
BBCode | [img]{url}[/img] |
Форумы phpBB, vBulletin, IPB |
bbcode_linked |
BBCode (clickable) | [url={original}][img]{url}[/img][/url] |
Кликабельные превью |
html |
HTML | <img src="{url}" alt="{title}"> |
Веб-сайты |
html_linked |
HTML (clickable) | <a href="{original}"><img...></a> |
Кликабельные изображения |
html_figure |
HTML Figure | <figure>...</figure> |
Семантическая разметка |
markdown |
Markdown |  |
GitHub, Reddit |
markdown_linked |
Markdown (clickable) | []({original}) |
Кликабельные в Markdown |
url_only |
URL only | {url} |
Просто ссылка |
url_list |
URL list (comma) | {url}, {url}... |
Списки через запятую |
Размеры изображений:
| Размер | Суффикс | Размер (px) |
|---|---|---|
| Square | _s |
75×75 |
| LargeSquare | _q |
150×150 |
| Thumbnail | _t |
100 |
| Small | _m |
240 |
| Small320 | _n |
320 |
| Medium | (нет) | 500 |
| Medium640 | _z |
640 |
| Medium800 | _c |
800 |
| Large | _b |
1024 |
| Large1600 | _h |
1600 |
| Large2048 | _k |
2048 |
| Original | _o |
Оригинал |
2. Flickr Gallery (Галерея Flickr)
Назначение: Просмотр и выбор фотографий из аккаунта Flickr.
Возможности:
- Просмотр всех фотографий пользователя
- Просмотр по альбомам (photosets)
- Поиск по названию/описанию
- Множественный выбор галочками
- Пагинация (50 фото на страницу)
- Превью в виде сетки
Требует: Flickr API Key + User ID
3. Telegram Post (Публикация в Telegram)
Назначение: Отправка фотографий и текста в Telegram-каналы.
Возможности:
- Отправка одной фотографии с подписью
- Отправка альбома (2-10 фото)
- Автоматическое разбиение больших альбомов (>10 фото)
- Выбор формата текста (HTML, Markdown, plain)
- Публикация в несколько каналов
Ограничения Telegram:
- Максимум 10 фото в одном альбоме
- Подпись только у первого фото в альбоме
- Бот должен быть администратором канала
4. Settings (Настройки)
Возможности:
- Проверка статуса подключения к Flickr API
- Проверка статуса Telegram бота
- Управление списком каналов
- Смена пароля пользователя
Классы PHP
Auth.php — Система авторизации
class Auth {
// Создание пользователя
createUser($username, $password): bool
// Смена пароля
changePassword($username, $oldPassword, $newPassword): bool
// Вход в систему
login($username, $password, $ip): array
// Запуск сессии
startSession($username, $token): void
// Проверка авторизации
isAuthenticated($timeout = 3600): bool
// Выход
logout(): void
// Текущий пользователь
getCurrentUser(): ?string
// Есть ли пользователи
hasUsers(): bool
// IP клиента
static getClientIP(): string
}
Безопасность:
- Хеширование: Argon2ID (fallback на bcrypt)
- Защита от брутфорса: 5 попыток, блокировка 15 минут
- Таймаут сессии: 1 час
- Регенерация session ID при входе
FlickrAPI.php — Клиент Flickr API
class FlickrAPI {
__construct($apiKey, $apiSecret, $userId = '')
// Установить User ID
setUserId($userId): void
// Получить фотографии пользователя
getPhotos($page = 1, $perPage = 50): array
// Получить альбомы
getPhotosets($page = 1, $perPage = 50): array
// Фотографии из альбома
getPhotosetPhotos($photosetId, $page, $perPage): array
// Информация о фото
getPhotoInfo($photoId): array
// Доступные размеры фото
getPhotoSizes($photoId): array
// Поиск фотографий
searchPhotos($query, $page, $perPage): array
// Найти User ID по имени
findUserByUsername($username): string
}
FlickrParser.php — Парсер ссылок
class FlickrParser {
// Парсинг одной ссылки
parse($url): ?array
// Парсинг нескольких ссылок
parseMultiple($input): array
// Построение URL изображения
buildImageUrl($photoInfo, $size = 'Large'): string
// Доступные размеры
getAvailableSizes(): array
}
FormatGenerator.php — Генератор форматов
class FormatGenerator {
// Добавить кастомный формат
addFormat($key, $name, $template, $separator, $description): void
// Получить все форматы
getFormats(): array
// Сгенерировать для одного изображения
generate($formatKey, $imageData): string
// Сгенерировать для нескольких
generateMultiple($formatKey, $images): string
// Сгенерировать все форматы сразу
generateAll($images): array
}
Плейсхолдеры в шаблонах:
{url}— URL изображения выбранного размера{original}— URL оригинала{title}— Название фото{description}— Описание{photo_id}— ID фото{width},{height}— Размеры
TelegramBot.php — Клиент Telegram
class TelegramBot {
__construct($botToken)
// Отправить текст
sendMessage($chatId, $text, $parseMode, $disablePreview): array
// Отправить фото
sendPhoto($chatId, $photo, $caption, $parseMode): array
// Отправить альбом
sendMediaGroup($chatId, $photos, $caption, $parseMode): array
// Умная публикация (авто-выбор метода)
post($chatId, $photos, $text, $parseMode): array
// Публикация в несколько каналов
postToMultiple($chatIds, $photos, $text, $parseMode): array
// Информация о боте
getMe(): array
// Информация о чате
getChat($chatId): array
// Проверка доступа к каналу
validateChannel($chatId): array
// Экранирование HTML
static escapeHtml($text): string
// Экранирование Markdown
static escapeMarkdown($text): string
}
API Endpoints (api.php)
| Action | Method | Параметры | Описание |
|---|---|---|---|
convert |
POST | urls, size, format | Конвертация ссылок |
flickr_albums |
GET | — | Список альбомов |
flickr_photos |
GET | page, per_page, album_id, search | Список фото |
flickr_photo_sizes |
GET | photo_id | Размеры фото |
telegram_status |
GET | — | Статус бота |
telegram_channels |
GET | — | Список каналов |
telegram_post |
POST | channel_id, text, photos, parse_mode | Публикация |
change_password |
POST | current_password, new_password | Смена пароля |
Конфигурация (config.php)
return [
'flickr' => [
'api_key' => '', // API ключ Flickr
'api_secret' => '', // API секрет
],
'flickr_user_id' => '', // ID пользователя (12345678@N00)
'telegram' => [
'bot_token' => '', // Токен бота от @BotFather
'channels' => [ // Список каналов
['id' => '@channel', 'name' => 'Название'],
],
],
'default_size' => 'Large',
'custom_formats' => [ // Кастомные форматы
// 'key' => ['name' => '', 'template' => ''],
],
];
Безопасность
Защита файлов (.htaccess)
- Запрет листинга директорий
- Блокировка доступа к config.php, auth_config.php
- Блокировка прямого доступа к /classes/
Защита авторизации
- Argon2ID/bcrypt хеширование
- Rate limiting (5 попыток / 15 минут блокировки)
- Session timeout (1 час)
- CSRF токены на формах
- Регенерация session ID
Входные данные
- htmlspecialchars() для вывода
- Валидация URL при парсинге
- JSON-encode для API ответов
Требования
Сервер
- PHP 7.2+ (рекомендуется 7.4+)
- Расширения: curl, json, bcmath (для base58)
- Apache с mod_rewrite
API ключи
- Flickr: https://www.flickr.com/services/apps/create/
- Telegram: @BotFather → /newbot
Установка
- Загрузить файлы на хостинг
- Скопировать
config.example.php→config.php - Заполнить API ключи в config.php
- Открыть сайт → setup.php → создать админа
- Войти через login.php
Планируемые функции
- Drag & drop загрузка изображений
- История конвертаций
- Избранные форматы
- Темная тема
- Экспорт/импорт настроек
- Поддержка других фотохостингов (Imgur, etc.)
Changelog
v1.0 (2026-01-07)
- Начальная реализация
- Конвертер ссылок Flickr
- Интеграция с Flickr API
- Интеграция с Telegram Bot API
- Система авторизации
- Адаптация под PHP 7.2 (reg.ru)