Working on a tool for posting stub posts linking to off-chain content
When I read @pennsif's thread from a few days ago I was reminded of the idea I posted a while back about being able to vote for off-chain content, and how a proof of concept would probably be possible with a bot. Over the past few days I've been doing some proof-of-concept coding on the various parts that I'd need to actually make a tool to do this.
Getting started
The basic idea is that we'd want a stub post which is basically just a link to the content you'd want to upvote, but not posted by your own account in order to get around the social norms regarding self-voting, and with the beneficiaries set to burn 100% of the author rewards since there wouldn't be any original authorship in the stub post. So I started by creating the @offchaincontent account to use for the tool. Then, since my previous experiments with Steem API coding have involved reading from rather than posting to the blockchain, I started reading the docs for the Javascript api calls since I'm implementing things in Node.js. I am not a fan of the current Javascript tutorial on submitting new posts to the blockchain -- a big chunk of the text is devoted to interacting with an HTML page to input data that's passed to the methods that actually post to the chain, I think the stuff that interacts with the chain ought to be the main focus. The bigger problem is that it only uses the "comment" method and there doesn't seem to be much documentation of the "commentWithOptions" method which you need for stuff like setting beneficiaries. I think I figured everything out there eventually, we'll find out for sure in a few days when the rewards window closes on my test posts.
Open Graph protocol
For the content of the stub post itself, it occurred to me that when you share links on other social media sites like Facebook and Twitter you usually get rich "preview" content. I decided to check into how that is done and it turns out that there are some conventions such as the Open Graph protocol, which just has you create some "<meta>" tags in the head section of an HTML page, which gives social media sites the title, canonical URL, an image, and some preview text to use. (There's a similar convention for providing content for Twitter cards). It seems to me that posting that stuff to the chain should be fine and not run afoul of any concerns about plagiarism since the convention is that anyone who would put those specific tags in their HTML would happy to have that content displayed by social media sites. So the plan is that the user will pass in the URL, my server will read the URL via axios, parse the HTML via jsdom, and then use that info to compose the stub post and post it to the chain. I haven't built a UI yet, but I have some prototype code that's creating the stub post via the Open Graph information, and I think it's working.
Next steps
There are a couple more things I already know I'll need to do. I'm definitely going to need to figure out a UI, and a method for the UI to interface with the server that will be doing the posting to the chain. Since I don't want it to be a tool for spam I'm thinking I'll need a way for people to "sign in" and only post on their behalf if they have enough SteemPower for their votes to overcome the dust threshold. I'll probably need to add an option for some sort of blacklist, too, in case someone is tempted to abuse it. I'll also want to build up a database of URLs it has already posted so it doesn't create duplicates. My original intention had been to just have it hosted as a free Heroku site, but apparently they are discontinuing their free service, so I'll also need to figure out where to host it when it's ready to move out of the prototype stage.
We talked about this before in comments, I think. I'm a big fan of the idea. Coincidentally, @steemcurator01 recently mentioned that they wanted to see more #bursteem100 stuff. ;-)
I used the Open Graph metadata when I was working with SteemJ for #steemlinks. It's really handy if the web site has it configured right. A lot of sites seem to mess it up, though.
I'd love to see this set up as a "sharing service" to really make it flow naturally. I do a lot of link sharing in my RSS reader, so it would be great to be able to also share here with just a click of the "Send To" button.
The big challenge here, I think, is that people aren't going to do a lot of work for 0 author rewards, so it's got to be easy without incentivizing spam. Your idea to have a minimum SP requirement sounds like a good first step.
#lucky10
Very nice! I think this "stub post" concept to vote up offchain content without self-voting is a really good idea and opens Reddit-type usecases.
Big thanks for this link showing the broadcast process. I'd missed that one in the breadth of Steem docs but it finally points to where I can see the API calls for the broadcast flow, which I was having trouble finding.
Another thought is that you could burn something like 90 or 95% and use the rest to fund development/hosting.
I thought about that, but I'm not sure I'd be comfortable taking a cut of "author rewards" if the creators of the linked-to content don't consent to it. It seems to me that keeping it at 100% means I don't have to agonize over how much might be justified. If it takes a lot of ongoing maintenance and/or I have to pay for hosting I may need to think about a funding model in the future.
This post has been featured in the latest edition of Steem News...