artryazanov / laravel-steam-apps-db
Laravel package for Steam apps database functionality
Installs: 65
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/artryazanov/laravel-steam-apps-db
Requires
- php: ^8.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.24
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0
README
A Laravel package for managing Steam application data in your database. This package provides functionality to import Steam apps, fetch detailed information, and retrieve news for Steam games.
Introduction
Laravel Steam Apps DB provides a set of tools to work with Steam application data in your Laravel application. It allows you to:
- Import basic information about all Steam applications
- Fetch detailed information about specific Steam games
- Retrieve and store news articles for Steam games
- Access Steam app data through Eloquent models
The package handles all the database schema creation and provides a console command to import apps and queued jobs to fetch details and news from the Steam API.
Installation
Requirements
- PHP 8.0 or higher
- Laravel 10.x, 11.x, or 12.x
Installation Steps
- Install the package via Composer:
composer require artryazanov/laravel-steam-apps-db
-
The package will automatically register its service provider if you're using Laravel's package auto-discovery.
-
Publish and run the migrations:
php artisan migrate
Usage
Console Commands
The package provides one main console command:
Import Steam Apps
This command imports basic information about all Steam applications from the Steam API.
php artisan steam:import-apps
This will fetch a list of all Steam applications and store them in the steam_apps table.
After saving each app, this command dispatches queued jobs to fetch the app's details and news asynchronously via Laravel's queue.
Configuration
laravel-steam-apps-db.enable_news_scanning: Controls whether the package dispatches jobs to fetch Steam news. Default isfalse(disabled). Set via envLSADB_ENABLE_NEWS_SCANNING=trueor publish and edit the config.laravel-steam-apps-db.queue: Queue name for dispatched jobs (e.g.,high,default,low). Default isdefault. Set via envLSADB_QUEUE=defaultor publish and edit the config.laravel-steam-apps-db.decay_seconds: Global rate limit interval (in seconds) enforced via Redis throttle for FetchSteamApp* jobs. When > 0, jobs across all workers will run at most once per interval; when 0 or less, throttling is disabled. Default is1. Set via envLARAVEL_STEAM_APPS_DB_DECAY_SECONDS=1.
Note: Throttling requires Redis to be configured in your application (used by Laravel's Redis::throttle). If you don't use Redis, set decay_seconds to 0 to disable throttling.
Publish the config if needed:
php artisan vendor:publish --tag=laravel-steam-apps-db-config
Queue and Jobs
Starting from the current version, fetching details and news is performed by queued jobs that are dispatched per app during import:
Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppDetailsJobArtryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppNewsJob
Additional notes:
- Details job is always dispatched for every app during import.
- News job is dispatched only when
laravel-steam-apps-db.enable_news_scanningis enabled (disabled by default). - Jobs are unique per appid and implement Laravel's ShouldBeUnique, so duplicate jobs for the same appid won't be queued.
- API call pacing is handled via a global Redis throttle controlled by
laravel-steam-apps-db.decay_seconds. When enabled, only one FetchSteamApp job is allowed to run per interval across all workers; excess jobs are released back to the queue to retry shortly.
To process the jobs, make sure you run a queue worker in your application environment:
php artisan queue:work
You can configure the queue connection (sync, database, redis, etc.) via your .env and config/queue.php. For production, use a supervisor or a process manager to keep the worker running.
Manual dispatch examples (optional):
use Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppDetailsJob; use Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppNewsJob; // Dispatch jobs for a specific appid (e.g., 570 - DOTA 2) FetchSteamAppDetailsJob::dispatch(570); // Note: News scanning is optional. Ensure it's enabled in config // or dispatch the job explicitly as needed. FetchSteamAppNewsJob::dispatch(570);
Note: Previous console commands steam:fetch-app-details and steam:fetch-app-news have been replaced by the queued jobs and are no longer required.
Models
The package provides several Eloquent models to interact with the stored data:
Main Models
- SteamApp: The core model representing a Steam application
- SteamAppDetail: Detailed information about a Steam app
- SteamAppNews: News articles for a Steam app
Related Models
- SteamAppCategory: Categories for Steam apps
- SteamAppGenre: Genres for Steam apps
- SteamAppDeveloper: Developers of Steam apps
- SteamAppPublisher: Publishers of Steam apps
- SteamAppRequirement: System requirements for different platforms
- SteamAppScreenshot: Screenshots for Steam apps
- SteamAppMovie: Videos/trailers for Steam apps
- SteamAppPriceInfo: Price information for Steam apps
- SteamAppDlc: DLC appids linked to a base app
- SteamAppDemo: Demos (appid + description)
- SteamAppPackage: Store package ids
- SteamAppPackageGroup: Package groups with display metadata
- SteamAppPackageGroupSub: Individual package options inside groups
- SteamAppAchievementHighlighted: Highlighted achievements
- SteamAppContentDescriptorId: Content descriptor ids (e.g. violence)
- SteamAppRating: Ratings from boards (ESRB, PEGI, etc.)
Example Usage
use Artryazanov\LaravelSteamAppsDb\Models\SteamApp; // Get all Steam apps $apps = SteamApp::all(); // Get a specific app by Steam appid $app = SteamApp::where('appid', 570)->first(); // DOTA 2 // Get detailed information $details = $app->detail; // Get system requirements $requirements = $app->requirements; // Get screenshots $screenshots = $app->screenshots; // Get categories $categories = $app->categories; // Get genres $genres = $app->genres; // Get developers $developers = $app->developers; // Get publishers $publishers = $app->publishers; // Get price information $priceInfo = $app->priceInfo; // Get news articles $news = $app->news;
Database Schema
The package creates the following tables:
steam_apps- Main table with basic app infosteam_app_details- Detailed information about each appsteam_app_requirements- System requirements for different platformssteam_app_screenshots- Screenshots for each appsteam_app_movies- Videos/trailers for each appsteam_app_categories- Categories reference tablesteam_app_category- Pivot table for app-category relationshipsteam_app_genres- Genres reference tablesteam_app_genre- Pivot table for app-genre relationshipsteam_app_developers- Developers reference tablesteam_app_developer- Pivot table for app-developer relationshipsteam_app_publishers- Publishers reference tablesteam_app_publisher- Pivot table for app-publisher relationshipsteam_app_price_info- Price information for each appsteam_app_news- News items for each appsteam_app_dlcs- DLC appids for each appsteam_app_demos- Demos for each appsteam_app_packages- Package ids for each appsteam_app_package_groups- Package groups per appsteam_app_package_group_subs- Group options (subs)steam_app_achievements_highlighted- Highlighted achievementssteam_app_content_descriptor_ids- Content descriptor idssteam_app_ratings- Ratings by boards
Testing
The package includes tests for all its functionality. To run the tests, you can use either of the following methods:
# Using Composer script composer test
# Using PHPUnit directly
vendor/bin/phpunit
License
This package is open-sourced software licensed under the Unlicense.