Last played on Steam

Happy New Year to everyone I hate, I'm sure you'll have a good one anyway.

I wrote a little script so you can see what games I've been playing instead of writing all of those blog posts I never finished last year.

Very much inspired by alifeee's Steam Collage generator and the blog post explaining how it works, I set out to copy and paste as much code from his project as possible and ideally I wanted to knock out a 'last played timeline' to put on my blog.

When I realised it was all written in Python I decided I wasn't having any of that muck on my website and settled for a single tile of 'last played' - this fitted my website's design better anyway.

I also couldn't be bothered to set up the API for something so simple, the result is as follows (in PHP).

<?php

// set my steam user id
$id = 'sgtwipey';

// build the id page url
$url = 'https://steamcommunity.com/id/' . $id . '/';

// get the page via curl
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$resp = curl_exec($ch);

$matches = [];

// use regex to get steam app id from the most recent game
// I'm doing this instead of using the newer dom parsing stuff as
// the php version I'm using isn't that new
$result = preg_match('/recent_games">\s+<div class="recent_game">[\s\S]+?store_item_assets\/steam\/apps\/(?<gameid>\d+)\//', $resp, $matches);

// set a nice fallback image
$img = base64_decode('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');

// if a recent game is found, get the data via curl
if (isset($matches['gameid'])) {
    $ch = curl_init('https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/' . $matches['gameid'] . '/header.jpg');

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $img = curl_exec($ch);
}

// set image header so it displays corectly in browser
header('Content-Type: image/jpeg');

// write to output buffer
file_put_contents('php://output', $img);

If I cared more I would make the fallback image the same size as the title images returned, but I don't.

Buy me more games from my wishlist pls

Like independent content?

alifeee's webring!

For the glory of the Indieweb!