twitterstream 0.0.4 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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