// four teams Β· one subscription url Β· always up to date
This is a standard iCal feed, which means it works with any calendar app β Google Calendar, Apple Calendar, Outlook, Fastmail, Proton Calendar, and more. Copy the URL and paste it into whichever app you use as a new subscribed calendar.
https://dcsports.cloud/dcsports.php
Most apps have a "Subscribe", "Add from URL", or "Add calendar" option in their settings β paste the URL there. Here's how it works in Google Calendar specifically:
Open Google Calendar in a browser β the web version has the import option; the mobile app does not.
In the left sidebar, find "Other calendars" and click the + icon next to it.
Choose "From URL", paste the URL above, and click "Add calendar".
Done β all four DC teams will appear in your calendar. π
Each game is a calendar event. The sport emoji in the title lets you see at a glance which team is playing:
| Team | Example event title | |
|---|---|---|
| βΎ | Nationals (MLB) | βΎ Nationals @ Phillies |
| π | Wizards (NBA) | π Celtics @ Wizards |
| π | Capitals (NHL) | π Capitals @ Rangers |
| π | Commanders (NFL) | π Cowboys @ Commanders |
Games disappear automatically once they end β no manual cleanup needed. When scores are available, they're included in the title: βΎ Nationals (5) @ Phillies (3).
Each event includes the venue in the location field. Game duration is estimated at 3 hours for the purpose of the end-time filter.
dcsports.php is a single PHP file living on this server. When Google Calendar polls the URL, it runs and does four things:
Fetches live schedule data for all four teams from fixturedownload.com.
Filters out any game that ended more than 3 hours ago.
Converts the remaining games into standard iCal events, adding the emoji, matchup title, and venue.
Returns a single .ics file β the format all calendar apps understand.
There's no database, no cron job, no stored state. It runs fresh on every request and takes well under a second to execute.
Loadingβ¦
Schedules come from fixturedownload.com, which publishes free JSON feeds for major North American sports leagues. The four feeds in use:
| Team | Feed | |
|---|---|---|
| βΎ | Washington Nationals | fixturedownload.com/feed/json/mlb-2026/washington-nationals |
| π | Washington Wizards | fixturedownload.com/feed/json/nba-2025/washington-wizards |
| π | Washington Capitals | fixturedownload.com/feed/json/nhl-2026/washington-capitals |
| π | Washington Commanders | fixturedownload.com/feed/json/nfl-2026/washington-commanders |
mlb-2026) is the season identifier fixturedownload uses. When a new season starts and games stop appearing, update the year in the $CALENDARS array at the top of dcsports.php and re-upload the file.
All the configuration is at the top of dcsports.php in the $CALENDARS array. Each entry is a feed URL and an emoji β add, remove, or change teams here:
$CALENDARS = [
[
'url' => 'https://fixturedownload.com/feed/json/mlb-2026/washington-nationals',
'emoji' => 'βΎ',
],
[
'url' => 'https://fixturedownload.com/feed/json/nba-2025/washington-wizards',
'emoji' => 'π',
],
// add more teams here β any fixturedownload JSON feed works
];
The calendar's display name in Google Calendar is controlled by this line near the bottom of the script:
"X-WR-CALNAME:DC Sports\r\n"
Google Calendar sometimes ignores this on first import and labels the calendar with the URL. You can rename it manually in Google Calendar settings β the name you set there sticks permanently regardless of what the feed says.
| Symptom | Most likely cause & fix |
|---|---|
| Calendar is completely empty | The server couldn't reach fixturedownload. The script tries file_get_contents then falls back to cURL β check that at least one is enabled on the server. |
| Games aren't updating | Normal β Google polls every 12β24 hours. Nothing is broken. |
| Past games still showing | Also Google's poll lag. Events drop off as soon as Google fetches the feed again after the 3-hour end-time window passes. |
| One team's games are missing | That team's season year in dcsports.php likely needs bumping. Check fixturedownload.com for the current season slug and update the URL. |
| Calendar named after the URL | Google ignoring X-WR-CALNAME on import is normal. Rename it manually in Google Calendar settings β Settings β find the calendar β edit name. |