VideoMiner is a project to extract, process, and centralize information from YouTube and Vimeo channels and videos. It is based on a microservices architecture that queries the official APIs, transforms the data, and exposes it through a REST API.
- Features
- Architecture
- Requirements
- Configuration
- Getting Started
- API Documentation
- Usage Examples
- Technologies
- Notes and Best Practices
- Roadmap
- License
- Channel data extraction: description, creation date, and video listing.
- Video details: title, description, publication date, comments, and subtitles (when available).
- Centralized storage: persistence in an H2 database and query/management through a REST API.
- Modular architecture: independent services for YouTube and Vimeo that publish data to the main service.
The system consists of three services:
-
VideoMiner-main
Core service. It exposes the REST API to manage and query channels, videos, comments, and subtitles stored in the H2 database. -
YoutubeMiner-main
Microservice that consumes the YouTube Data API. It locates channels, retrieves their videos, and extracts comments and subtitles, then sends them to VideoMiner. -
VimeoMiner-main
Microservice that consumes the Vimeo API. It performs equivalent functions for the Vimeo platform.
Workflow: YoutubeMiner / VimeoMiner retrieve data from the platforms and publish it to VideoMiner, where it is stored and made available for querying.
- JDK 17 or higher
- Apache Maven
- An IDE (IntelliJ IDEA, Eclipse, VS Code) or terminal
Each microservice may require environment variables or properties for API credentials and network settings. Common examples:
- YoutubeMiner-main
YOUTUBE_API_KEY: YouTube Data API v3 key.
- VimeoMiner-main
VIMEO_ACCESS_TOKEN: Vimeo OAuth access token.
- VideoMiner-main
- H2 database settings and CORS configuration if it will be consumed from a frontend.
Values can be configured in:
application.yml/application.properties- System environment variables
-Dparameters when starting Maven/Spring Boot
Clone the repository and go to the folder:
git clone https://github.com/tu_usuario/VideoMiner.git
cd VideoMinerRun each service in a separate terminal:
VideoMiner-main (port 8080):
cd VideoMiner-main
mvn spring-boot:runVimeoMiner-main (port 8081):
cd VideoMiner-main/VimeoMiner-main
mvn spring-boot:runYoutubeMiner-main (port 8082):
cd VideoMiner-main/YoutubeMiner-main
mvn spring-boot:runOnce running:
http://localhost:8080→ VideoMinerhttp://localhost:8081→ VimeoMinerhttp://localhost:8082→ YoutubeMiner
OpenAPI/Swagger documentation is available at:
- VideoMiner API:
http://localhost:8080/swagger-ui.html - VimeoMiner API:
http://localhost:8081/swagger-ui.html - YoutubeMiner API:
http://localhost:8082/swagger-ui.html
Make a POST request to the YouTube microservice so it can retrieve the data and publish it to VideoMiner:
curl -X POST http://localhost:8082/api/youtube/v3/channels/{channelId}curl -X GET http://localhost:8080/videominer/channels- Java 17
- Spring Boot 3
- Spring Data JPA + Hibernate
- H2 Database (in-memory)
- SpringDoc / Swagger UI for API documentation
- Maven for dependency management and build automation