User Tools

Site Tools


mastodon_blog

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

mastodon_blog [2022/07/26 16:04] (current)
admin created
Line 1: Line 1:
 +====== 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:
 +
 +<code php>
 +
 +$url = "​https://​glasgow.social/​@neil.rss";​
 +$data = file_get_contents($filename);​
 +$posts = new SimpleXmlElement($data);​
 +
 +echo "<​ul>";​
 +foreach($posts->​channel->​item as $p) {
 +        echo "<​li><​strong><​a target='​new'​ href='​{$p->​link}'>​{$p->​title}</​a></​strong><​br />";​
 +        echo $p->​description;​
 +        echo "</​li>";​
 +}
 +echo "</​ul>";​
 +
 +</​code>​
 +
 +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)
 +
 +<code php>
 +        $allowed_post = false;
 +        foreach($p->​category as $hash_tag) {
 +                if(strtolower($hash_tag) == "​blog"​)
 +                        $allowed_post = true;
 +        }
 +        if(!$allowed_post)
 +                continue;
 +
 +</​code>​
 +
 +I'll add some caching to prevent hitting the Mastodon server'​s RSS file too often.
 +
 +<code php mastodon_blog.php>​
 +
 +$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 "<​ul>";​
 +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 "<​li><​strong><​a target='​new'​ href='​{$p->​link}'>​{$p->​title}</​a></​strong><​br />";​
 +        echo $p->​description;​
 +        echo "</​li>";​
 +}
 +echo "</​ul>";​
 +
 +
 +</​code>​
  
mastodon_blog.txt ยท Last modified: 2022/07/26 16:04 by admin