This shows you the differences between two versions of the page.
— |
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> | ||