xstreamly 0.6.1 → 0.6.2

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.
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