PHP code example of einar-hansen / php-football-data
1. Go to this page and download the library: Download einar-hansen/php-football-data library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
$service = new FootballDataService(
collectionFactory: new \EinarHansen\Http\Collection\LazyCollectionFactory()
);
$psr6Cache = new \Symfony\Component\Cache\Adapter\FilesystemAdapter();
$psr16Cache = new \Symfony\Component\Cache\Psr16Cache($psr6Cache);
// Or in Laravel, using redis
$psr16Cache = \Illuminate\Support\Facades\Cache::store('redis');
$service = new FootballDataService(
client: new \GuzzleHttp\Client(),
rateLimiterState: new \EinarHansen\Http\RateLimit\Psr16RateLimitState(
cacheKey: 'football-data', // The key you want to use, any string will do
cache: $psr16Cache, // An instance of PSR-16 cache
maxAttempts: 10, // 10 calls/minute
decaySeconds: 60,
)
);
use EinarHansen\FootballData\FootballDataService;
$service = new FootballDataService(apiToken: '::api-token::');
// 👆 Use the $service initialized above
use EinarHansen\FootballData\Data\Area;
use EinarHansen\FootballData\Data\Competition;
use EinarHansen\FootballData\Resources\AreaResource;
$resource = $service->areas(): AreaResource
$collection = $service->areas()->all(): iterable<int, Area>|false;
$area = $service->areas()->find(int $areaId): ?Area|false;
// You can also use the area resource to search for it's competitions
$competitions = $resource->competitions(Area|int $areaId): iterable<int, Competition>|false;
// 👆 Use the $service initialized above
use DateTimeInterface;
use EinarHansen\FootballData\Data\Competition;
use EinarHansen\FootballData\Data\FootballMatch;
use EinarHansen\FootballData\Data\Person;
use EinarHansen\FootballData\Data\PersonGoalScore;
use EinarHansen\FootballData\Data\Standing;
use EinarHansen\FootballData\Data\Team;
use EinarHansen\FootballData\Enums\Stage;
use EinarHansen\FootballData\Enums\Status;
use EinarHansen\FootballData\Resources\CompetitionResource;
$resource = $service->competitions(): CompetitionResource;
$collection = $resource->all(int|array $areaIds = null): iterable<int, Competition>|false;
$competition = $resource->find(int $competitionId): ?Competition|false;
// You can also use the competition resource to search for it's matches
$matches = $resource->competitions()->matches(
Competition|int $competitionId,
string|DateTimeInterface $dateFrom = null,
string|DateTimeInterface $dateTo = null,
Status $status = null,
Stage $stage = null,
int $matchday = null,
string $group = null,
int $season = null
): iterable<int, FootballMatch>|false;
// Or the current standings
$standings = $resource->competitions()->standings(
Competition|int $competitionId,
int $season = null,
int $matchday = null,
string|DateTimeInterface $date = null
): iterable<int, Standing>|false;
// Or the teams
$teams = $resource->competitions()->teams(
Competition|int $competitionId,
int $season = null,
): iterable<int, Team>|false;
// Or the topScorers
$topScorers = $resource->competitions()->topScorers(
Competition|int $competitionId,
int $season = null,
int $limit = null,
): iterable<int, PersonGoalScore>|false;
// 👆 Use the $service initialized above
use DateTimeInterface;
use EinarHansen\FootballData\Data\FootballMatch;
use EinarHansen\FootballData\Enums\Status;
use EinarHansen\FootballData\Resources\MatchResource;
$resource = $service->matches(): MatchResource
$collection = $resource->all(
array|int $matchIds = null,
string|DateTimeInterface $dateFrom = null,
string|DateTimeInterface $dateTo = null,
Status $status = null,
array|int $competitionIds = null,
): iterable<int, FootballMatch>|false;
$match = $service->matches()->find(int $matchId): ?FootballMatch|false;
// And you can show the previous matches between the teams
$matches = $service->matches()->matchHead2Head(
int $matchId,
string|DateTimeInterface $dateFrom = null,
string|DateTimeInterface $dateTo = null,
array|int $competitionIds = null,
int $limit = null,
): iterable<int, FootballMatch>|false;
// 👆 Use the $service initialized above
use DateTimeInterface;
use EinarHansen\FootballData\Data\FootballMatch;
use EinarHansen\FootballData\Data\Person;
use EinarHansen\FootballData\Enums\Status;
use EinarHansen\FootballData\Resources\PersonResource;
$resource = $service->persons(): PersonResource
$person = $resource->find(int $personId): ?Person|false
// You can list matches the person was involved in
$matches = $resource->matches(
Person|int $personId,
string|DateTimeInterface $dateFrom = null,
string|DateTimeInterface $dateTo = null,
Status $status = null,
array|int $competitionIds = null,
int $limit = null,
int $offset = null
): iterable<int, FootballMatch>|false;
// 👆 Use the $service initialized above
use DateTimeInterface;
use EinarHansen\FootballData\Data\FootballMatch;
use EinarHansen\FootballData\Data\Person;
use EinarHansen\FootballData\Data\Team;
use EinarHansen\FootballData\Enums\Status;
use EinarHansen\FootballData\Resources\TeamResource;
use EinarHansen\FootballData\Pagination\TeamPaginator;
$resource = $service->teams(): TeamResource
$team = $resource->find(int $teamId): ?Team|false;
// This is the preferred method, as it returns a TeamPaginator
$collection = $resource->paginate(
int $limit = 50,
int $page = 1
): TeamPaginator<int, Team>|false;
// This method will iterate the results on every page until completed.
// Set a max page count to avoid an uncontrollable loop.
$collection = $resource->all(int $maxPage = 10): iterable<int, Team>|false;
// You can list matches the person was involved in
$matches = $resource->matches(
Person|int $personId,
string|DateTimeInterface $dateFrom = null,
string|DateTimeInterface $dateTo = null,
Status $status = null,
array|int $competitionIds = null,
int $limit = null,
int $offset = null
): iterable<int, FootballMatch>|false;
// Go to first page
$page1 = $service->teams()->paginate(limit: 50, page: 1);
// Jump between pages, every time you call this method a request is sent and items are loaded.
$page2 = $page1->nextPage(); // Paginator for page 2
$page3 = $page2->nextPage(); // Paginator for page 3
$page2 = $page3->previousPage(); // Paginator for page 2
$page2->items(); // array<int, Team>
$page2->count(); // (int) 50
$page2->isEmpty(); // (bool) false
$page2->isNotEmpty(); // (bool) true
json_encode($page2); // string containing all items as an array
use EinarHansen\FootballData\FootballDataService;
use EinarHansen\Http\RateLimit\Psr16RateLimitState;
use GuzzleHttp\Client;
...
class AppServiceProvider extends ServiceProvider
public function register()
{
$this->app->singleton(FootballDataService::class, function ($app) {
return new FootballDataService(
apiToken: $app['config']['services']['football-data']['api-token'],
client: new Client(),
rateLimiterState: new Psr16RateLimitState(
cacheKey: 'football-data',
cache: $app->make('cache.store'),
maxAttempts: 10,
decaySeconds: 60,
)
);
});
...
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.