galerts 0.0.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: acad8b524b6c3f82060ad16e5734a1a36b84eac0
4
- data.tar.gz: 35faf06afbbf3c3980706d2fa05e47e8cdd2f42c
3
+ metadata.gz: e5cb0c39e02378baf953220a1a115b974de39d7b
4
+ data.tar.gz: a50d19fb9b533aa49cc893ad47177bc3a3748763
5
5
  SHA512:
6
- metadata.gz: f4b933dbe9f0f12691efd8e5cb3483f83d2e24adfe73f9d4eb5967a16686ff40ad80236555aad70d84f5166f99ba2c86faa322910dd93055ea5809209134c1b0
7
- data.tar.gz: ea40cffb5e1da121f9f43caeda72a41fd57e93b4e9e0c9c6497149da1c2f6af1b3f0fc2fc6edff75a7e34273239dec08828bd5d05bb63cfb1e39f9097a1cfa47
6
+ metadata.gz: 2fb5d10dde9537a902a3f673bdd53a8cbd29fb5c7928f8a56365d09c5ded9428e9c1e381e6d4c698b24b704dc9b499af4129ed59fb9703be0b3e01cf3f91b4ea
7
+ data.tar.gz: 6ae338a36a44410083d0259de4e14dccf718fa876f04d71eb5750fc17688d829cba79115194753403eb8ee618e5362b01dc5f0b45ca46655bf5e436c681e525c
data/README.md CHANGED
@@ -27,10 +27,11 @@ manager = Galerts::Manager.new('example@gmail.com', 'password')
27
27
 
28
28
  # List alerts
29
29
  alerts = manager.alerts
30
+ sample_alert = alerts.last
30
31
 
31
32
  # Create a new alert for on Google News Turkey in real time delivering alerts
32
33
  # via RSS
33
- manager.create("my keywords", {
34
+ new_alert = manager.create("my keywords", {
34
35
  :frequency => Galerts::RT,
35
36
  :domain => 'com.tr',
36
37
  :language => "tr",
@@ -41,19 +42,17 @@ manager.create("my keywords", {
41
42
  }
42
43
  )
43
44
 
44
- alert = manager.alerts.last
45
-
46
45
  # Update the query of this alert
47
- alert.query = "updated keyword"
48
- manager.update(alert)
46
+ sample_alert.query = "updated keyword"
47
+ manager.update(sample_alert)
49
48
 
50
49
  # Find examples
51
50
  manager.find_by_query("keyword")
52
51
  manager.find_by_delivery(Galerts::RSS)
53
52
  manager.find({query: "keyword", delivery: Galerts::RSS})
54
53
 
55
- # Delete an alert with alerts data_id
56
- manager.delete("alerts data_id")
54
+ # Delete an alert
55
+ manager.delete(sample_alert)
57
56
 
58
57
  ```
59
58
 
@@ -1,64 +1,7 @@
1
- module Galerts
2
- # URLs
3
- CREATE_ALERT_URL = 'https://www.google.com/alerts/create?'
4
- DELETE_ALERT_URL = 'https://www.google.com/alerts/delete?'
5
- MODIFY_ALERT_URL = 'https://www.google.com/alerts/modify?'
6
- GOOGLE_LOGIN_URL = 'https://accounts.google.com/ServiceLogin?'
7
- ALERTS_URL = 'https://www.google.com/alerts'
8
- LOGIN_URL = "#{GOOGLE_LOGIN_URL}service=alerts&continue=#{ALERTS_URL}"
9
-
10
- # Google Return HTML Definitions
11
- ALERT_EXIST = "[null,11,null,\"\"]"
12
- ALERT_SOMETHING_WENT_WRONG = "[null,7,null,\"\"]"
13
- ALERT_NOT_EXIST = "[null,5,null,\"\"]"
14
- # Google Value
15
- BEST_RESULTS = 'Only the best results'
16
- ALL_RESULTS = 'All results'
17
-
18
- HOW_MANY_TYPES = {
19
- ALL_RESULTS => 2,
20
- BEST_RESULTS => 3
21
- }
22
-
23
- RSS = 'rss'
24
- EMAIL = 'email'
25
-
26
- DELIVERY_TYPES = {
27
- EMAIL => 1,
28
- RSS => 2
29
- }
30
-
31
-
32
- RT = 'As it happens'
33
- DAILY = 'Once a day'
34
- WEEKLY = 'Once a week'
35
-
36
- FREQ_TYPES = {
37
- RT => 1,
38
- DAILY => 2,
39
- WEEKLY => 3
40
- }
41
-
42
-
43
- BLOGS = 'Blogs'
44
- NEWS = 'News'
45
- WEB = 'Web'
46
- VIDEOS = 'Videos'
47
- BOOKS = 'Books'
48
- DISCUSSIONS = 'Discussions'
49
-
50
- SOURCES_TYPES = {
51
- BLOGS => 1,
52
- NEWS => 2,
53
- WEB => 3,
54
- VIDEOS => 5,
55
- BOOKS => 6,
56
- DISCUSSIONS => 7
57
- }
58
- end
59
-
1
+ require File.expand_path('../galerts/defaults', __FILE__)
60
2
  require File.expand_path('../galerts/alert', __FILE__)
61
3
  require File.expand_path('../galerts/manager', __FILE__)
62
4
  require File.expand_path('../galerts/version', __FILE__)
63
5
 
64
-
6
+ module Galerts
7
+ end
@@ -6,12 +6,12 @@ module Galerts
6
6
  default_options = {
7
7
  id: 0,
8
8
  data_id: 0,
9
- domain: 'com',
9
+ domain: DOMAIN,
10
10
  frequency: RT,
11
- sources: '',
12
- language: 'tr',
11
+ sources: AUTOMATIC,
12
+ language: LANGUAGE,
13
13
  how_many: ALL_RESULTS,
14
- region: 'TR',
14
+ region: ANYWHERE,
15
15
  delivery: RSS,
16
16
  feed_url: nil
17
17
  }
@@ -0,0 +1,67 @@
1
+ module Galerts
2
+ # URLs
3
+ CREATE_ALERT_URL = 'https://www.google.com/alerts/create?'
4
+ DELETE_ALERT_URL = 'https://www.google.com/alerts/delete?'
5
+ MODIFY_ALERT_URL = 'https://www.google.com/alerts/modify?'
6
+ GOOGLE_LOGIN_URL = 'https://accounts.google.com/ServiceLogin?'
7
+ ALERTS_URL = 'https://www.google.com/alerts'
8
+ LOGIN_URL = "#{GOOGLE_LOGIN_URL}service=alerts&continue=#{ALERTS_URL}"
9
+
10
+ # Google Return HTML Definitions
11
+ ALERT_EXIST = "[null,11,null,\"\"]"
12
+ ALERT_SOMETHING_WENT_WRONG = "[null,7,null,\"\"]"
13
+ ALERT_NOT_EXIST = "[null,5,null,\"\"]"
14
+ # Google Value
15
+ BEST_RESULTS = 'Only the best results'
16
+ ALL_RESULTS = 'All results'
17
+
18
+ HOW_MANY_TYPES = {
19
+ ALL_RESULTS => 2,
20
+ BEST_RESULTS => 3
21
+ }
22
+
23
+
24
+ RSS = 'rss'
25
+ EMAIL = 'email'
26
+
27
+ DELIVERY_TYPES = {
28
+ EMAIL => 1,
29
+ RSS => 2
30
+ }
31
+
32
+
33
+ RT = 'As it happens'
34
+ DAILY = 'Once a day'
35
+ WEEKLY = 'Once a week'
36
+
37
+ FREQ_TYPES = {
38
+ RT => 1,
39
+ DAILY => 2,
40
+ WEEKLY => 3
41
+ }
42
+
43
+
44
+ BLOGS = 'Blogs'
45
+ NEWS = 'News'
46
+ WEB = 'Web'
47
+ VIDEOS = 'Videos'
48
+ BOOKS = 'Books'
49
+ DISCUSSIONS = 'Discussions'
50
+
51
+ SOURCES_TYPES = {
52
+ BLOGS => 1,
53
+ NEWS => 2,
54
+ WEB => 3,
55
+ VIDEOS => 5,
56
+ BOOKS => 6,
57
+ DISCUSSIONS => 7
58
+ }
59
+
60
+
61
+ # Default alert value
62
+ DOMAIN = 'com'
63
+ AUTOMATIC = ''
64
+ LANGUAGE = 'en'
65
+ REGION = 'US'
66
+ ANYWHERE = 'anywhere'
67
+ end
@@ -60,7 +60,7 @@ module Galerts
60
60
  data_id: alert[1],
61
61
  domain: alert[2][3][2],
62
62
  language: alert[2][3][3][1],
63
- region: alert[2][3][3][2],
63
+ region: alert[2][3].last == 1 ? alert[2][3][3][2] : ANYWHERE,
64
64
  frequency: FREQ_TYPES.invert[alert[2][6][0][4]],
65
65
  sources: SOURCES_TYPES.invert[alert[2][4]],
66
66
  how_many: HOW_MANY_TYPES.invert[alert[2][5]],
@@ -71,18 +71,6 @@ module Galerts
71
71
  result
72
72
  end
73
73
 
74
- def find(attrs = {})
75
- alerts.select{|a| attrs.keys.inject(true) {|memo,k| memo = memo && attrs[k] == a.send(k) }}
76
- end
77
-
78
- # Metaprogramming for find_by commands
79
- variables = Galerts::Alert.new("").instance_variables.map {|m| m.to_s.delete('@')}
80
- variables.each do |variable|
81
- define_method("find_by_#{variable}") do |argument|
82
- find({variable.to_sym => argument})
83
- end
84
- end
85
-
86
74
  def build_params(alert, action)
87
75
  # set delivery and frequency parameters
88
76
  if alert.delivery == EMAIL
@@ -108,15 +96,28 @@ module Galerts
108
96
  sources_text = sources_text.chop + ']'
109
97
  end
110
98
 
99
+ if alert.region == ANYWHERE
100
+ region = REGION
101
+ anywhere = true
102
+ else
103
+ region = alert.region
104
+ anywhere = false
105
+ end
106
+
111
107
  # TODO: need more readable
112
108
  if action == 0 # create
113
109
  params = {
114
- 'params' => "[null,[null,null,null,[null,\"#{alert.query}\",\"#{alert.domain}\",[null,\"#{alert.language}\",\"#{alert.region}\"],null,null,null,#{alert.region == "" ? 1 : 0},1],#{sources_text},#{HOW_MANY_TYPES[alert.how_many]},[[null,#{delivery_and_frequency},\"#{alert.language + '-' + alert.region.upcase}\",null,null,null,null,null,'0']]]]"
110
+ 'params' => "[null,[null,null,null,[null,\"#{alert.query}\",\"#{alert.domain}\",[null,\"#{alert.language}\",\"#{region}\"],null,null,null,#{anywhere ? 0 : 1},1],#{sources_text},#{HOW_MANY_TYPES[alert.how_many]},[[null,#{delivery_and_frequency},\"#{alert.language + '-' + region.upcase}\",null,null,null,null,null,'0']]]]"
115
111
  }
116
112
  return URI.encode_www_form(params)
117
113
  elsif action == 1 # edit
118
114
  params = {
119
- 'params' => "[null,\"#{alert.data_id}\",[null,null,null,[null,\"#{alert.query}\",\"#{alert.domain}\",[null,\"#{alert.language}\",\"#{alert.region}\"],null,null,null,#{alert.region == "" ? 1 : 0},1],#{sources_text},#{HOW_MANY_TYPES[alert.how_many]},[[null,#{delivery_and_frequency},\"#{alert.language + '-' + alert.region.upcase}\",null,null,null,null,null,\"#{alert.id}\"]]]]"
115
+ 'params' => "[null,\"#{alert.data_id}\",[null,null,null,[null,\"#{alert.query}\",\"#{alert.domain}\",[null,\"#{alert.language}\",\"#{region}\"],null,null,null,#{anywhere ? 1 : 0},1],#{sources_text},#{HOW_MANY_TYPES[alert.how_many]},[[null,#{delivery_and_frequency},\"#{alert.language + '-' + region.upcase}\",null,null,null,null,null,\"#{alert.id}\"]]]]"
116
+ }
117
+ return URI.encode_www_form(params)
118
+ elsif action == 2 # delete
119
+ params = {
120
+ 'params' => "[null,\"#{alert.data_id}\"]"
120
121
  }
121
122
  return URI.encode_www_form(params)
122
123
  end
@@ -166,23 +167,28 @@ module Galerts
166
167
  end
167
168
  end
168
169
 
169
- def build_delete_params(data_id)
170
- params = {
171
- 'params' => "[null,\"#{data_id}\"]"
172
- }
173
- params = URI.encode_www_form(params)
174
- end
175
-
176
- def delete(data_id)
170
+ def delete(alert)
177
171
  x = alerts_page.css('div#gb-main div.main-page script').text.split(',').last[1..-4]
178
- response = @agent.post("#{DELETE_ALERT_URL}x=#{x}", build_delete_params(data_id), {'Content-Type' => 'application/x-www-form-urlencoded'})
172
+ response = @agent.post("#{DELETE_ALERT_URL}x=#{x}", build_params(alert, 2), {'Content-Type' => 'application/x-www-form-urlencoded'})
179
173
 
180
174
  if response.body == ALERT_NOT_EXIST
181
175
  raise "Alert not exist!"
182
176
  elsif response.body == ALERT_SOMETHING_WENT_WRONG
183
177
  raise "Something went wrong!" # internal error, html changed maybe
184
178
  end
179
+ true
180
+ end
181
+
182
+ def find(attrs = {})
183
+ alerts.select{|a| attrs.keys.inject(true) {|memo,k| memo = memo && attrs[k] == a.send(k) }}
185
184
  end
186
185
 
186
+ # Metaprogramming for find_by commands
187
+ variables = Galerts::Alert.new("").instance_variables.map {|m| m.to_s.delete('@')}
188
+ variables.each do |variable|
189
+ define_method("find_by_#{variable}") do |argument|
190
+ find({variable.to_sym => argument})
191
+ end
192
+ end
187
193
  end
188
194
  end
@@ -1,3 +1,3 @@
1
1
  module Galerts
2
- VERSION = '0.0.5'.freeze unless defined?(::Galerts::VERSION)
2
+ VERSION = '1.0.0'.freeze unless defined?(::Galerts::VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: galerts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emre Can Yılmaz
@@ -37,6 +37,7 @@ files:
37
37
  - galerts.gemspec
38
38
  - lib/galerts.rb
39
39
  - lib/galerts/alert.rb
40
+ - lib/galerts/defaults.rb
40
41
  - lib/galerts/manager.rb
41
42
  - lib/galerts/version.rb
42
43
  homepage: https://github.com/pivotus/galerts