twitterstream 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,10 @@
1
- === 0.0.1 2009-12-30
1
+ === 0.1.0 2010-01-01
2
2
 
3
- * 1 major enhancement:
4
- * Initial release
3
+ * Fixed some from Sora Harakami
4
+ * TwitterStream::Client => TwitterStream
5
+ * require 'twitterStream' => require 'twitter_stream'
6
+ * TwitterStream#start_stream is to be a private method
7
+
8
+ === 0.0.1 2009-12-31
9
+
10
+ * Initial release from yayugu
@@ -1,11 +1,11 @@
1
1
  History.txt
2
2
  Manifest.txt
3
3
  README.rdoc
4
- README.txt
4
+ README.mkd
5
5
  Rakefile
6
- lib/twitterstream.rb
6
+ lib/twitter_stream.rb
7
7
  script/console
8
8
  script/destroy
9
9
  script/generate
10
10
  test/test_helper.rb
11
- test/test_twitterstream.rb
11
+ test/test_twitter_stream.rb
@@ -1,44 +1,48 @@
1
- = twitterstream
1
+ # twitterstream
2
2
 
3
- * http://rubyforge.org/projects/twitterstream/
3
+ * [rubyforge - twitterstream](http://rubyforge.org/projects/twitterstream/)
4
4
 
5
- == DESCRIPTION:
5
+ ## DESCRIPTION
6
6
 
7
- It is the simple library to access the Twitter Streaming API( http://apiwiki.twitter.com/Streaming-API-Documentation ). It works with pure-ruby(don't need C compiler) and rubygems.
7
+ It is the simple library to access the [Twitter Streaming API](http://apiwiki.twitter.com/Streaming-API-Documentation). It works with pure-ruby(don't need C compiler) and rubygems.
8
8
 
9
- == FEATURES/PROBLEMS:
9
+ ## FEATURES/PROBLEMS
10
10
 
11
- == SYNOPSIS:
11
+ ## SYNOPSIS
12
12
 
13
- require "twitterStream"
14
- TwitterStream::Client.new("username", "password").sample do |status|
15
- next unless status['text']
16
- user = status['user']
17
- puts "#{user['screen_name']}: #{status['text']}"
18
- end
13
+ require "twitter_stream"
19
14
 
20
- or
15
+ ts = TwitterStream.new(USERNAME,PASSWORD)
21
16
 
22
- require "twitterStream"
23
- TwitterStream::Client.new("username", "password").track("bit,ly") do |status|
24
- next unless status['text']
25
- user = status['user']
26
- puts "#{user['screen_name']}: #{status['text']}"
27
- end
17
+ ts.sample do |status|
18
+ user = status['user']
19
+ puts "#{user['screen_name']}: #{status['text']}"
20
+ end
28
21
 
29
- == REQUIREMENTS:
22
+ ts.track(['bit','ly']) do |status| # or ts.track("bit,ly")
23
+ user = status['user']
24
+ puts "#{user['screen_name']}: #{status['text']}"
25
+ end
26
+
27
+ ts.follow([5161091,66137185]) do |status| # or ts.track("5161091,66137185") or ts.track(["5161091",66137185])
28
+ user = status['user']
29
+ puts "#{user['screen_name']}: #{status['text']}"
30
+ end
31
+
32
+ ## REQUIREMENTS
30
33
 
31
34
  * json
32
35
 
33
- == INSTALL:
36
+ ## INSTALL:
34
37
 
35
- sudo gem install twitterstream
38
+ sudo gem install twitterstream
36
39
 
37
- == LICENSE:
40
+ ## LICENSE:
38
41
 
39
42
  (The MIT License)
40
43
 
41
- Copyright (c) 2009 FIXME full name
44
+ Copyright (c) 2010 Sora Harakami (Modified)
45
+ Copyright (c) 2009 yayugu
42
46
 
43
47
  Permission is hereby granted, free of charge, to any person obtaining
44
48
  a copy of this software and associated documentation files (the
@@ -1,62 +1,10 @@
1
1
  = twitterstream
2
2
 
3
- * http://rubyforge.org/projects/twitterstream/
4
3
 
5
4
  == DESCRIPTION:
6
5
 
7
6
  It is the simple library to access the Twitter Streaming API( http://apiwiki.twitter.com/Streaming-API-Documentation ). It works with pure-ruby(don't need C compiler) and rubygems.
8
7
 
9
- == FEATURES/PROBLEMS:
8
+ == DETAIL:
10
9
 
11
-
12
-
13
- == SYNOPSIS:
14
-
15
- require "twitterStream"
16
- TwitterStream::Client.new("username", "password").sample do |status|
17
- next unless status['text']
18
- user = status['user']
19
- puts "#{user['screen_name']}: #{status['text']}"
20
- end
21
-
22
- or
23
-
24
- require "twitterStream"
25
- TwitterStream::Client.new("username", "password").track("bit,ly") do |status|
26
- next unless status['text']
27
- user = status['user']
28
- puts "#{user['screen_name']}: #{status['text']}"
29
- end
30
-
31
- == REQUIREMENTS:
32
-
33
- * json
34
-
35
- == INSTALL:
36
-
37
- sudo gem install twitterstream
38
-
39
- == LICENSE:
40
-
41
- (The MIT License)
42
-
43
- Copyright (c) 2009 FIXME full name
44
-
45
- Permission is hereby granted, free of charge, to any person obtaining
46
- a copy of this software and associated documentation files (the
47
- 'Software'), to deal in the Software without restriction, including
48
- without limitation the rights to use, copy, modify, merge, publish,
49
- distribute, sublicense, and/or sell copies of the Software, and to
50
- permit persons to whom the Software is furnished to do so, subject to
51
- the following conditions:
52
-
53
- The above copyright notice and this permission notice shall be
54
- included in all copies or substantial portions of the Software.
55
-
56
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
57
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
58
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
59
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
60
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
61
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
62
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10
+ see README.mkd
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  gem 'hoe', '>= 2.1.0'
3
3
  require 'hoe'
4
4
  require 'fileutils'
5
- require './lib/twitterstream'
5
+ require './lib/twitter_stream'
6
6
 
7
7
  Hoe.plugin :newgem
8
8
  # Hoe.plugin :website
@@ -13,7 +13,7 @@ Hoe.plugin :newgem
13
13
  $hoe = Hoe.spec 'twitterstream' do
14
14
  self.developer 'yayugu', 'yayugu@gmail.com'
15
15
 
16
- self.rubyforge_name = self.name # TODO this is default value
16
+ self.rubyforge_name = "twitterstream" # TODO this is default value
17
17
  self.extra_deps = [['json','>= 1.2.0']]
18
18
 
19
19
  end
@@ -0,0 +1,107 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'net/http'
5
+ require 'uri'
6
+ require 'rubygems'
7
+ require 'json'
8
+
9
+ module Net
10
+ class HTTPResponse
11
+ def each_line(rs = "\n")
12
+ stream_check
13
+ while line = @socket.readuntil(rs)
14
+ yield line
15
+ end
16
+ self
17
+ end
18
+ end
19
+ end
20
+
21
+ class TwitterStream
22
+ VERSION = '0.1.0'
23
+ @@urls = {
24
+ 'sample' => URI.parse("http://stream.twitter.com/1/statuses/sample.json"),
25
+ 'filter' => URI.parse("http://stream.twitter.com/1/statuses/filter.json")
26
+ }
27
+
28
+ def initialize(username, password)
29
+ @username = username
30
+ @password = password
31
+ self
32
+ end
33
+
34
+ def sample(params=nil)
35
+ raise ArgumentError, "params is not hash" unless params.nil? || params.kind_of?(Hash)
36
+ start_stream('sample', params) do |status|
37
+ yield status
38
+ end
39
+ end
40
+
41
+ def filter(params=nil)
42
+ raise ArgumentError, "params is not hash" unless params.nil? || params.kind_of?(Hash)
43
+ start_stream('filter', params) do |status|
44
+ yield status
45
+ end
46
+ end
47
+
48
+ def track(track, params=nil)
49
+ raise ArgumentError, "track is not array or string" unless track.kind_of?(Array) || track.kind_of?(String)
50
+ raise ArgumentError, "params is not hash" unless params.nil? || params.kind_of?(Hash)
51
+
52
+ p = { 'track' => track.kind_of?(Array) ? track.map{|x| raise ArgumentError, "track item is not string or integer!" unless x.kind_of?(String) || x.kind_of?(Integer); x.kind_of?(Integer) ? x.to_s : x }.join(",") : track }
53
+
54
+ p.merge!('filter',params) if params
55
+ start_stream('filter', p) do |status|
56
+ yield status
57
+ end
58
+ end
59
+
60
+ def follow(follow, params=nil)
61
+ raise ArgumentError, "follow is not array or string" unless follow.kind_of?(Array) || follow.kind_of?(String)
62
+ raise ArgumentError, "params is not hash" unless params.nil? || params.kind_of?(Hash)
63
+
64
+ p = { 'follow' => follow.kind_of?(Array) ? follow.join(",") : follow }
65
+ p.merge!(params) if params
66
+
67
+ start_stream('filter', p) do |status|
68
+ yield status
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def start_stream(url, params=nil)
75
+ raise ArgumentError, "params is not hash" unless params.nil? || params.kind_of?(Hash)
76
+ raise ArgumentError, "url is not String or URI!" unless url.kind_of?(URI) || url.kind_of?(String)
77
+
78
+ if url.kind_of?(URI)
79
+ uri = url
80
+ elsif url.kind_of?(String)
81
+ if @@urls[url]
82
+ uri = @@urls[url]
83
+ elsif /^https?:/ =~ url
84
+ uri = URI.parse(url)
85
+ else
86
+ raise ArgumentError, "@@urls['#{url}'] not found"
87
+ end
88
+ end
89
+
90
+ http = Net::HTTP.start(uri.host, uri.port)
91
+ request = Net::HTTP::Post.new(uri.request_uri)
92
+ request.set_form_data(params) if params
93
+ request.basic_auth(@username, @password)
94
+
95
+ begin
96
+ http.request(request) do |response|
97
+ response.each_line("\r\n") do |line|
98
+ j = JSON.parse(line) rescue next
99
+ next unless j["text"]
100
+ yield j
101
+ end
102
+ end
103
+ ensure
104
+ http.finish
105
+ end
106
+ end
107
+ end
@@ -1,3 +1,3 @@
1
1
  require 'stringio'
2
2
  require 'test/unit'
3
- require File.dirname(__FILE__) + '/../lib/twitterstream'
3
+ require File.dirname(__FILE__) + '/../lib/twitter_stream'
@@ -2,10 +2,11 @@ require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
3
  class TestTwitterStream < Test::Unit::TestCase
4
4
 
5
- def setup
6
- end
7
-
8
- def test_truth
9
- assert true
10
- end
5
+ def setup
6
+
7
+ end
8
+
9
+ def test_truth
10
+ assert true
11
+ end
11
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitterstream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - yayugu
@@ -42,21 +42,20 @@ extensions: []
42
42
  extra_rdoc_files:
43
43
  - History.txt
44
44
  - Manifest.txt
45
- - README.txt
46
45
  files:
47
46
  - History.txt
48
47
  - Manifest.txt
49
48
  - README.rdoc
50
- - README.txt
49
+ - README.mkd
51
50
  - Rakefile
52
- - lib/twitterstream.rb
51
+ - lib/twitter_stream.rb
53
52
  - script/console
54
53
  - script/destroy
55
54
  - script/generate
56
55
  - test/test_helper.rb
57
- - test/test_twitterstream.rb
56
+ - test/test_twitter_stream.rb
58
57
  has_rdoc: true
59
- homepage: http://rubyforge.org/projects/twitterstream/
58
+ homepage:
60
59
  licenses: []
61
60
 
62
61
  post_install_message:
@@ -85,5 +84,5 @@ signing_key:
85
84
  specification_version: 3
86
85
  summary: It is the simple library to access the Twitter Streaming API( http://apiwiki.twitter.com/Streaming-API-Documentation )
87
86
  test_files:
88
- - test/test_twitterstream.rb
87
+ - test/test_twitter_stream.rb
89
88
  - test/test_helper.rb
@@ -1,77 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
-
4
- require 'net/http'
5
- require 'uri'
6
- require 'rubygems'
7
- require 'json'
8
-
9
- module Net
10
- class HTTPResponse
11
- def each_line(rs = "\n")
12
- stream_check
13
- while line = @socket.readuntil(rs)
14
- yield line
15
- end
16
- self
17
- end
18
- end
19
- end
20
-
21
- module TwitterStream
22
- VERSION = '0.0.4'
23
-
24
- class Client
25
- def initialize(username, password)
26
- @username = username
27
- @password = password
28
- self
29
- end
30
-
31
- def start_stream(uri, params=nil)
32
- Net::HTTP.start(uri.host, uri.port) do |http|
33
- request = Net::HTTP::Post.new(uri.request_uri)
34
- request.set_form_data(params) if params
35
- request.basic_auth(@username, @password)
36
- http.request(request) do |response|
37
- response.each_line("\r\n") do |line|
38
- status = JSON.parse(line) rescue next
39
- yield status
40
- end
41
- end
42
- end
43
- end
44
-
45
- def sample(params=nil)
46
- uri = URI.parse("http://stream.twitter.com/1/statuses/sample.json")
47
- start_stream(uri, params) do |status|
48
- yield status
49
- end
50
- end
51
-
52
- def filter(params=nil)
53
- uri = URI.parse("http://stream.twitter.com/1/statuses/filter.json")
54
- start_stream(uri, params) do |status|
55
- yield status
56
- end
57
- end
58
-
59
- def track(track, params=nil)
60
- uri = URI.parse("http://stream.twitter.com/1/statuses/filter.json")
61
- p = {'track'=>track}
62
- p.merge!(params) if params
63
- start_stream(uri, p) do |status|
64
- yield status
65
- end
66
- end
67
-
68
- def follow(follow, params=nil)
69
- uri = URI.parse("http://stream.twitter.com/1/statuses/filter.json")
70
- p = {'follow'=>follow}
71
- p.merge!(params) if params
72
- start_stream(uri, p) do |status|
73
- yield status
74
- end
75
- end
76
- end
77
- end