console_tweet 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/twitter ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../lib/console_tweet'
3
+
4
+ console = ConsoleTweet::CLI.new
5
+ console.start
@@ -0,0 +1,124 @@
1
+ module ConsoleTweet
2
+
3
+ class CLI
4
+
5
+ require 'rubygems'
6
+ require 'twitter_oauth'
7
+ require 'yaml'
8
+
9
+ AllowedMethods = [:setup, :help, :status, :tweet]
10
+ ConsumerKey = 'MvVdCyl6xCVtEUVdcp4rw'
11
+ ConsumerSecret = '3xD0oy47WhWYUIBCU6QzcIBqsrAAL3KnYWKhd6ALk2k'
12
+
13
+ TOKEN_PATH = File.expand_path('~/.twitter')
14
+
15
+ NameColor = "\e[33m"
16
+ CommandColor = "\e[36m"
17
+ DefaultColor = "\e[0m"
18
+ NoteColor = "\e[37m"
19
+ ErrorColor = "\e[31m"
20
+
21
+ def initialize
22
+ @commands = []
23
+ @arguments = {}
24
+ end
25
+
26
+ def start
27
+ ARGV.each do |arg|
28
+ unless arg.index('-') === 0
29
+ @commands << arg
30
+ end
31
+ end
32
+ # get the first command as the method, and the rest of the commands as args
33
+ method = @commands.empty? ? :help : @commands[0].to_sym
34
+ return method_missing(method) unless AllowedMethods.include?(method)
35
+ self.send(method, @commands[1..@commands.size])
36
+ end
37
+
38
+ # Prompt the user for a PIN using a request token, and see if we can successfully authenticate them
39
+ def get_access_token
40
+ @client = TwitterOAuth::Client.new(:consumer_key => ConsumerKey, :consumer_secret => ConsumerSecret)
41
+ request_token = @client.request_token
42
+ # ask the user to visit the auth url
43
+ puts "To authenticate your client, visit the URL: #{request_token.authorize_url}"
44
+ # wait for the user to give us the PIN back
45
+ print 'Enter PIN: '
46
+ begin
47
+ @client.authorize(request_token.token, request_token.secret, :oauth_verifier => self.class.get_input.chomp)
48
+ rescue OAuth::Unauthorized
49
+ false # Didn't get an access token
50
+ end
51
+ end
52
+
53
+ def tweet(*args)
54
+ load_default_token
55
+ return failtown("Unauthorized, re-run setup!") unless @client.authorized?
56
+ @client.update(args.join(' '))
57
+ puts "Tweet Posted!"
58
+ end
59
+
60
+ def status(*args)
61
+ load_default_token
62
+ return failtown("Unauthorized, re-run setup!") unless @client.authorized?
63
+ user = @client.info
64
+ status = user['status']
65
+ puts "#{user['name']} (at #{status['created_at']}) #{status['text']}"
66
+ end
67
+
68
+ def setup(*args)
69
+ # Keep trying to get the access token
70
+ until @access_token = self.get_access_token
71
+ print "Try again? [Y/n] "
72
+ return false if self.class.get_input.downcase == 'n'
73
+ end
74
+ # When we finally get it, record it in a dotfile
75
+ tokens = {:default => { :token => @access_token.token, :secret => @access_token.secret }}
76
+ save_tokens(tokens)
77
+ end
78
+
79
+ def help(*args)
80
+ puts "#{NameColor}console-tweet#{DefaultColor} by John Crepezzi <john.crepezzi@gmail.com>"
81
+ puts 'github: http://github.com/seejohnrun/console-tweet'
82
+ puts
83
+ puts "#{CommandColor}twitter setup#{DefaultColor} Setup your account"
84
+ puts "#{CommandColor}twitter status#{DefaultColor} Get your most recent status"
85
+ puts "#{CommandColor}twitter tweet \"Hello World\"#{DefaultColor} Send out a tweet"
86
+ end
87
+
88
+ def failtown(message = nil)
89
+ puts "#{ErrorColor}Uh-oh! #{message}#{DefaultColor}\n" if message
90
+ help
91
+ end
92
+
93
+ def method_missing(command, *arguments)
94
+ failtown "Unknown command: #{command}\n"
95
+ end
96
+
97
+ private
98
+
99
+ def load_default_token
100
+ tokens = load_tokens
101
+ default_hash = tokens[:default]
102
+ @client = TwitterOAuth::Client.new(:consumer_key => ConsumerKey, :consumer_secret => ConsumerSecret, :token => default_hash[:token], :secret => default_hash[:secret])
103
+ end
104
+
105
+ def load_tokens
106
+ f = File.open(TOKEN_PATH, 'r')
107
+ tokens = YAML::load(f)
108
+ f.close
109
+ tokens
110
+ end
111
+
112
+ def save_tokens(tokens)
113
+ f = File.open(TOKEN_PATH, 'w')
114
+ YAML::dump(tokens, f)
115
+ f.close
116
+ end
117
+
118
+ def self.get_input
119
+ STDIN.gets.strip.chomp
120
+ end
121
+
122
+ end
123
+
124
+ end
@@ -0,0 +1,3 @@
1
+ module ConsoleTweet
2
+
3
+ end
@@ -0,0 +1,5 @@
1
+ module ConsoleTweet
2
+
3
+ VERSION = '0.0.1'
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ module ConsoleTweet
2
+
3
+ require 'lib/console_tweet/cli'
4
+
5
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: console_tweet
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - John Crepezzi
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-29 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: twitter_oauth
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ description: CLI Twitter Client - with OAuth
50
+ email: john@crepezzi.com
51
+ executables:
52
+ - twitter
53
+ extensions: []
54
+
55
+ extra_rdoc_files: []
56
+
57
+ files:
58
+ - lib/console_tweet/cli.rb
59
+ - lib/console_tweet/console-tweet.rb
60
+ - lib/console_tweet/version.rb
61
+ - lib/console_tweet.rb
62
+ - bin/twitter
63
+ has_rdoc: true
64
+ homepage: http://seejohnrun.github.com/console_tweet/
65
+ licenses: []
66
+
67
+ post_install_message:
68
+ rdoc_options: []
69
+
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project: console_tweet
93
+ rubygems_version: 1.3.7
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: CLI Twitter Client
97
+ test_files: []
98
+