The bmannconsulting.com website

feed creation

+12
_journals/2024-01-15_2227.md
···
···
+
---
+
title: January 15th, 2024
+
date: 2024-01-15, 22:27:33 -08:00
+
section: journal
+
aliases:
+
tags:
+
- crossposting
+
- Fedica
+
- RSS
+
link: https://fedica.com/social-media/how-to-setup-rss-feeds
+
---
+
[Fedica has an updated page describing how they handle cross posting RSS feed items](https://fedica.com/social-media/how-to-setup-rss-feeds). With many more networks at play, teams like [[Fedica]] are going to be updating how cross-posting and other aspects work. It's hard to normalize across all these systems!
+5
_notes/Digital Favela and High Tech Gothic.md
···
···
+
---
+
tags:
+
- WIP
+
---
+
A [[Bruce Sterling]] reference that I need to come back.
+19 -11
_notes/Fedica.md
···
- platform
- organization
- saas
link: https://fedica.com
---
Website: <https://fedica.com>
Used to be Tweepsmap for mapping of Twitter. Now full social media analytics, with scheduling and crossposting across 8 networks.
-
## Pricing
The free plan allows for basic cross posting across 8 networks, 1 account max per network.
···
Importing via RSS is a feature of paid plans.
-
Currently, here’s how this works:
-
* Reads the `<title>` as the content of the post
-
* Maximum content is 257 characters across all networks
-
* Scans the `<description>` field and attaches the first `<img>` that is present
-
* Adds a link back to the post at the end
-
One thing to note is that if you have feeds without titles — which is how my journal [[feeds]] work — then the posts will only have a link and no content.
-
I’ve put in a support request and am having a discussion with the team and it sounds like they are open to two new features:
-
* support for optionally reading the description field for content
-
* Variable truncation per network — eg 500 for Mastodon, 300 for Bluesky, 3000 for LinkedIn, etc; or, optionally, threading long posts automatically (I would love auto-threading)
-
Thanks for looking at this Fedica team!
···
- platform
- organization
- saas
+
- Canada
+
- Toronto
link: https://fedica.com
---
Website: <https://fedica.com>
Used to be Tweepsmap for mapping of Twitter. Now full social media analytics, with scheduling and crossposting across 8 networks.
## Pricing
The free plan allows for basic cross posting across 8 networks, 1 account max per network.
···
Importing via RSS is a feature of paid plans.
+
After my feedback to the Fedica support team, they've updated how this works and [documented it here](https://fedica.com/social-media/how-to-setup-rss-feeds).
+
* Reads the `<title>` as the content of the post, OR `<description>` if no title field
+
* Posts are auto split into threads for those networks that support threads
+
* Scans the `<description>` field and attaches the first `<img>` that is present, or up to 4 images in the `<enclosure>` field
+
* Adds a link back to the post at the end / last post in the thread
+
* Hashtags are defined per pipeline, and are also added at the end / last post in the thread
+
* Pipelines can be configured to exclude certain words, and title, description, category, and content fields are all checked for this; this means you could make a "nocrosspost" category for instance
+
+
[This page describes how to set up pipelines](https://fedica.com/social-media/how-to-setup-rss-feeds), but the bulk of the info is in this video:
+
+
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/HfrPWP_bBw8?si=7EjdiJWj9Kmv_oxj" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
+
+
A few other notes from my messages with the support team, and as I configure things.
+
### Repeat
+
> Repeat will publish your content again if your pipeline runs out of new content, but fresh content will always take priority over repeated content. You can set for how long you want to repeat the content. Tweets are usually reposted as retweets when repeated​.
+
+
+3 -1
_pages/feeds.md
···
Long form <a href="{{ '/blog/' | relative_link }}" class="internal-link">blog</a> posts <a href="{{ '/blog.xml' | relative_link }}" class="internal-link">bmannconsulting.com/blog.xml</a>
-
A full list of social accounts is available at <a href="https://bmann.ca">bmann.ca</a>. You can read a blog post about <a class="internal-link" href="../blog/2024/01/06/mostly-posse/">posting and syndication</a>.
···
Long form <a href="{{ '/blog/' | relative_link }}" class="internal-link">blog</a> posts <a href="{{ '/blog.xml' | relative_link }}" class="internal-link">bmannconsulting.com/blog.xml</a>
+
A full list of social accounts is available at <a href="https://bmann.ca">bmann.ca</a>. You can read a blog post about <a class="internal-link" href="../blog/2024/01/06/mostly-posse/">posting and syndication</a>.
+
+
I've used [[Micro.blog]] for cross-posting, and as of January 15th, 2024, am using [[Fedica]]'s RSS cross-posting features.
+33
journal-fedica-mastodon.xml
···
···
+
---
+
---
+
<?xml version="1.0" encoding="UTF-8"?>
+
<rss version="2.0"
+
xmlns:atom="http://www.w3.org/2005/Atom"
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
+
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+
>
+
<channel>
+
<title>{{ site.name | xml_escape }} - Journal Feed</title>
+
<description>A journal feed built for Fedica to cross-post, Mastodon flavoured</description>{% comment %} See https://bmannconsulting.com/notes/fedica/ for cross-posting rules {% endcomment %}
+
<link>{{ site.url }}</link>
+
<atom:link href="{{ site.url }}{{ page.url }}" rel="self" type="application/rss+xml" />
+
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
+
{% assign sortedblog = site.journals | sort: 'date' | reverse %}
+
{% for post in sortedblog limit:50 %}
+
<item>
+
<dc:creator>Boris Mann</dc:creator>
+
{% assign description = post.content | replace: "<blockquote>", "〖" | replace: "</blockquote>", "〗 " | strip_html %}
+
{% if post.link %}
+
{% assign description = description | append: " " | append: post.link %}
+
{% endif %}
+
{% comment %} Capture: we loop through all of the tags and make a list of hashtags separated by spaces {% endcomment %}
+
{% capture taglist %}{% for tag in post.tags %} #{{ tag }}{% endfor %}{% endcapture %}
+
{% assign description = description | append: taglist %}
+
<description>{{ description | xml_escape }}</description>
+
<link>{{ site.url }}{{ post.url }}</link>
+
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
+
<guid isPermaLink="true">https://bmannconsulting.com{{ post.url }}</guid>
+
</item>
+
{% endfor %}
+
</channel>
+
</rss>
+9 -8
journal-fedica.xml
···
>
<channel>
<title>{{ site.name | xml_escape }} - Journal Feed</title>
-
<description>{% if site.description %}{{ site.description | xml_escape }}{% endif %}</description>
<link>{{ site.url }}</link>
<atom:link href="{{ site.url }}{{ page.url }}" rel="self" type="application/rss+xml" />
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
{% assign sortedblog = site.journals | sort: 'date' | reverse %}
{% for post in sortedblog limit:50 %}
<item>
-
{% if site.name %}
-
<dc:creator>{{ site.name | xml_escape }}</dc:creator>
{% endif %}
-
<title>{{ post.content | strip_html | xml_escape | truncate:250 }}</title>{% comment %} Fedica reads from title {% endcomment %}
-
<description>{{ post.content | xml_escape | replace: 'src=&quot;/', 'src=&quot;https://bmannconsulting.com/' | replace: 'href=&quot;/', 'href=&quot;https://bmannconsulting.com/' }}</description>
-
{% if post.link %}
-
<link>{{ post.link }}</link>
{% else %}
-
<link>{{ site.url }}{{ post.url }}</link>
{% endif %}
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
<guid isPermaLink="true">https://bmannconsulting.com{{ post.url }}</guid>
</item>
···
>
<channel>
<title>{{ site.name | xml_escape }} - Journal Feed</title>
+
<description>A journal feed built for Fedica to cross-post</description>{% comment %} See https://bmannconsulting.com/notes/fedica/ for cross-posting rules {% endcomment %}
<link>{{ site.url }}</link>
<atom:link href="{{ site.url }}{{ page.url }}" rel="self" type="application/rss+xml" />
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
{% assign sortedblog = site.journals | sort: 'date' | reverse %}
{% for post in sortedblog limit:50 %}
<item>
+
<dc:creator>Boris Mann</dc:creator>
+
{% assign description = post.content | strip_html %}
+
{% if post.link %}
+
{% assign description = description | append: " " | append: post.link %}
{% endif %}
+
{% if description.size > 250 %}
+
<description>{{ post.content | xml_escape }}</description>
{% else %}
+
<description>{{ description | xml_escape }}</description>
{% endif %}
+
<link>{{ site.url }}{{ post.url }}</link>
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
<guid isPermaLink="true">https://bmannconsulting.com{{ post.url }}</guid>
</item>
+6 -4
journal.xml
···
>
<channel>
<title>{{ site.name | xml_escape }} - Journal Feed</title>
-
<description>{% if site.description %}{{ site.description | xml_escape }}{% endif %}</description>
<link>{{ site.url }}</link>
<atom:link href="{{ site.url }}{{ page.url }}" rel="self" type="application/rss+xml" />
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
{% assign sortedblog = site.journals | sort: 'date' | reverse %}
{% for post in sortedblog limit:50 %}
<item>
-
{% if site.name %}
-
<dc:creator>{{ site.name | xml_escape }}</dc:creator>
-
{% endif %}
<description>{{ post.content | xml_escape | replace: 'src=&quot;/', 'src=&quot;https://bmannconsulting.com/' | replace: 'href=&quot;/', 'href=&quot;https://bmannconsulting.com/' }}</description>
<link>{{ site.url }}{{ post.url }}</link>
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
<guid isPermaLink="true">https://bmannconsulting.com{{ post.url }}</guid>
</item>
···
>
<channel>
<title>{{ site.name | xml_escape }} - Journal Feed</title>
+
<description>{{ site.description | xml_escape }}</description>
<link>{{ site.url }}</link>
<atom:link href="{{ site.url }}{{ page.url }}" rel="self" type="application/rss+xml" />
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
{% assign sortedblog = site.journals | sort: 'date' | reverse %}
{% for post in sortedblog limit:50 %}
<item>
+
<dc:creator>{{ site.name | xml_escape }}</dc:creator>
<description>{{ post.content | xml_escape | replace: 'src=&quot;/', 'src=&quot;https://bmannconsulting.com/' | replace: 'href=&quot;/', 'href=&quot;https://bmannconsulting.com/' }}</description>
+
{% if post.link %}
+
<link>{{ post.link }}</link>
+
{% else %}
<link>{{ site.url }}{{ post.url }}</link>
+
{% endif %}
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
<guid isPermaLink="true">https://bmannconsulting.com{{ post.url }}</guid>
</item>