paypal-report 0.1.0 → 0.1.1
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.
- data/README.md +3 -3
- data/VERSION +1 -1
- data/bin/paypal-report +55 -0
- data/lib/paypal/report.rb +35 -3
- data/paypal-report.gemspec +7 -7
- metadata +5 -7
- data/bin/paypal-report-daily +0 -30
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# PayPal Report
|
2
2
|
|
3
3
|
A little lightweight wrapper for [Paypal's Report API](https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_Reporting_Guide.pdf).
|
4
|
-
All three major API methods `run_report_request`, `get_meta_data_request` and `get_data_request` are exposed. On top of that, higher methods provide extra functionality. For now, this
|
4
|
+
All three major API methods `run_report_request`, `get_meta_data_request` and `get_data_request` are exposed. On top of that, higher methods provide extra functionality. For now, this _daily_, _monthly_ and _summery_ reports.
|
5
5
|
|
6
6
|
|
7
7
|
## Usage
|
@@ -13,7 +13,7 @@ Example usage, receiving all report from today:
|
|
13
13
|
|
14
14
|
As an example, the gem provides a small command line tool to easily get today's earnings. Usage:
|
15
15
|
|
16
|
-
paypal-report
|
16
|
+
paypal-report daily -a <partner> -v <vendor> -u <user> -p <password>
|
17
17
|
|
18
18
|
|
19
19
|
## Todo
|
@@ -21,7 +21,7 @@ Gem is in an early stage, so lots of stuff to do:
|
|
21
21
|
|
22
22
|
- introduce more higher level functions (e.g. period)
|
23
23
|
- add tests
|
24
|
-
- add examples
|
24
|
+
- add more examples
|
25
25
|
|
26
26
|
|
27
27
|
## Contributing
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/bin/paypal-report
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'optparse'
|
5
|
+
require 'paypal/report'
|
6
|
+
|
7
|
+
partner = vendor = user = password = nil
|
8
|
+
time = Date.today.prev_day.strftime("%Y-%m-%d")
|
9
|
+
|
10
|
+
prev_month = Date.today.prev_month
|
11
|
+
start_date = Date.parse("#{prev_month.year}-#{prev_month.month}-01")
|
12
|
+
next_month = start_date.next_month.prev_day
|
13
|
+
end_date = Date.parse("#{prev_month.year}-#{prev_month.month}-#{next_month.day}")
|
14
|
+
|
15
|
+
start_date = start_date.strftime("%Y-%m-%d 00:00:00")
|
16
|
+
end_date = end_date.strftime("%Y-%m-%d 23:59:59")
|
17
|
+
|
18
|
+
opts = ARGV.options do |opts|
|
19
|
+
opts.on("-p", "--password=PASSWORD", "Password - required!") { |p| password = p}
|
20
|
+
opts.on("-u", "--user=USER", "User - default: #{user}") { |u| user = u}
|
21
|
+
opts.on("-v", "--vendor=VENDOR", "Vendor - default: #{vendor}") { |v| vendor = v}
|
22
|
+
opts.on("-a", "--partner=PARTNER", "Partner - default: #{partner}") { |a| partner = a}
|
23
|
+
|
24
|
+
opts.on("-d", "--date=DATE", "Date - default: #{time}") { |t| time = t}
|
25
|
+
|
26
|
+
opts.on("-f", "--start_date=DATE", "Date - default: #{start_date}") { |t| start_date = t}
|
27
|
+
opts.on("-t", "--end_date=DATE", "Date - default: #{end_date}") { |t| end_date = t}
|
28
|
+
|
29
|
+
opts.on_tail("-h", "--help", "Show this help message.") { $stderr.puts opts; exit }
|
30
|
+
end
|
31
|
+
opts.parse!
|
32
|
+
|
33
|
+
abort "No password given: \n #{opts}" unless password
|
34
|
+
|
35
|
+
api = Paypal::Report.new(user, password, vendor, partner)
|
36
|
+
|
37
|
+
if ARGV.include?('daily')
|
38
|
+
amount = 0
|
39
|
+
report = api.daily(time, 5000)
|
40
|
+
report.each do |row|
|
41
|
+
amount += row[6].to_i
|
42
|
+
end
|
43
|
+
|
44
|
+
puts "Report for #{time}: #{report.size} Entries - #{amount / 100.0} EUR"
|
45
|
+
end
|
46
|
+
|
47
|
+
if ARGV.include?('monthly')
|
48
|
+
amount = 0
|
49
|
+
report = api.monthly(start_date, end_date, 5000)
|
50
|
+
report.each do |row|
|
51
|
+
amount += row[6].to_i
|
52
|
+
end
|
53
|
+
|
54
|
+
puts "Report for #{start_date} - #{end_date}: #{report.size} Entries - #{amount / 100.0} EUR"
|
55
|
+
end
|
data/lib/paypal/report.rb
CHANGED
@@ -2,6 +2,7 @@ require 'net/https'
|
|
2
2
|
require 'uri'
|
3
3
|
require 'builder'
|
4
4
|
require 'rexml/document'
|
5
|
+
require 'date'
|
5
6
|
|
6
7
|
module Paypal
|
7
8
|
class Report
|
@@ -10,9 +11,9 @@ module Paypal
|
|
10
11
|
def initialize(user, password, vendor, partner = 'PayPalUK')
|
11
12
|
@user, @password, @vendor, @partner = user, password, vendor, partner
|
12
13
|
end
|
13
|
-
|
14
|
+
|
14
15
|
#high level functions
|
15
|
-
def daily(time =
|
16
|
+
def daily(time = Date.today, page_size = 50)
|
16
17
|
time = time.strftime("%Y-%m-%d") unless time.is_a?(String)
|
17
18
|
report_id = run_report_request('DailyActivityReport', {'report_date' => time}, page_size)
|
18
19
|
|
@@ -24,7 +25,38 @@ module Paypal
|
|
24
25
|
end
|
25
26
|
data
|
26
27
|
end
|
27
|
-
|
28
|
+
|
29
|
+
def monthly(start_date, end_date = Date.today, page_size = 50)
|
30
|
+
start_date = Date.parse(start_date) if start_date.is_a?(String)
|
31
|
+
start_date = start_date.to_date if start_date.is_a?(Time)
|
32
|
+
|
33
|
+
end_date = Date.parse(end_date) if end_date.is_a?(String)
|
34
|
+
end_date = end_date.to_date if end_date.is_a?(Time)
|
35
|
+
|
36
|
+
data = []
|
37
|
+
while(start_date <= end_date)
|
38
|
+
puts start_date.strftime("%Y-%m-%d")
|
39
|
+
data += daily(start_date, page_size)
|
40
|
+
start_date = start_date.next_day
|
41
|
+
end
|
42
|
+
data
|
43
|
+
end
|
44
|
+
|
45
|
+
def transaction_summary(start_date, end_date = Time.now, page_size = 50)
|
46
|
+
start_date = start_date.strftime("%Y-%m-%d 00:00:00") unless start_date.is_a?(String)
|
47
|
+
end_date = end_date.strftime("%Y-%m-%d 23:59:59") unless end_date.is_a?(String)
|
48
|
+
report_id = run_report_request('TransactionSummaryReport', {'start_date' => start_date, 'end_date' => end_date}, page_size)
|
49
|
+
|
50
|
+
meta_data = get_meta_data_request(report_id)
|
51
|
+
|
52
|
+
data = []
|
53
|
+
meta_data["numberOfPages"].to_i.times do |page_num|
|
54
|
+
data += get_data_request(report_id, page_num + 1) #it's zero indexed
|
55
|
+
end
|
56
|
+
data
|
57
|
+
end
|
58
|
+
|
59
|
+
|
28
60
|
#low level functions
|
29
61
|
def run_report_request(report_name, report_params = {}, page_size = 50)
|
30
62
|
response = request 'runReportRequest' do |xml|
|
data/paypal-report.gemspec
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
|
-
s.name
|
6
|
-
s.version
|
7
|
-
s.platform
|
8
|
-
s.authors
|
9
|
-
s.email
|
10
|
-
s.homepage
|
11
|
-
s.summary
|
5
|
+
s.name = "paypal-report"
|
6
|
+
s.version = File.read("VERSION").to_s
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["SoundCloud", "Tobias Bielohlawek"]
|
9
|
+
s.email = %q{tobi@soundcloud.com}
|
10
|
+
s.homepage = "http://github.com/rngtng/paypal-report"
|
11
|
+
s.summary = %q{A little lightweight wrapper for Paypal's Report API.}
|
12
12
|
|
13
13
|
s.files = `git ls-files`.split("\n")
|
14
14
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: paypal-report
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- SoundCloud
|
@@ -11,8 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-05-
|
15
|
-
default_executable:
|
14
|
+
date: 2011-05-30 00:00:00 Z
|
16
15
|
dependencies:
|
17
16
|
- !ruby/object:Gem::Dependency
|
18
17
|
name: builder
|
@@ -28,7 +27,7 @@ dependencies:
|
|
28
27
|
description:
|
29
28
|
email: tobi@soundcloud.com
|
30
29
|
executables:
|
31
|
-
- paypal-report
|
30
|
+
- paypal-report
|
32
31
|
extensions: []
|
33
32
|
|
34
33
|
extra_rdoc_files: []
|
@@ -41,11 +40,10 @@ files:
|
|
41
40
|
- README.md
|
42
41
|
- Rakefile
|
43
42
|
- VERSION
|
44
|
-
- bin/paypal-report
|
43
|
+
- bin/paypal-report
|
45
44
|
- lib/paypal.rb
|
46
45
|
- lib/paypal/report.rb
|
47
46
|
- paypal-report.gemspec
|
48
|
-
has_rdoc: true
|
49
47
|
homepage: http://github.com/rngtng/paypal-report
|
50
48
|
licenses: []
|
51
49
|
|
@@ -69,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
67
|
requirements: []
|
70
68
|
|
71
69
|
rubyforge_project:
|
72
|
-
rubygems_version: 1.
|
70
|
+
rubygems_version: 1.8.4
|
73
71
|
signing_key:
|
74
72
|
specification_version: 3
|
75
73
|
summary: A little lightweight wrapper for Paypal's Report API.
|
data/bin/paypal-report-daily
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'optparse'
|
4
|
-
require 'paypal/report'
|
5
|
-
|
6
|
-
partner = vendor = user = password = nil
|
7
|
-
time = (Time.now - 60*60*24).strftime("%Y-%m-%d")
|
8
|
-
|
9
|
-
opts = ARGV.clone.options do |opts|
|
10
|
-
opts.on("-p", "--password=PASSWORD", "Password - required!") { |p| password = p}
|
11
|
-
opts.on("-d", "--date=DATE", "Date - default: #{time}") { |t| time = t}
|
12
|
-
opts.on("-u", "--user=USER", "User - default: #{user}") { |u| user = u}
|
13
|
-
opts.on("-v", "--vendor=VENDOR", "Vendor - default: #{vendor}") { |v| vendor = v}
|
14
|
-
opts.on("-a", "--partner=PARTNER", "Partner - default: #{partner}") { |a| partner = a}
|
15
|
-
|
16
|
-
opts.on_tail("-h", "--help", "Show this help message.") { $stderr.puts opts; exit }
|
17
|
-
end
|
18
|
-
opts.parse!
|
19
|
-
|
20
|
-
abort "No password given: \n #{opts}" unless password
|
21
|
-
|
22
|
-
api = Paypal::Report.new(user, password, vendor, partner)
|
23
|
-
|
24
|
-
amount = 0
|
25
|
-
report = api.daily(time, 5000)
|
26
|
-
report.each do |row|
|
27
|
-
amount += row[6].to_i
|
28
|
-
end
|
29
|
-
|
30
|
-
puts "Report for #{time}: #{report.size} Entries - #{amount / 100.0} EUR"
|