multipostter - A Hassle-Free Multi-Posting Tool
Background
We are in the warring states period of SNS. The world of text-based microblogging SNS is in chaos.
In the past, you could get a lot of information just by looking at Twitter, but with the loss of user-friendly clients, it has become difficult to obtain information. Also, from the perspective of dissemination, information that used to spread sufficiently by just flowing on Twitter has become harder to reach due to the dispersion of users.
Fragmented Networks
Some SNSs use common protocols to access other networks. Famous examples include mastodon servers and Misskey servers connected by ActivityPub, where you can view each other's posts and reply. There are also emerging ones like Bluesky based on the ATProtocol, which makes integration easier due to its open protocol.
On the other hand, seamless integration is difficult if the protocols are different, and the level of support for each SNS varies. Even Threads' fediverse support is taking a long time.
Ideally, all networks would be connected, and you could immerse yourself in your favorite SNS while easily peeking at others, a state where you could "peek at everything from one window". However, this is realistically difficult.
Countermeasures
What countermeasures can be taken in this current situation? A simple solution is multi-posting, which flows the same post to each network.
For example, looking at Frieren, who wields magic to master Bluesky, you can see that some of the former Twitter posts are flowing to Bluesky. The reason for not all posts flowing is unclear, but it might be that only important announcements are flowing. In this way, through multi-posting to different networks, people using Bluesky clients can easily access information.
Now, let's look at specific methods of multi-posting. Although it's simply called multi-posting, there are broadly two types of methods.
Multi-posting - Push Type
One is the method of simultaneously pushing to multiple networks when posting. I'll call this the push type. This is a relatively common form.
This doesn't require a server, can be reflected in real-time, and allows for fine-tuning for each posting destination. It's an option when you want to fully utilize the functions of various SNSs.
However, a major disadvantage is that it requires a special client for posting. Not being able to use familiar clients and often being separated from readers can make it bothersome, potentially leading to abandonment. While it might be good for companies wanting to control all posts, it's quite difficult for the general public to use.
push type
Multi-posting - Pull Type
The other method is to detect posts and mirror them to multiple networks. I'll call this the pull type.
This method decides on one main network and detects posts there to flow to other networks. While it has disadvantages such as requiring a server, incurring delays, and not being able to leverage the unique features of each SNS, it can achieve multi-posting with minimal effort.
pull type
For the tool I created this time, I want to do pull-type multi-posting.
Technical Talk
Constraints and Design
To fit the current environment, I set Misskey.io as the main network, with Bluesky and former Twitter as mirror targets. This is changeable, but since the Twitter API is currently free only for writing, it can't be used as the main network.
Next, I define a generic post format common to these SNSs. I pick up posts from the main network, convert them to this format, and flow them to other networks.
While it's composed of general content such as post strings, attached images and videos, and posting time, there are restrictions on attached files depending on the SNS. Misskey.io has the most relaxed constraints and doesn't need to be considered, but Bluesky has 1MB per file, and former Twitter has up to 4 files, so I proceed with implementation keeping these in mind.
Picking Up Misskey Posts
Looking at the Misskey.io API Doc, you can pick them up by issuing HTTP requests[1]. Since it can exclude replies and renotes, you can easily obtain a list of posts to flow to other networks.
Battling Bluesky's Size Limit
As mentioned earlier, Bluesky's attached file size limit is very strict, up to 1MB per file. Therefore, in this tool, images attached to posts picked up from Misskey.io are shrunk using sharp to process them so that the file size becomes sufficiently small.
Server Without Hassle and Cost
This tool has a fully serverless configuration and is IaC, making it easy to manage.
The part that picks up and flows posts is placed on AWS Lambda[2], set to execute every 10 minutes. A delay of about 10 minutes should be acceptable, right? Management of how far posts have been made is just writing one record to DynamoDB.
This configuration is not only easy to manage but can also be realized at zero cost[3] as it fits within the free tier.
Also, IaC uses AWS CDK to enable deployment with one command. It's easy to repair even if it breaks.
How to Use
I've uploaded the source to Github. While it requires knowledge of AWS and SNS APIs to use, so not everyone can use it, please try running it if you're interested.
Conclusion
SNSs that can't use APIs are finished!
There was also a JavaScript client, but it was archived https://github.com/misskey-dev/misskey.js/ ↩︎
Putting sharp on Lambda is a bit challenging ↩︎
It might cost a little, but it shouldn't cost even $1 with normal use ↩︎