Making it easy for you to be everywhere, even if there's no API
sudo gem install ubiquitously
test/config.yml with your credentials for the different services, then run
You can post to any of these services (even via oauth) completely from the command line.
u.me post twitter "Check out xyz!"
The anatomy of a command is this:
u.me post [services] [title] [options]
[services] are a list of services you want this command to post to, and the
[title] is whatever follows (in single/double quotes). The following will post to Twitter, Tumblr, and Posterous:
u.me post twitter tumblr posterous "Managing multiple interfaces"
You can get more precise by specifying options:
-l: label, aka the Post "title"
-t: tags (
-U: username for the service
-P: password for the service
So you can write a command like this:
u.me post digg "Oauth on the Command line!?" -d "You can now use Oauth from the command line" -t "oauth, ruby, unix" -u "http://ubiquitously.me"
Ubiquitously will save your login data (cookies, secrets, tokens, and params) in
~/.u.me. You can open those files and edit them (add passwords, app keys, etc.) with these commands:
u.me cookies u.me secrets u.me tokens u.me params
It treats everything as a
Post. A post has these properties:
title: Name of the post/file/content
url: Url to the post
description: Description/summary/comment for the post. Ranges from 50-1000 characters. Most services only allow plain, but some (code snippets, and tumblr) allow html or code.
tags: Array of lowercased tags. Formats tags how services want them (e.g. comma separated vs. dashed). Applies tag limits if necessary. These are user-defined.
categories: Category for the post. Most services allow 1 category, some up to 4. These are specific to the service.
vote: Vote for the post, either "up", "down", or "none" (or 1, 0, -1). Only if applicable to the service.
rating: Rating for the post, 1-5, if applicable.
privacy: Whether the service is public or private (0 || "public", 1 || "private")
state: Status of the post, either "published", "draft", "submitted", or "queued".
kind: The type of post, either post, link, quote, comment, image, video, audio, or answer.
format: The format of your post content, either "plain", "html", "markdown", "textile", or any code (ruby, c, php, etc.).
service: This is generated from the class, e.g. "digg".
service_url: The url the service provides to the post.
Each service requires different things, which are determined by the
validates_presence_of declaration for each class. Conceptually, you can divide the services into these categories:
- Microblogging (twitter, yahoo meme, google buzz, identica)
- Tumblelogging (tumblr, posterous)
- Blogging (large posts)
- Bookmarking (delicious, diigo, mixx, newsvine, reddit, digg...)
- Code Sharing (gist, snipplr, dzone snippets, snipt, flikode, smipple)
Many social bookmarking services do not have API's in order to prevent spammers from ruining their system. But what about for those of us that actually create content several times a day and want automation? We're out of luck.
So Ubiquitously creates a simple, RESTful API around some services I need to publish to now, and hopefully it will grow as you guys need more. The goal is to be semi-low-level and not to provide a full featured api to a service, as some services already have very well-done API's in Ruby.
Currently there's plenty of services to post about yourself: ping.fm, onlywire, posterous... But what if you want to do the same for other people? You're left having to go to the page and click one of their social buttons, and filling out the form. No way I'm filling out more than one for a page. This solves that problem, making it so you can post someone else's site to a million places just like yours, helping you build a community.
- Comment in the forums
- snippets, github
- Share others' content to stumbleupon, delicious, digg, diigo, reddit, tumblr, twitter, mixx, and identica.
- Tag other's posts on stumbleupon, delicious, digg, diigo, and reddit.
- Stumble other peoples posts that link to you. You'll benefit them and yourself.
- Write 2-3 sentences to describe each thing you post. So if you can share 10 things a day, that's 20-30 sentences.
- Comment on other people's blogs
- Only posting your content, you will get banned from the sites.
- Posting just the default description to all the sites
- Posting too much
Linkbuilding is not a sprint... it is a MARATHON!
- Get a bunch of feeds
- Read the feeds
- Share the feeds
- find most appropriate tags for each service
- if submission already exists (digg, dzone, reddit...), then make description a comment and digg it.
- validations for each service (description wordcount, num tags, categories, title)
- who can post (is it for just me or for other people)?
- programmers_heaven, meta_filter, propeller, sharebrain, shoutwire, sphinn, stumpedia, web_blend, who_freelance, youblr, zabox
- Find image on page for display
- logging at stages in the process
- content type: video, image, post, status
- each needs to check to see if post already exists
- handle categories in a generic way
- handle captchas
- if this is actually useful, maybe creating accounts programmatically
- optimize login, i could probably skip the entire "parse form" section and just do a raw post.
- I don't want to support every service because most of them are spammy or are not used much lately. Let's keep it clean here. Some services are also invite only and are in very very specific niches outside my realm. If you would like to support them, feel free to fork and customize.
- amazon wishlist
- yahoo meme
- reddit, digg, diigo, and mixx still don't work
- diigo doesn't work because cookie expires. create mechanize to re-login if cookie doesn't work
Ask yourself the following questions about the linkability of your content:
- Am I Digging this because I want others to see it, and pressing a single button is an easy way for me to say "this is cool?"
- Or am I Digging this because People need to know about this, because they can’t live without it or because without it they would be out of the loop.
- Is it possible that my information is so new and/or informative that I will actually become an authority on this information, or serve as a reference for others interested in writing about similar content?
It is only one step more to make it so we fully create all the user accounts if they don't exist on all the services
Ubiquitously is distributed under the MIT license. Copyright @viatropos 2010.