xstreamly 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/xstreamly.rb +119 -48
  2. metadata +3 -3
data/lib/xstreamly.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'json' #gem install json
2
- require 'net/https' unless defined?(Net::HTTPS)
3
- require 'net/http' unless defined?(Net::HTTP)
2
+ require 'base64'
3
+ require 'cgi'
4
+ require 'openssl'
5
+ require 'net/https'
6
+ require 'net/http'
4
7
 
5
8
  module XStreamly
6
9
  class Client
@@ -8,7 +11,7 @@ module XStreamly
8
11
  @appKey = appKey
9
12
  @email = email
10
13
  @password = password
11
- @http = Net::HTTP.new('x-stream.ly', 80)
14
+ @http = Net::HTTP.new('secure.x-stream.ly', 443)
12
15
  @http.use_ssl = true
13
16
 
14
17
  end
@@ -19,57 +22,125 @@ module XStreamly
19
22
 
20
23
  req.body = data
21
24
  response = @http.request(req)
22
- case response.code.to_i
23
- when 202
24
- return true
25
- else
26
- raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
27
- end
28
- end
25
+ case response.code.to_i
26
+ when 202
27
+ return true
28
+ else
29
+ raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
30
+ end
31
+ end
29
32
 
30
- def setCallback(channel,endPoint,secret,eventName)
31
- req = Net::HTTP::Post.new(URI.encode('/api/v1.0/'+@appKey+'/subscriptions'), initheader = {'Content-Type' =>'application/json'})
32
- req.basic_auth @email, @password
33
+ def setCallback(channel,endPoint,secret,eventName)
34
+ req = Net::HTTP::Post.new(URI.encode('/api/v1.1/'+@appKey+'/feeds/out/custom'), initheader = {'Content-Type' =>'application/json'})
35
+ req.basic_auth @email, @password
33
36
 
34
- req.body = '{"channel":"'+channel+'","endpoint":"'+endPoint+'", "secret":"'+secret+'"}'
35
- response = @http.request(req)
36
- case response.code.to_i
37
- when 200
38
- return true
39
- else
40
- raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
41
- end
37
+ req.body = '{"channel":"'+channel+'","endpoint":"'+endPoint+'", "secret":"'+secret+'"}'
38
+ response = @http.request(req)
39
+
40
+ case response.code.to_i
41
+ when 200
42
+ return true
43
+ else
44
+ raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
45
+ end
46
+ end
42
47
 
43
- end
48
+ def removeCallback(index)
49
+ req = Net::HTTP::Delete.new(URI.encode('/api/v1.1/'+@appKey+'/feeds/out/custom/'+index.to_s), initheader = {'Content-Type' =>'application/json'})
50
+ req.basic_auth @email, @password
51
+ response = @http.request(req)
52
+
53
+ case response.code.to_i
54
+ when 202
55
+ return true
56
+ else
57
+ raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
58
+ end
59
+ end
44
60
 
45
- def removeCallback(index)
46
- req = Net::HTTP::Delete.new(URI.encode('/api/v1.0/'+@appKey+'/subscriptions'+index.to_s), initheader = {'Content-Type' =>'application/json'})
47
- req.basic_auth @email, @password
48
- response = @http.request(req)
49
-
50
- case response.code.to_i
51
- when 202
52
- return true
53
- else
54
- raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
55
- end
56
- end
61
+ def getCallbacks()
62
+ req = Net::HTTP::Get.new(URI.encode('/api/v1.1/'+@appKey+'/feeds/out/custom'), initheader = {'Content-Type' =>'application/json'})
63
+ req.basic_auth @email, @password
64
+ response = @http.request(req)
65
+
66
+ case response.code.to_i
67
+ when 200
68
+ return (JSON(response.body))['items']
69
+ else
70
+ raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
71
+ end
72
+ end
73
+
74
+ def setTwitterStream(channel,event,requestData)
75
+ req = Net::HTTP::Post.new(URI.encode('/api/v1.1/'+@appKey+'/feeds/in/twitter'), initheader = {'Content-Type' =>'application/json'})
76
+ req.basic_auth @email, @password
77
+
78
+ req.body = '{"channel":"'+channel+'","event":"'+event+'", "requestData":"'+requestData+'"}'
79
+ response = @http.request(req)
80
+
81
+ case response.code.to_i
82
+ when 202
83
+ return true
84
+ else
85
+ raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
86
+ end
87
+ end
88
+
89
+ def generateRequestData(trackParameter,consumerKey,consumerSecret,accessToken,accessTokenSecret)
90
+ #generate a random nonce
91
+ nonce =(0...10).map{65.+(rand(25)).chr}.join
92
+ timestamp = (Time.now.to_i).to_s
93
+ track = CGI.escape(trackParameter)
94
+
95
+ base = "POST&https%3A%2F%2Fstream.twitter.com%2F1%2Fstatuses%2Ffilter.json&" +
96
+ "oauth_consumer_key%3D" + consumerKey +
97
+ "%26oauth_nonce%3D"+nonce +
98
+ "%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D" + timestamp +
99
+ "%26oauth_token%3D" + accessToken +
100
+ "%26oauth_version%3D1.0"+
101
+ "%26track%3D" +track
57
102
 
58
- def getCallbacks()
59
- req = Net::HTTP::Get.new(URI.encode('/api/v1.0/'+@appKey+'/subscriptions'), initheader = {'Content-Type' =>'application/json'})
60
- req.basic_auth @email, @password
61
- response = @http.request(req)
62
-
63
- case response.code.to_i
64
- when 200
65
- return JSON(response.body)
66
- else
67
- raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
68
- end
69
- end
103
+ key = consumerSecret +'&'+CGI.escape(accessTokenSecret);
104
+
105
+ digest = OpenSSL::Digest::Digest.new('sha1')
106
+ signature=CGI.escape(Base64.encode64(OpenSSL::HMAC.digest(digest,key,base)).strip)
107
+
108
+ requestData = "oauth_signature=" + signature +
109
+ "&oauth_token=" + accessToken +
110
+ "&track=" + track +
111
+ "&oauth_consumer_key=" + consumerKey +
112
+ "&oauth_signature_method=HMAC-SHA1&oauth_version=1.0" +
113
+ "&oauth_nonce=" + nonce +
114
+ "&oauth_timestamp=" + timestamp
115
+
116
+ return requestData
117
+ end
70
118
 
71
- def setLocalCallback(channel,eventName)
119
+ def removeTwitterStream(index)
120
+ req = Net::HTTP::Delete.new(URI.encode('/api/v1.1/'+@appKey+'/feeds/in/twitter/'+index.to_s), initheader = {'Content-Type' =>'application/json'})
121
+ req.basic_auth @email, @password
122
+ response = @http.request(req)
123
+
124
+ case response.code.to_i
125
+ when 202
126
+ return true
127
+ else
128
+ raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
129
+ end
130
+ end
72
131
 
73
- end
132
+ def getTwitterStreams()
133
+ req = Net::HTTP::Get.new(URI.encode('/api/v1.1/'+@appKey+'/feeds/in/twitter'), initheader = {'Content-Type' =>'application/json'})
134
+ req.basic_auth @email, @password
135
+ response = @http.request(req)
136
+
137
+ case response.code.to_i
138
+ when 200
139
+ return (JSON(response.body))['items']
140
+ else
141
+ raise RuntimeError, "Unknown error (status code #{response.code} ): #{response.body}"
142
+ end
74
143
  end
144
+
145
+ end
75
146
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xstreamly
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 1
10
- version: 0.6.1
9
+ - 2
10
+ version: 0.6.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brian Willard