Skip to content

Commit

Permalink
Replace Twitter::Streaming::Request with HTTP::Request
Browse files Browse the repository at this point in the history
  • Loading branch information
sferik committed Sep 6, 2013
1 parent 8575fc0 commit 32fd733
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 208 deletions.
61 changes: 16 additions & 45 deletions lib/twitter/streaming/client.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
require 'http'
require 'twitter/arguments'
require 'twitter/client'
require 'twitter/streaming/connection'
require 'twitter/streaming/proxy'
require 'twitter/streaming/request'
require 'twitter/streaming/response'

module Twitter
Expand All @@ -13,63 +12,28 @@ class Client < Twitter::Client
def initialize(options={}, &block)
super
@connection = Twitter::Streaming::Connection.new
@request_options = {
:auto_reconnect => true,
:content_type => 'application/x-www-form-urlencoded',
:headers => {},
:oauth => credentials,
:port => 443,
:ssl => true,
:timeout => 0,
:user_agent => user_agent,
}
end

def filter(*args, &block)
arguments = Twitter::Arguments.new(args)
request({
:method => 'POST',
:host => 'stream.twitter.com',
:path => '/1.1/statuses/filter.json',
:params => arguments.options,
}, &block)
request(:post, 'https://stream.twitter.com:443/1.1/statuses/filter.json', arguments.options, &block)
end

def firehose(options={}, &block)
request({
:method => 'GET',
:host => 'stream.twitter.com',
:path => '/1.1/statuses/firehose.json',
:params => options,
}, &block)
request(:get, 'https://stream.twitter.com:443/1.1/statuses/firehose.json', options, &block)
end

def sample(options={}, &block)
request({
:method => 'GET',
:host => 'stream.twitter.com',
:path => '/1.1/statuses/sample.json',
:params => options,
}, &block)
request(:get, 'https://stream.twitter.com:443/1.1/statuses/sample.json', options, &block)
end

def site(*args, &block)
arguments = Twitter::Arguments.new(args)
request({
:method => 'POST',
:host => 'sitestream.twitter.com',
:path => '/1.1/site.json',
:params => arguments.options.merge(:follow => arguments.join(',')),
}, &block)
request(:post, 'https://sitestream.twitter.com:443/1.1/site.json', arguments.options.merge(:follow => arguments.join(',')), &block)
end

def user(options={}, &block)
request({
:method => 'GET',
:host => 'userstream.twitter.com',
:path => '/1.1/user.json',
:params => options,
}, &block)
request(:get, 'https://userstream.twitter.com:443/1.1/user.json', options, &block)
end

# Set a Proc to be run when connection established.
Expand All @@ -84,16 +48,23 @@ def on_request(&block)
end
end

def request(options, &block)
def request(method, uri, params, &block)
on_request.call
# TODO: consider HTTP::Request
request = Twitter::Streaming::Request.new(@request_options.merge(options))
headers = default_headers.merge(:authorization => oauth_auth_header(method, uri, params).to_s)
request = HTTP::Request.new(method, uri, headers)
response = Twitter::Streaming::Response.new do |data|
yield(Tweet.new(data)) if data[:id]
end
@connection.stream(request, response)
end

def default_headers
@default_headers ||= {
:accept => 'application/json',
:user_agent => user_agent,
}
end

end
end
end
6 changes: 2 additions & 4 deletions lib/twitter/streaming/connection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,10 @@ class Connection
def stream(request, response)
client_context = OpenSSL::SSL::SSLContext.new
parser = Http::Parser.new(response)
client = TCPSocket.new(Resolv.getaddress(request.host), request.port)
client = TCPSocket.new(Resolv.getaddress(request.uri.host), request.uri.port)
ssl_client = OpenSSL::SSL::SSLSocket.new(client, client_context)
ssl_client.connect
# TODO: HTTP::Request#stream
ssl_client.write(request.to_s)

request.stream(ssl_client)
while body = ssl_client.readpartial(1024)
parser << body
end
Expand Down
25 changes: 0 additions & 25 deletions lib/twitter/streaming/proxy.rb

This file was deleted.

134 changes: 0 additions & 134 deletions lib/twitter/streaming/request.rb

This file was deleted.

1 change: 1 addition & 0 deletions twitter.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require 'twitter/version'
Gem::Specification.new do |spec|
spec.add_dependency 'buftok', '~> 0.1.0'
spec.add_dependency 'faraday', ['~> 0.8', '< 0.10']
spec.add_dependency 'http', '~> 0.4'
spec.add_dependency 'http_parser.rb', '~> 0.5'
spec.add_dependency 'simple_oauth', '~> 0.2'
spec.add_development_dependency 'bundler', '~> 1.0'
Expand Down

0 comments on commit 32fd733

Please sign in to comment.