Have you ever wanted to turn a twitter account into a fortune file? Well, today is your lucky day!
Augury is the practice from ancient Roman religion of
interpreting omens from the observed flight of birds.As per Wikipedia
There are a lot of really funny twitter accounts out there. Let's just pick one and get started.
$ augury generate seinfeldtodayThis just created the fortune files in the current directory:
$ ls
seinfeldtoday seinfeldtoday.datYou can now read the new fortunes!
$ fortune seinfeldtoday
Elaine has no idea what her BF does for a living and it's now too
late to ask. E:"Teacher, I think. Or a doctor? Wait Is
'computers' a job?"Thanks for all the laughs fortune :)
Here are some accounts that work well with Augury:
- Modern Seinfeld
- Very Short Story
- Bored Elon Musk
- Your own feed, so you can get nostalgic.
Add this line to your application's Gemfile:
gem 'augury'And then execute:
$ bundleOr install it yourself as:
$ gem install auguryThis gem requires that the fortune program is also installed.
The fortune program ships with a strfile program that converts the plain text files to something that fortune can select from.
For example, if you are using Homebrew on OS X:
$ brew install fortuneCreate the ~/.augry.yml file and then set the permissions since your Twitter API info will be in there.
$ touch ~/.augury.yml
$ chmod 600 ~/.augury.ymlSet any of the available settings in the config like this:
count: 20
attribution: trueThese are the available options for the ~/.augury.yml config file.
| Option | Description | Default |
|---|---|---|
append |
Make the script add more entries to the specified file instead of re-writing it | false |
width |
Set the default width used if none is given on the command line. | 72 |
count |
The number of tweets to get. Set to 0 to get all. | 200 |
retweets |
Include retweets. | false |
replies |
Include replies. | false |
links |
Include tweets with links in them. | false |
remove_links |
Remove all links from tweets before any other transforms. If set, this infers links is true. |
false |
attribution |
Add an author attribution to each fortune. | false |
apply_transforms |
Apply the global and feed specific transforms. | false |
transforms |
Transformations to apply to specific user feeds. See Transforms below. | |
global-transforms |
Transformations to apply to all feeds. Applied after transforms See Transforms below. |
First, you will need to create a new Twitter application by going here: https://developer.twitter.com
This will give you the ability to generate the consumer and access information used below.
Add the following to your ~/.augury.yml config.
twitter:
consumer_key: YOUR_CONSUMER_KEY
consumer_secret: YOUR_CONSUMER_SECRET
access_token: YOUR_ACCESS_TOKEN
access_token_secret: YOUR_ACCESS_TOKEN_SECRETGlobal substitutions can be made using regular expressions.
Each transform is a pattern and replacement.
For instance, if you wanted to replace all Hello's with Hello world, you could add the following:
global-transforms:
-
- !ruby/regexp /(hello)/i
- "\\1 world"Global transforms are applied after all other transforms.
Word wrapping is applied after the transforms have been applied.
Transforms can also be defined per user feed.
If you wanted to do the same as the global above, but only for seinfeldtoday, then add the following:
transforms:
seinfeldtoday:
-
- !ruby/regexp /(hello)/i
- "\\1 world"Or a more interesting example using the example earlier for seinfeldtoday:
Elaine has no idea what her BF does for a living and it's now too
late to ask. E:"Teacher, I think. Or a doctor? Wait Is
'computers' a job?"
Then add the following to make this a bit more readable:
transforms:
seinfeldtoday:
-
- !ruby/regexp /(E:\s*)/
- "\n\nElaine: "
-
- !ruby/regexp /BF/
- "boyfriend"Then we end up with this:
Elaine has no idea what her boyfriend does for a living and it's now
too late to ask.
Elaine: "Teacher, I think. Or a doctor? Wait Is 'computers' a job?"
Create a fortune for the latest seinfeldtoday tweets.
$ augury generate seinfeldtodayNow you have some fortunes.
$ fortune seinfeldtodaySpecify a width and a different path to use:
$ augury generate -w 120 seinfeldtoday /usr/local/share/games/fortune/Modern\ SeinfeldIf this is where your fortune program looks for fortunes, you can now use the new fortune.
$ fortune "Modern Seinfeld"Run the help to get more details about what the program can do
$ augury help
$ augury help generateIf you want to contribute to this library, do the following.
Create a fork, then get the code
$ git clone [email protected]:YOUR_USERNAME/augury.git
$ cd auguryRun the setup script to get everything installed:
NOTE: This requires having bundler available. That is beyond the scope of this README.
$ bin/setupOnce that is finished, there is a console available. This gives you access to all the code via Pry.
$ bin/consoleThe augury command will be available in exe:
$ bundle exec ruby exe/augury helpYou can run the tests with the rake task:
$ bundle exec rspecIf you need to record a test with the Twitter API, you can set up the proper env vars by getting them from your currently set up augury.yml file.
$ eval `bin/extract_creds`Then run the tests as you normally would.
$ bundle exec rspecBug reports and pull requests are welcome on GitHub at https://github.com/claytron/augury.
The gem is available as open source under the terms of the MIT License.
Thanks to TinderBox for giving us time to make cool things happen!
This was an excellent learning experience for the author, who was new at programming in Ruby.
The Developing a RubyGem using Bundler documentation was fun to read and informative. It helped get the skeleton of the code set up and extra goodies in the development profile. Highly recommended read!