====== Mastodon Blog ======
I wanted to add a blog to a new website (this website already has a Mastodon account) and after a few minutes of searching for options I realised "Wait, why don't I just use Mastodon?"
Turns out it only took a handful of lines of code:
$url = "https://glasgow.social/@neil.rss";
$data = file_get_contents($filename);
$posts = new SimpleXmlElement($data);
echo "";
foreach($posts->channel->item as $p) {
echo "- {$p->title}
";
echo $p->description;
echo " ";
}
echo "
";
Done. I can just insert that in any part of a website to show all the comments made by my mastodon account.
If I want to show only certain comments (e.g. those with a #blog hashtag) I can add some extra code inside the foreach (this is a little convulted as I wanted to ignore case)
$allowed_post = false;
foreach($p->category as $hash_tag) {
if(strtolower($hash_tag) == "blog")
$allowed_post = true;
}
if(!$allowed_post)
continue;
I'll add some caching to prevent hitting the Mastodon server's RSS file too often.
$url = "https://glasgow.social/@neil.rss";
$basename = basename($url);
$cache_file = "cache/$basename";
if(!file_exists($cache_file)) {
$data = file_get_contents($url);
file_put_contents($cache_file, $data);
} else {
$cache_ts = filemtime($cache_file);
if($cache_ts >= strtotime("-5 minutes")) {
$data = file_get_contents($cache_file);
} else {
$data = file_get_contents($url);
file_put_contents($cache_file, $data);
}
}
$posts = new SimpleXmlElement($data);
echo "";
foreach($posts->channel->item as $p) {
$allowed_post = false;
foreach($p->category as $hash_tag) {
if(strtolower($hash_tag) == "glasgow")
$allowed_post = true;
}
if(!$allowed_post)
continue;
echo "- {$p->title}
";
echo $p->description;
echo " ";
}
echo "
";