An open API service indexing awesome lists of open source software.

https://github.com/Pat0sya/Thumbnail_downloader

This the app that let you download YouTube's thumbnail
https://github.com/Pat0sya/Thumbnail_downloader

grpc grpc-go http protobuf redis youtube-thumbnail-downloader

Last synced: 9 months ago
JSON representation

This the app that let you download YouTube's thumbnail

Awesome Lists containing this project

README

          

YouTube Thumbnail gRPC Proxy Service
---

Этот проект предоставляет прокси-сервис gRPC для загрузки превью видео YouTube с поддержкой кэширования. По первому запросу он получает превью с YouTube и сохраняет ее в Redis. При повторных запросах одного и того же видео он отображает кэшированную превью, сокращая время отклика и сокращая количество повторных загрузок.

Включен CLI интрумент, позволяющий пользователям получать превью, предоставляя идентификаторы видео YouTube.

## Table of Contents
- [Функции](#функции)
- [Требования](#требования)
- [Установка](#установка)
- [Использование](#использование)
- [Конфигурация](#конфигурация)

---

## Функции

- **gRPC Прокси Сервис**: Скачивает видео с Youtube через систему gRPC.
- **Кэширование**: Кэширование в Redis для повторного использования.
- **CLI Клиент**: CLI инструмент для загрузки превью по идентификатору видео с поддержкой асинхронной загрузки.

## Требования

- **Go** 1.18 или выше
- **Redis** сервер (хост по умолчанию: `localhost:6379`)

## Установка

1. **Склонируйте репозиторий**:
```bash
git clone https://github.com/Pat0sya/Golang-Proxy-Youtube.git
cd Golang-Proxy-Server
```
2. **Установите зависимости**:
```bash
go mod tidy
```

3. **Set up Redis**:
Удостоверьтесь что Redis установлен и работает на хосте `localhost:6379`. Этот проект использует Redis в качестве временного хранилищa.

## Использование

### Запуск сервера

Запустите gRPC сервер для обработки запросов:

```bash
go run src/server/main.go
```

Сервер начнет ждать запросов от клиента на хосте `localhost:50051`.

### Использование клиента

CLI инструмент позволит пользователям запрашивать скачивание превью по их ID.

#### Синтаксис

```bash
go run src/client/main.go [--output-dir=] [--async] ...
```

- **``**: Одно или больше ID видео, которые будут скачены.
- **`--output-dir`**: _(Опционально)_ Указание директории, куда будут скачены превью видео.
- **`--async`**: _(Опционально)_ Флаг для скачивания видео асинхронно.

#### Примеры

1. **Скачивание одного превью**:
```bash
go run src/client/main.go --output-dir=thumbnails dQw4w9WgXcQ
```

2. **Скачивание нескольких превью асинхронно**:
```bash
go run src/client/main.go --output-dir=thumbnails --async dQw4w9WgXcQ RDFxPcwn1Z5uw
```

#### Поведение кэша

Если запрошенное превью уже существует в кеше Redis, клиент получит ее из Redis вместо того, чтобы загружать ее снова, что снижает нагрузку на сервер и повышает скорость.
### Остановка сервера

Чтобы остановить сервер, используйте `Ctrl+C` в терминале, где работает сервер.
## Конфигурация

По умолчанию сервис работает на хостах:
- **Redis**: `localhost:6379`
- **gRPC Server**: `localhost:50051`

Для модификации, можете изменить `internal/client/client.go` или `src/server/main.go`.

---

## Развертка с помощью Docker - WIP

Этот проект легко развернуть с помощью Docker. Используя Docker Compose, вы можете быстро настроить сервер gRPC вместе с экземпляром Redis для кэширования. Чтобы начать, выполните следующие действия.

### Требования

- **Docker** и **Docker Compose** установлены на вашей локальной машине.

### Шаги развертки

1. **Склонируйте репозиторий**:

```bash
git clone https://github.com/Pat0sya/Golang-Proxy-Youtube.git
cd Golang-Proxy-Server
```

2. **Старт сервиса**:

Запустите следующую команду в корневом каталоге проекта, чтобы собрать и запустить сервис:

```bash
docker-compose up --build
```

- Эта команда создает образ Docker для сервера gRPC и настраивает контейнер Redis.
- Сервер gRPC будет прослушивать локальный хост: `50051`, а Redis будет доступен на локальном хосте: `6379`.

3. **Остановка сервиса**:

Для остановки контейнера, используйте:

```bash
docker-compose down
```