snoo 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4a7fdd5cd9346d80ab767c7a08d21e7ec372de5f
4
+ data.tar.gz: 181e6c309afb527984f3bd19f155a1fb2bb78047
5
+ SHA512:
6
+ metadata.gz: c46e3b5386c49361bad02ffe8f5cabd851841cd007fc52eba5770b95440ce86cf7d8290c135a5a0b8c2c01ac0276a46071179f29902ea63738a7c0947b13c32b
7
+ data.tar.gz: 3344ac3c1db1ddfe24e8cb206d48031d456ef83a63587d4570b9926dc00a432fcaefd95291cfea1d04fc856a23b1ec0b8b96c764bc5c757983f956c685a61957
data/.gitignore CHANGED
@@ -1,19 +1,20 @@
1
+ tmp
2
+ spec/reports
3
+ coverage
4
+
1
5
  *.gem
6
+ InstalledFiles
2
7
  *.rbc
3
- .bundle
4
8
  .config
9
+ rdoc
10
+ snoo.sublime-project
11
+ test/version_tmp
12
+ lib/bundler/man
13
+ .bundle
14
+ snoo.sublime-workspace
15
+ doc/
16
+ .DS_Store
5
17
  .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
18
  _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
19
  test/tmp
16
- test/version_tmp
17
- tmp
18
-
19
- .DS_Store
20
+ pkg
@@ -0,0 +1,32 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ snoo (0.0.4)
5
+ httparty
6
+ nokogiri
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ diff-lcs (1.1.3)
12
+ httparty (0.8.3)
13
+ multi_json (~> 1.0)
14
+ multi_xml
15
+ multi_json (1.3.6)
16
+ multi_xml (0.5.1)
17
+ nokogiri (1.5.5)
18
+ rspec (2.11.0)
19
+ rspec-core (~> 2.11.0)
20
+ rspec-expectations (~> 2.11.0)
21
+ rspec-mocks (~> 2.11.0)
22
+ rspec-core (2.11.0)
23
+ rspec-expectations (2.11.1)
24
+ diff-lcs (~> 1.1.3)
25
+ rspec-mocks (2.11.0)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ rspec
32
+ snoo!
data/README.md CHANGED
@@ -53,6 +53,17 @@ See the [docs](http://rubydoc.info/github/paradox460/snoo/) for more info.
53
53
  4. Push to the branch (`git push origin my-new-feature`)
54
54
  5. Create new Pull Request
55
55
 
56
+ ## Feed me!
57
+ Any and all donations are graciously accepted:
58
+
59
+ + [![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=Paradox460&url=https://github.com/paradox460/snoo&title=Snoo&language=&tags=github&category=software)
60
+ + [Gittip](https://www.gittip.com/paradox460/)
61
+ + Paypal: send to paradox460@gmail.com
62
+
63
+ I also would love it if you could endorse this on Coderwall: [![endorse](http://api.coderwall.com/paradox/endorsecount.png)](http://coderwall.com/paradox)
64
+
65
+ Thanks!
66
+
56
67
  ## License
57
68
 
58
69
  ```
@@ -0,0 +1,7 @@
1
+ # A sample Gemfile
2
+ source "https://rubygems.org"
3
+
4
+ gem 'snoo', '>=0.1.1'
5
+ gem 'highline'
6
+
7
+ # gem "rails"
@@ -0,0 +1,45 @@
1
+ # Requirements
2
+ + You must be running a 1.9x or newer version of ruby. I do not support 1.8 or older.
3
+ + You must use bundler. `bundle install` for the various dependencies
4
+ + You must be comfortable editing code, but if you can follow comments, you can use this script
5
+
6
+ # Running the script
7
+ 1. Edit modreport.rb to fill in the required information
8
+ + **Username:** Self-explanatory
9
+ + **Password:** Self-explanatory
10
+ + **Subreddit:** the subreddit, without the `/r/`. IAMA would be `IAMA`. Case does not matter
11
+ + **Start Date:** The beginning (oldest) of when you want to parse. Uses ruby `Date.parse`, so any supported syntax works, but I recommend `December 1, 2012 0:00 UTC` style syntax
12
+ + **End Date:** The end (newest) of when you want to parse. Uses ruby `Date.parse`, so any supported syntax works, but I recommend `December 1, 2012 0:00 UTC` style syntax
13
+ + **CSV Prefix:** The prefix for the CSV files you want to generate. I usually name mine something like `subreddit-month`
14
+ 2. Run `ruby modreport.rb`
15
+ 3. Watch the response for errors
16
+ + [Open an issue on the tracker if you find one](https://github.com/paradox460/snoo/issues)
17
+ 4. Open the CSV files in excel or your spreadsheet of choice and do what you will with them
18
+
19
+ # License
20
+ This is licensed under the same terms as the Snoo script, the MIT License:
21
+
22
+ ```
23
+ Copyright (c) 2012 Jeff Sandberg
24
+
25
+ MIT License
26
+
27
+ Permission is hereby granted, free of charge, to any person obtaining
28
+ a copy of this software and associated documentation files (the
29
+ "Software"), to deal in the Software without restriction, including
30
+ without limitation the rights to use, copy, modify, merge, publish,
31
+ distribute, sublicense, and/or sell copies of the Software, and to
32
+ permit persons to whom the Software is furnished to do so, subject to
33
+ the following conditions:
34
+
35
+ The above copyright notice and this permission notice shall be
36
+ included in all copies or substantial portions of the Software.
37
+
38
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
39
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
40
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
41
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
42
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
43
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
44
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
45
+ ```
@@ -0,0 +1,134 @@
1
+ require 'snoo'
2
+ require 'csv'
3
+ require 'set'
4
+ require 'highline/import'
5
+
6
+ reddit = Snoo::Client.new
7
+
8
+ # CONFIG BLOCK
9
+
10
+ username = ask("Username: ")
11
+ password = ask("Password: ") { |c| c.echo = '*' ; c.readline = true}
12
+
13
+ subreddit = ask("Subreddit: ")
14
+
15
+ start_date = ask("Start Date: ")
16
+ end_date = ask("End Date: ")
17
+
18
+ csv_prefix = ask("CSV Prefix: ")
19
+
20
+
21
+ reddit.log_in username, password
22
+
23
+ modlog = reddit.get_modlog(subreddit)
24
+ data, last = modlog[:data], modlog[:last]
25
+ while (data[-1][:time] > Time.parse(start_date) ) do
26
+ begin
27
+ modlog = reddit.get_modlog(subreddit, after: last)
28
+ last = modlog[:last]
29
+ data.concat modlog[:data]
30
+ puts "Got #{data[-1][:time]}"
31
+ sleep 2
32
+ rescue
33
+ puts "Error in modlog. subreddit: #{subreddit} last: #{last} modlog #{modlog}"
34
+ end
35
+ end
36
+
37
+ data.delete_if do |i|
38
+ (i[:time] > Time.parse(end_date)) or (i[:time] < Time.parse(start_date)) or (i[:author] == 'RoboMod')
39
+ end
40
+
41
+ modlist = {}
42
+ data.each do |i|
43
+ modlist[i[:author]] ||= Hash.new(0)
44
+ modlist[i[:author]][i[:action]] += 1
45
+ end
46
+
47
+ CSV.open("#{csv_prefix}.csv", "wb") do |csv|
48
+ csv << ["Mod", "Remove", "Approve", "Remove Comment", "Approve Comment", "NSFW", "Edit Flair", "Edit Settings", "Distingusih", "Ban", "Unban", "Add Mod", "Remove Mod", "Add Contrib.", "Remove Contrib."]
49
+ modlist.each do |k, v|
50
+ csv << [
51
+ k,
52
+ v["removelink"],
53
+ v["approvelink"],
54
+ v["removecomment"],
55
+ v["approvecomment"],
56
+ v["marknsfw"],
57
+ v["editflair"],
58
+ v["editsettings"],
59
+ v["distinguish"],
60
+ v["banuser"],
61
+ v["unbanuser"],
62
+ v["addmoderator"],
63
+ v["removemoderator"],
64
+ v["addcontributor"],
65
+ v["removecontributor"]
66
+ ]
67
+ end
68
+ end
69
+ puts "Saved #{csv_prefix}.csv with modlog table"
70
+
71
+ modtime = {}
72
+ data.each do |m|
73
+ modtime[Date.parse(m[:time].utc.strftime('%Y-%m-%d'))] ||= Hash.new(0)
74
+ modtime[Date.parse(m[:time].utc.strftime('%Y-%m-%d'))][m[:action]] += 1
75
+ end
76
+
77
+ CSV.open("#{csv_prefix}_time.csv", "wb") do |csv|
78
+ csv << ["Date", "Remove", "Approve", "Remove Comment", "Approve Comment", "NSFW", "Edit Flair", "Edit Settings", "Distingusih", "Ban", "Unban", "Add Mod", "Remove Mod", "Add Contrib.", "Remove Contrib."]
79
+ modtime.each do |k, v|
80
+ csv << [
81
+ k.strftime('%Y-%m-%d'),
82
+ v["removelink"],
83
+ v["approvelink"],
84
+ v["removecomment"],
85
+ v["approvecomment"],
86
+ v["marknsfw"],
87
+ v["editflair"],
88
+ v["editsettings"],
89
+ v["distinguish"],
90
+ v["banuser"],
91
+ v["unbanuser"],
92
+ v["addmoderator"],
93
+ v["removemoderator"],
94
+ v["addcontributor"],
95
+ v["removecontributor"]
96
+ ]
97
+ end
98
+ end
99
+ puts "Saved #{csv_prefix}_time.csv with time-series data"
100
+
101
+
102
+ # Moderator activity per day
103
+ authors = Set.new
104
+ data.each do |i|
105
+ authors << i[:author]
106
+ end
107
+
108
+ authorhash = {}
109
+ authors.to_a.each do |i|
110
+ authorhash[i] = 0
111
+ end
112
+
113
+ modactivity = {}
114
+ data.each do |m|
115
+ modactivity[Date.parse(m[:time].utc.strftime('%Y-%m-%d'))] ||= authorhash.dup
116
+ modactivity[Date.parse(m[:time].utc.strftime('%Y-%m-%d'))][m[:author]] += 1
117
+ end
118
+
119
+ header = ["Date"]
120
+ header += authors.to_a
121
+
122
+ CSV.open("#{csv_prefix}_actions_over_time.csv", "wb") do |csv|
123
+ csv << header
124
+ modactivity.each do |k, v|
125
+ line = []
126
+ line << k.strftime('%Y-%m-%d')
127
+ v.each do |name, amount|
128
+ line << amount
129
+ end
130
+ csv << line
131
+ end
132
+ end
133
+
134
+ puts "Saved #{csv_prefix}_actions_over_time.csv with actions-over-time data"
@@ -0,0 +1,20 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ highline (1.6.14)
5
+ httparty (0.8.3)
6
+ multi_json (~> 1.0)
7
+ multi_xml
8
+ multi_json (1.3.6)
9
+ multi_xml (0.5.1)
10
+ nokogiri (1.5.5)
11
+ snoo (0.0.6)
12
+ httparty
13
+ nokogiri
14
+
15
+ PLATFORMS
16
+ ruby
17
+
18
+ DEPENDENCIES
19
+ highline
20
+ snoo
@@ -146,6 +146,7 @@ else
146
146
  end
147
147
  end
148
148
  editor_name = ENV['EDITOR']
149
+ raise "Unknown Editor" unless editor_name
149
150
  system "#{editor_name} #{blocking_flag_for_editor(true, editor_name)} #{start_line_syntax_for_editor(editor_name, modmessage_path, 4)}"
150
151
 
151
152
  message['message'] = File.read(modmessage_path)
@@ -35,7 +35,7 @@ module Snoo
35
35
  # Logs out of a reddit account. This is usually uneeded, you can just log_in as a new account to replace the current one.
36
36
  # This just nils the cookies and modhash
37
37
  def log_out
38
- set_cookies nil
38
+ set_cookies ""
39
39
  @modhash = nil
40
40
  @userid = nil
41
41
  @username = nil
@@ -124,6 +124,15 @@ module Snoo
124
124
  end
125
125
  alias_method :mark_sfw, :unmark_nsfw
126
126
 
127
+ # Un-save a thing
128
+ #
129
+ # @param (see #delete)
130
+ # @return (see #clear_sessions)
131
+ def unsave id
132
+ logged_in?
133
+ post('/api/unsave', body: {id: id, uh: @modhash, api_type: 'json'})
134
+ end
135
+
127
136
  # Vote on a comment or link
128
137
  #
129
138
  # @param direction [-1, 0, 1] The direction to vote in. -1 is a downvote, 1 is an upvote, 0 cancels any vote
@@ -1,4 +1,7 @@
1
1
  module Snoo
2
2
  # The version string (duh)
3
- VERSION = "0.1.1"
3
+ MAJOR = "0"
4
+ MINOR = "1"
5
+ PATCHLEVEL = "2"
6
+ VERSION = [MAJOR, MINOR, PATCHLEVEL].join(".")
4
7
  end
metadata CHANGED
@@ -1,62 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
4
+ version: 0.1.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jeff Sandberg
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-25 00:00:00.000000000 Z
11
+ date: 2013-07-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: httparty
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: nokogiri
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: Snoo is yet another reddit API wrapper. Unlike the other wrappers out
@@ -73,13 +66,18 @@ files:
73
66
  - .yardopts
74
67
  - CHANGELOG.md
75
68
  - Gemfile
69
+ - Gemfile.lock
76
70
  - LICENSE
77
71
  - README.md
78
72
  - Rakefile
79
73
  - examples/flairbot/README.md
80
74
  - examples/flairbot/config.yaml
81
75
  - examples/flairbot/flair.rb
76
+ - examples/modlog_report_generator/Gemfile
77
+ - examples/modlog_report_generator/README.md
78
+ - examples/modlog_report_generator/modreport.rb
82
79
  - examples/modmailer/Gemfile
80
+ - examples/modmailer/Gemfile.lock
83
81
  - examples/modmailer/modmail.rb
84
82
  - lib/snoo.rb
85
83
  - lib/snoo/account.rb
@@ -99,27 +97,26 @@ files:
99
97
  homepage: https://github.com/paradox460/snoo
100
98
  licenses:
101
99
  - MIT
100
+ metadata: {}
102
101
  post_install_message:
103
102
  rdoc_options: []
104
103
  require_paths:
105
104
  - lib
106
105
  required_ruby_version: !ruby/object:Gem::Requirement
107
- none: false
108
106
  requirements:
109
- - - ! '>='
107
+ - - '>='
110
108
  - !ruby/object:Gem::Version
111
109
  version: '1.9'
112
110
  required_rubygems_version: !ruby/object:Gem::Requirement
113
- none: false
114
111
  requirements:
115
- - - ! '>='
112
+ - - '>='
116
113
  - !ruby/object:Gem::Version
117
114
  version: '0'
118
115
  requirements: []
119
116
  rubyforge_project:
120
- rubygems_version: 1.8.23
117
+ rubygems_version: 2.0.3
121
118
  signing_key:
122
- specification_version: 3
119
+ specification_version: 4
123
120
  summary: A simple reddit api wrapper
124
121
  test_files:
125
122
  - spec/auth.rb