MultiBitly
Allows access to the bit.ly API with multiple accounts.
MultiBitly is a wrapper around the Bitly gem that makes it easy to generate multiple shortened Bitly links for a given URL.
When shortening a URL, Bitly will return the same hash regardless of how many times you request a new one. One way around this is to use a different Bitly account to shorten the same URL, resulting in a different hash.
Such a pain. Until now.
Now, with a list of Bitly accounts, MultiBitly will automatically shorten URLs for each account, resulting in a list of shortened Bitly links for one URL.
So what?
If you've ever wanted to use Bitly links as distribution channels to track a URL, you're going to be a whole lot happier. Just keep track of which account has already shortened the URL, and we'll take care of the rest.
Installation
Add this to your Gemfile
gem install multi_bitly
MultiBitly currently requires an ActiveRecord class that keeps track of the usernames and URLs already shortened through Bitly. The default name is BitlyAccount, but you can override it in the config.
You will also need to create an initializer to set the account information. You can find a Bitly account's API key here.
Show me the code
# config/initializers/multi_bitly.rb
MultiBitly::configure do |config|
config.accounts = [
{ username: 'user1', api_key: 'key1' },
{ username: 'user1', api_key: 'key2' }
]
end
# app/models/bitly_account.rb
class BitlyAccount < ActiveRecord::Base
attr_accessible :username, :url
validates :username, :url, presence: true
validates :username, uniqueness: { scope: :url } # one URL per user
end
# a sample class to shorten a URL and mark the account that shortened it
class ShortenAllTheThings
def initialize(url)
@url = url
end
def shorten
client = MultiBitly::Client.new
response = client.shorten(@url)
BitlyAccount.create!(username: response.account.username, url: 'http://google.com')
response.short_url
end
ShortenAllTheThings.new('http://google.com').shorten # => http://bit.ly/900913
ShortenAllTheThings.new('http://google.com').shorten # => http://bit.ly/11JpHp5
# now we're all out of acounts so we'll use the last one
ShortenAllTheThings.new('http://google.com').shorten # => http://bit.ly/11JpHp5
Contributors
Contributions welcome
Any contributions are welcome. Simply follow the steps below to get started:
- Fork it
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Added some feature')
- Push to the branch (git push origin my-new-feature)
- Create new Pull Request