szimek-twitter 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History +174 -0
- data/License +20 -0
- data/Notes +33 -0
- data/README.rdoc +13 -0
- data/Rakefile +103 -0
- data/VERSION.yml +4 -0
- data/examples/connect.rb +30 -0
- data/examples/friendship_existance.rb +13 -0
- data/examples/helpers/config_store.rb +38 -0
- data/examples/httpauth.rb +11 -0
- data/examples/search.rb +15 -0
- data/examples/timeline.rb +19 -0
- data/examples/update.rb +11 -0
- data/examples/user.rb +5 -0
- data/lib/twitter.rb +56 -0
- data/lib/twitter/base.rb +165 -0
- data/lib/twitter/httpauth.rb +26 -0
- data/lib/twitter/no_auth.rb +14 -0
- data/lib/twitter/oauth.rb +34 -0
- data/lib/twitter/rails/controller.rb +49 -0
- data/lib/twitter/rails/helpers.rb +17 -0
- data/lib/twitter/rails/initializer.rb +33 -0
- data/lib/twitter/request.rb +101 -0
- data/lib/twitter/search.rb +106 -0
- data/test/fixtures/firehose.json +1 -0
- data/test/fixtures/friends_timeline.json +1 -0
- data/test/fixtures/rate_limit_exceeded.json +1 -0
- data/test/fixtures/replies.json +1 -0
- data/test/fixtures/search.json +1 -0
- data/test/fixtures/search_from_jnunemaker.json +1 -0
- data/test/fixtures/status.json +1 -0
- data/test/fixtures/user.json +1 -0
- data/test/fixtures/user_timeline.json +1 -0
- data/test/test_helper.rb +36 -0
- data/test/twitter/base_test.rb +118 -0
- data/test/twitter/httpauth_test.rb +50 -0
- data/test/twitter/no_auth_test.rb +25 -0
- data/test/twitter/oauth_test.rb +71 -0
- data/test/twitter/request_test.rb +203 -0
- data/test/twitter/search_test.rb +144 -0
- data/test/twitter_test.rb +19 -0
- metadata +187 -0
data/History
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
0.6.4 - April 14, 2009
|
2
|
+
* 1 minor tweak
|
3
|
+
* More explicit about dependency versions in gemspec and when requiring.
|
4
|
+
|
5
|
+
0.6.3 - April 14, 2009
|
6
|
+
* 1 minor addition
|
7
|
+
* Added Twitter.user method to get user's information without authenticating
|
8
|
+
|
9
|
+
0.6.2 - April 14, 2009
|
10
|
+
* 1 minor addition
|
11
|
+
* added max to search so you can set the max id that should be used
|
12
|
+
|
13
|
+
0.6.1 - April 12, 2009
|
14
|
+
* 1 minor fix
|
15
|
+
* Had two friend_ids functions. Renamed one of them to follower_ids.
|
16
|
+
|
17
|
+
0.6.0 - April 11, 2009
|
18
|
+
* 1 feature addition
|
19
|
+
* Added http authentication back in. You can now use oauth or http auth as your client.
|
20
|
+
|
21
|
+
0.5.3 - April 10, 2009
|
22
|
+
* 1 minor fix
|
23
|
+
* Twitter API assumed follow true whether true or false. Now only sending follow along to request if follow is true for calls to friendship_create.
|
24
|
+
|
25
|
+
0.5.2 - April 8, 2009
|
26
|
+
* 4 minor fixes
|
27
|
+
* added mash as an install dependency, forgot it initially
|
28
|
+
* fixed that search wasn't taking into account a bunch of options duh!
|
29
|
+
* fixed some missing vars and stuff in exception raising
|
30
|
+
* added development dependencies to rake file to make that more explicit (technomancy)
|
31
|
+
* lame workaround for Mash#hash that allows using return objects in sets and such (technomancy)
|
32
|
+
|
33
|
+
0.5.1 - April 5, 2009
|
34
|
+
* 1 minor change
|
35
|
+
* Added data error hash returned from twitter to a few of the exceptions to help with debugging
|
36
|
+
* Fixed friendship_exists?. Was throwing mash stringify keys error because it was returning true or false instead of hash or array.
|
37
|
+
|
38
|
+
0.5.0 - April 3, 2009
|
39
|
+
* 1 major rewrite for OAuth
|
40
|
+
* Backwards compatibility thrown to the wind
|
41
|
+
* Proxy no longer supported (someone please add it back in, I never use proxies)
|
42
|
+
* Identica support killed with an axe (nothing against them but I don't use it)
|
43
|
+
* CLI shot to death (will be reborn at a later date using oauth and its own gem)
|
44
|
+
|
45
|
+
0.4.3 - February 21, 2009
|
46
|
+
* 1 minor enhancement
|
47
|
+
* verify_credentials now returns a Twitter::User rather than an hpricot doc
|
48
|
+
|
49
|
+
0.4.2 - February 10, 2009
|
50
|
+
* 1 minor enhancement
|
51
|
+
* Adding the Social Graph API methods (Josh Owens)
|
52
|
+
|
53
|
+
0.4.1 - January 1, 2009
|
54
|
+
* 4 minor enhancements and 2 bug fixes:
|
55
|
+
* Added better exception handling (Billy Gray)
|
56
|
+
* Added page to search (Michael Ivey)
|
57
|
+
* Adding an option to display tweets on CLI in reverse order (oldest first). (Cameron Booth)
|
58
|
+
* Added in_reply_to_status_id option for replying to statuses (anthonycrumley)
|
59
|
+
* Fixed a bug where the @config was improperly set (K. Adam Christensen)
|
60
|
+
* Fix verify_credentials to include a format (breaks in laconica). (dustin)
|
61
|
+
|
62
|
+
0.4.0 - December 23, 2008
|
63
|
+
* 3 major changes
|
64
|
+
* Removed active support as dependency
|
65
|
+
* Removed CLI dependencies from install dependency list
|
66
|
+
(they are now only installed by you manually)
|
67
|
+
* Switched to echoe for gem managment
|
68
|
+
|
69
|
+
0.3.7 - August 26, 2008
|
70
|
+
* Fixed source param not getting through
|
71
|
+
|
72
|
+
0.3.6 - August 11, 2008
|
73
|
+
* Fixed a few more methods that required post.
|
74
|
+
* Refactored the remaining methods that were not using #request to use it.
|
75
|
+
|
76
|
+
0.3.5 - August 4, 2008
|
77
|
+
* Removed sqlite-ruby 1.2.2 as a dependency due to install issues on linux
|
78
|
+
|
79
|
+
0.3.4 - August 3, 2008
|
80
|
+
* Added search support
|
81
|
+
|
82
|
+
0.3.3 - August 3, 2008
|
83
|
+
* Now has option for host when initializing to support identi.ca (Dustin Sallings)
|
84
|
+
* Twitter changed a bunch of methods to POST only so I updated those to now work
|
85
|
+
|
86
|
+
0.3.2 - July 26, 2008
|
87
|
+
* added the CLI gems as dependencies for now until I separate out the CLI from the API wrapper
|
88
|
+
* cleaner CLI errors for no active account or no accounts at all
|
89
|
+
* remove sets a new active account if there are none
|
90
|
+
* added username and password optional arguments to add
|
91
|
+
* added import attempt on install and on anything that uses #current_account helper
|
92
|
+
|
93
|
+
0.3.1 - July 23, 2008
|
94
|
+
* added open to CLI twitter open jnunemaker would open default browser to http://twitter.com/jnunemaker
|
95
|
+
* added -f to timeline and replies which ignores the since_id and shows all results
|
96
|
+
* added clear_config to remove all cached since id's and such
|
97
|
+
* Majorly pimped the output of timelines and replies.
|
98
|
+
|
99
|
+
0.3.0 - July 22, 2008
|
100
|
+
* complete rewrite of CLI. Now supports multiple accounts and changing between them.
|
101
|
+
* added source, truncated, in_reply_to_status_id, in_reply_to_user_id, and favorited to Twitter::Status
|
102
|
+
* added protected to Twitter::User
|
103
|
+
* d CLI method now takes standard input like post
|
104
|
+
* Rewrote several methods that had since parameter to now use a hash instead. This makes it more flexible as API updates.
|
105
|
+
* Rewrote the methods that took lite or since as an argument to instead take a hash.
|
106
|
+
* added Twitter::Base#friendship_exists?
|
107
|
+
* added Twitter::Base#update_location
|
108
|
+
* added Twitter::Base#update_delivery_device
|
109
|
+
* added Twitter::Base#favorites
|
110
|
+
* added Twitter::Base#create_favorite
|
111
|
+
* added Twitter::Base#destroy_favorite
|
112
|
+
* added Twitter::Base#block
|
113
|
+
* added Twitter::Base#unblock
|
114
|
+
|
115
|
+
BACKWORDS COMPATIBILITY BREAK:
|
116
|
+
Any method that you have using lite or since as an argument
|
117
|
+
will no longer work with this version. Simply change to a
|
118
|
+
hash and you'll be fine. For example:
|
119
|
+
|
120
|
+
friends(true) would now be friends(:lite => true)
|
121
|
+
|
122
|
+
0.2.7 - June 29, 2008
|
123
|
+
* added #rate_limit_status (Daniel Morrison)
|
124
|
+
* added source parameter option to Base#post
|
125
|
+
* added twittergem as source when posting from command line
|
126
|
+
* Twitter::RateExceeded raised when you hit your limit (Jim O'Leary)
|
127
|
+
* Twitter::Unavailable raised when twitter returns 503
|
128
|
+
* Twitter::CantConnect is now more descriptive as to what is the problem when it is raised during a request
|
129
|
+
* quoting your message when using twitter post on the command line is now optional (Benoit Caccinolo)
|
130
|
+
* aliased post to p on command line so it's shorter (Benoit Caccinolo)
|
131
|
+
* unescaped html and added some color in command line view (Miles Z. Sterrett)
|
132
|
+
* added gemspec (technoweenie, Miles Z. Sterrett)
|
133
|
+
* Fixed stack trace error on first command line operation (Matt Rose)
|
134
|
+
0.2.6 - April 2, 2008
|
135
|
+
* found a more simple way of doing stdin without any extra gem dependencies
|
136
|
+
0.2.5 - April 2, 2008
|
137
|
+
* Command line interface can now use stdin for posting (ideas and example code from Jeremy Friesen)
|
138
|
+
$ twitter post 'test without stdin' # => twitters: test without stdin
|
139
|
+
$ echo 'test with stdin' | twitter post 'and an argv[1]' # => twitters: test with stdin and an argv[1]
|
140
|
+
$ echo 'test with stdin without any argv[1]' | twitter post # => twitters: test with stdin without any argv[1]
|
141
|
+
0.2.4 - Mar 31, 2008
|
142
|
+
* Added lite option to friends and followers, which doesn't include the user's current status (Daniel Morrison)
|
143
|
+
* Updated since option to use HTTP header, and added the option on timeline() and replies(). (Daniel Morrison)
|
144
|
+
0.2.3 - Jan 16, 2008
|
145
|
+
* added d to command line interface twitter d jnunemaker 'hola' (Humbucker)
|
146
|
+
* added progress dots when posting for confirmation when twitter is running slow (Hendy Irawan)
|
147
|
+
0.2.2 - added leave and follow which are new twitter api methods for turning notifications on and off
|
148
|
+
0.2.0 - Aug 4, 2007
|
149
|
+
* added sent_messages
|
150
|
+
* alias direct_messages to received_messages
|
151
|
+
* added create_friendship
|
152
|
+
* added destroy_friendship
|
153
|
+
* added featured to retrieve the featured twitter users
|
154
|
+
* added replies
|
155
|
+
* added destroy to destroy a status by id
|
156
|
+
* added status to find a status by id
|
157
|
+
* added active support as an extra dependency
|
158
|
+
* implemented d method to send direct messages (jnewland)
|
159
|
+
* fixed since argument in direct_messages method (jnewland)
|
160
|
+
0.1.1 - May 20, 2007
|
161
|
+
* hpricot 0.5+ now supported; just a bug fix (Ryan Waldron is the man!)
|
162
|
+
0.1.0 - March 31, 2007
|
163
|
+
* added d method for creating direct messages (waiting for it to work as documented)
|
164
|
+
* added featured method for getting featured users statuses (waiting for it to work as documented)
|
165
|
+
* added direct_messages method
|
166
|
+
* added friends_for method
|
167
|
+
* added a few tests
|
168
|
+
* removed relative_created_at as it is deprecated
|
169
|
+
* separated out the call method into call, request and parse methods
|
170
|
+
0.0.5 - just a bit of code cleanup
|
171
|
+
0.0.4 - added :location, :description, :url, :profile_image_url to user class (Alex Payne)
|
172
|
+
0.0.3 - added a bit more informative message when things go wrong
|
173
|
+
0.0.2 - added the command line options i forgot to add (friend and follower); improved some docs
|
174
|
+
0.0.1 - initial release
|
data/License
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 John Nunemaker
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Notes
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
*****************************************************************
|
2
|
+
* From Twitter API Docs, so I don't have to keep going to them. *
|
3
|
+
*****************************************************************
|
4
|
+
|
5
|
+
http://apiwiki.twitter.com/REST+API+Documentation
|
6
|
+
|
7
|
+
200 OK: everything went awesome.
|
8
|
+
304 Not Modified: there was no new data to return.
|
9
|
+
400 Bad Request: your request is invalid, and we'll return an error message that tells you why. This is the status code returned if you've exceeded the rate limit (see below).
|
10
|
+
401 Not Authorized: either you need to provide authentication credentials, or the credentials provided aren't valid.
|
11
|
+
403 Forbidden: we understand your request, but are refusing to fulfill it. An accompanying error message should explain why.
|
12
|
+
404 Not Found: either you're requesting an invalid URI or the resource in question doesn't exist (ex: no such user).
|
13
|
+
500 Internal Server Error: we did something wrong. Please post to the group about it and the Twitter team will investigate.
|
14
|
+
502 Bad Gateway: returned if Twitter is down or being upgraded.
|
15
|
+
503 Service Unavailable: the Twitter servers are up, but are overloaded with requests. Try again later.
|
16
|
+
|
17
|
+
**********
|
18
|
+
* Errors *
|
19
|
+
**********
|
20
|
+
|
21
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
22
|
+
<hash>
|
23
|
+
<request>/direct_messages/destroy/456.xml</request>
|
24
|
+
<error>No direct message with that ID found.</error>
|
25
|
+
</hash>
|
26
|
+
|
27
|
+
**********************
|
28
|
+
* Rate Limit Headers *
|
29
|
+
**********************
|
30
|
+
|
31
|
+
X-RateLimit-Limit the current limit in effect
|
32
|
+
X-RateLimit-Remaining the number of hits remaining before you are rate limited
|
33
|
+
X-RateLimit-Reset the time the current rate limiting period ends (in epoch time, number of seconds since 1970-01-01 00:00:00)
|
data/README.rdoc
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
= twitter
|
2
|
+
|
3
|
+
The ruby twitter gem. The gem heard round the world and famous on the streets. Haha. This gem works with both oauth and http auth, if you care.
|
4
|
+
|
5
|
+
For now this is just an API wrapper. The command line interface is temporarily dead until I have time to make it work with oauth. At that point, I'll make it a new gem twitter-cli or something and it will depend on this gem to work. That will keep the separation of the api wrapper and cli and fix a lot of dependency issues.
|
6
|
+
|
7
|
+
= examples
|
8
|
+
|
9
|
+
See the examples directory.
|
10
|
+
|
11
|
+
== Copyright
|
12
|
+
|
13
|
+
Copyright (c) 2009 John Nunemaker. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "twitter"
|
8
|
+
gem.summary = %Q{wrapper for the twitter api (oauth only)}
|
9
|
+
gem.email = "nunemaker@gmail.com"
|
10
|
+
gem.homepage = "http://github.com/jnunemaker/twitter"
|
11
|
+
gem.authors = ["John Nunemaker"]
|
12
|
+
gem.rubyforge_project = "twitter"
|
13
|
+
gem.files = FileList["[A-Z]*", "{examples,lib,test}/**/*"]
|
14
|
+
|
15
|
+
gem.add_dependency('oauth', '0.3.2')
|
16
|
+
gem.add_dependency('mash', '0.0.3')
|
17
|
+
gem.add_dependency('httparty', '0.4.2')
|
18
|
+
|
19
|
+
gem.add_development_dependency('thoughtbot-shoulda')
|
20
|
+
gem.add_development_dependency('jeremymcanally-matchy')
|
21
|
+
gem.add_development_dependency('mocha')
|
22
|
+
gem.add_development_dependency('fakeweb')
|
23
|
+
gem.add_development_dependency('mash')
|
24
|
+
end
|
25
|
+
rescue LoadError
|
26
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
27
|
+
end
|
28
|
+
|
29
|
+
require 'rake/testtask'
|
30
|
+
Rake::TestTask.new(:test) do |test|
|
31
|
+
test.libs << 'lib' << 'test'
|
32
|
+
test.pattern = 'test/**/*_test.rb'
|
33
|
+
test.verbose = false
|
34
|
+
end
|
35
|
+
|
36
|
+
begin
|
37
|
+
require 'rcov/rcovtask'
|
38
|
+
Rcov::RcovTask.new do |test|
|
39
|
+
test.libs << 'test'
|
40
|
+
test.pattern = 'test/**/*_test.rb'
|
41
|
+
test.verbose = true
|
42
|
+
end
|
43
|
+
rescue LoadError
|
44
|
+
task :rcov do
|
45
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
task :default => :test
|
51
|
+
|
52
|
+
require 'rake/rdoctask'
|
53
|
+
Rake::RDocTask.new do |rdoc|
|
54
|
+
if File.exist?('VERSION.yml')
|
55
|
+
config = YAML.load(File.read('VERSION.yml'))
|
56
|
+
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
57
|
+
else
|
58
|
+
version = ""
|
59
|
+
end
|
60
|
+
|
61
|
+
rdoc.rdoc_dir = 'rdoc'
|
62
|
+
rdoc.title = "twitter #{version}"
|
63
|
+
rdoc.rdoc_files.include('README*')
|
64
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
65
|
+
end
|
66
|
+
|
67
|
+
begin
|
68
|
+
require 'rake/contrib/sshpublisher'
|
69
|
+
namespace :rubyforge do
|
70
|
+
|
71
|
+
desc "Release gem and RDoc documentation to RubyForge"
|
72
|
+
task :release => ["rubyforge:release:gem", "rubyforge:release:website", "rubyforge:release:docs"]
|
73
|
+
|
74
|
+
namespace :release do
|
75
|
+
desc "Publish RDoc to RubyForge."
|
76
|
+
task :docs => [:rdoc] do
|
77
|
+
config = YAML.load(
|
78
|
+
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
79
|
+
)
|
80
|
+
|
81
|
+
host = "#{config['username']}@rubyforge.org"
|
82
|
+
remote_dir = "/var/www/gforge-projects/twitter/rdoc"
|
83
|
+
local_dir = 'rdoc'
|
84
|
+
|
85
|
+
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
86
|
+
end
|
87
|
+
|
88
|
+
task :website do
|
89
|
+
config = YAML.load(
|
90
|
+
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
91
|
+
)
|
92
|
+
|
93
|
+
host = "#{config['username']}@rubyforge.org"
|
94
|
+
remote_dir = "/var/www/gforge-projects/twitter/"
|
95
|
+
local_dir = 'website'
|
96
|
+
|
97
|
+
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
rescue LoadError
|
102
|
+
puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
|
103
|
+
end
|
data/VERSION.yml
ADDED
data/examples/connect.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'twitter')
|
2
|
+
require File.join(File.dirname(__FILE__), 'helpers', 'config_store')
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
config = ConfigStore.new("#{ENV['HOME']}/.twitter")
|
6
|
+
oauth = Twitter::OAuth.new(config['token'], config['secret'])
|
7
|
+
|
8
|
+
if config['atoken'] && config['asecret']
|
9
|
+
oauth.authorize_from_access(config['atoken'], config['asecret'])
|
10
|
+
twitter = Twitter::Base.new(oauth)
|
11
|
+
pp twitter.friends_timeline
|
12
|
+
|
13
|
+
elsif config['rtoken'] && config['rsecret']
|
14
|
+
oauth.authorize_from_request(config['rtoken'], config['rsecret'])
|
15
|
+
twitter = Twitter::Base.new(oauth)
|
16
|
+
pp twitter.friends_timeline
|
17
|
+
|
18
|
+
config.update({
|
19
|
+
'atoken' => oauth.access_token.token,
|
20
|
+
'asecret' => oauth.access_token.secret,
|
21
|
+
}).delete('rtoken', 'rsecret')
|
22
|
+
else
|
23
|
+
config.update({
|
24
|
+
'rtoken' => oauth.request_token.token,
|
25
|
+
'rsecret' => oauth.request_token.secret,
|
26
|
+
})
|
27
|
+
|
28
|
+
# authorize in browser
|
29
|
+
%x(open #{oauth.request_token.authorize_url})
|
30
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'twitter')
|
2
|
+
require File.join(File.dirname(__FILE__), 'helpers', 'config_store')
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
config = ConfigStore.new("#{ENV['HOME']}/.twitter")
|
6
|
+
|
7
|
+
oauth = Twitter::OAuth.new(config['token'], config['secret'])
|
8
|
+
oauth.authorize_from_access(config['atoken'], config['asecret'])
|
9
|
+
|
10
|
+
client = Twitter::Base.new(oauth)
|
11
|
+
|
12
|
+
puts client.friendship_exists?('jnunemaker', 'orderedlist')
|
13
|
+
puts client.friendship_exists?('jnunemaker', 'biz')
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class ConfigStore
|
2
|
+
attr_reader :file
|
3
|
+
|
4
|
+
def initialize(file)
|
5
|
+
@file = file
|
6
|
+
end
|
7
|
+
|
8
|
+
def load
|
9
|
+
@config ||= YAML::load(open(file))
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](key)
|
14
|
+
load
|
15
|
+
@config[key]
|
16
|
+
end
|
17
|
+
|
18
|
+
def []=(key, value)
|
19
|
+
@config[key] = value
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete(*keys)
|
23
|
+
keys.each { |key| @config.delete(key) }
|
24
|
+
save
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def update(c={})
|
29
|
+
@config.merge!(c)
|
30
|
+
save
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
def save
|
35
|
+
File.open(file, 'w') { |f| f.write(YAML.dump(@config)) }
|
36
|
+
self
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'twitter')
|
2
|
+
require File.join(File.dirname(__FILE__), 'helpers', 'config_store')
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
config = ConfigStore.new("#{ENV['HOME']}/.twitter")
|
6
|
+
|
7
|
+
httpauth = Twitter::HTTPAuth.new(config['email'], config['password'])
|
8
|
+
base = Twitter::Base.new(httpauth)
|
9
|
+
|
10
|
+
pp base.user_timeline
|
11
|
+
pp base.verify_credentials
|