plausible_api 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +41 -5
- data/lib/plausible_api/api/client.rb +15 -5
- data/lib/plausible_api/api/realtime/visitors.rb +5 -2
- data/lib/plausible_api/api/stats/aggregate.rb +13 -7
- data/lib/plausible_api/api/stats/timeseries.rb +15 -2
- data/lib/plausible_api/version.rb +1 -1
- data/plausible_api.gemspec +3 -2
- metadata +8 -9
- data/lib/plausible_api/request.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8be1224dad0283128a3e21c2d4e53061845ddc2424e2a89655eb4a129925cb4d
|
4
|
+
data.tar.gz: b665e6e0dea74c2fe9e1f1309a418cbfe2a5f9be55a4ac0f14845ba6a207fc70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 645bd976b0dc10c743232daa6752bee9bb5d9e29ee96235ac0d6efa541ffa1d3fe8e3518e510701de377dd3621e44a4c9b0c54cb99a7b50ffe8b85879036ce8c
|
7
|
+
data.tar.gz: 312e92ef37577f2e58e7ffabf72320bc8c9fc431c651779f0ccd2d264d0aa144e08a10ac8a4c71375ceaed5a17d0814b7d36e8d4446cbcc41278d7b775f3d43b
|
data/README.md
CHANGED
@@ -4,13 +4,50 @@ It's based on the WIP [API guide](https://plausible.io/docs/stats-api)
|
|
4
4
|
|
5
5
|
## Usage
|
6
6
|
Add this gem to your Gemfile:
|
7
|
-
```
|
7
|
+
```rb
|
8
8
|
gem 'plausible_api'
|
9
9
|
```
|
10
|
-
Then you need to initialize a Client
|
11
|
-
```
|
10
|
+
Then you need to initialize a Client with your `site_id` (the domain) and your `token`.
|
11
|
+
```rb
|
12
12
|
c = PlausibleApi::Client.new(site_id: 'dailytics.com', token: '123123')
|
13
|
-
|
13
|
+
```
|
14
|
+
|
15
|
+
### Stats > Aggregate
|
16
|
+
|
17
|
+
You have all these options to get the aggregate stats
|
18
|
+
```rb
|
19
|
+
# Use the default parameters (3mo period + the 4 main metrics)
|
20
|
+
c.aggregate
|
21
|
+
|
22
|
+
# Set parameters (period, metrics, filter, date)
|
23
|
+
c.aggregate({ period: '3d' })
|
24
|
+
c.aggregate({ period: '3d', metrics: 'visitors,pageviews' })
|
25
|
+
c.aggregate({ period: '3d', metrics: 'visitors,pageviews', filter: 'event:page==/order/confirmation' })
|
26
|
+
|
27
|
+
# You'll get something like this:
|
28
|
+
=> {"bounce_rate"=>{"value"=>81.0}, "pageviews"=>{"value"=>29}, "visit_duration"=>{"value"=>247.0}, "visitors"=>{"value"=>14}}
|
29
|
+
```
|
30
|
+
|
31
|
+
### Stats > Timeseries
|
32
|
+
|
33
|
+
You have all these options to get the timeseries
|
34
|
+
```rb
|
35
|
+
# Use the default parameters (3mo period)
|
36
|
+
c.timeseries
|
37
|
+
|
38
|
+
# Set parameters (period, metrics, filter, date)
|
39
|
+
c.timeseries({ period: '3d' })
|
40
|
+
c.timeseries({ period: '3d', filter: 'event:page==/order/confirmation', date: '2020/02/10' })
|
41
|
+
|
42
|
+
# You'll get something like this:
|
43
|
+
=> [{"date"=>"2021-01-11", "value"=>100}, {"date"=>"2021-01-12", "value"=>120}, {"date"=>"2021-01-13", "value"=>80}]
|
44
|
+
```
|
45
|
+
|
46
|
+
### Realtime >> Visitors
|
47
|
+
|
48
|
+
You have a uniq way to call this data
|
49
|
+
```rb
|
50
|
+
c.realtime_visitors
|
14
51
|
```
|
15
52
|
|
16
53
|
## Development
|
@@ -24,5 +61,4 @@ irb(main) > c.aggregate(period: '1w', metrics: 'visitors,pageviews,bounce_rate,v
|
|
24
61
|
```
|
25
62
|
|
26
63
|
## Todo
|
27
|
-
- Add support for other endpoints
|
28
64
|
- Tests
|
@@ -14,16 +14,26 @@ module PlausibleApi
|
|
14
14
|
|
15
15
|
def initialize(site_id:, token:)
|
16
16
|
@site_id = site_id.to_s
|
17
|
-
@token = token
|
17
|
+
@token = token.to_s
|
18
18
|
end
|
19
19
|
|
20
|
-
def aggregate(
|
21
|
-
call PlausibleApi::Stats::Aggregate.new(
|
20
|
+
def aggregate(options = {})
|
21
|
+
call PlausibleApi::Stats::Aggregate.new(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
def timeseries(options = {})
|
25
|
+
call PlausibleApi::Stats::Timeseries.new(options)
|
26
|
+
end
|
27
|
+
|
28
|
+
def realtime_visitors
|
29
|
+
call PlausibleApi::Realtime::Visitors.new
|
22
30
|
end
|
23
31
|
|
24
32
|
private
|
25
|
-
def call(
|
26
|
-
|
33
|
+
def call(api)
|
34
|
+
url = "#{BASE_URL}#{api.request_url.gsub('$SITE_ID', @site_id)}"
|
35
|
+
puts url
|
36
|
+
res = Faraday.get(url) do |req|
|
27
37
|
req.headers['Authorization'] = "Bearer #{@token}"
|
28
38
|
end
|
29
39
|
JSON.parse res.body
|
@@ -1,18 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'plausible_api/request'
|
4
|
-
|
5
3
|
module PlausibleApi
|
6
4
|
module Stats
|
7
5
|
class Aggregate
|
8
|
-
|
9
|
-
|
10
|
-
@
|
11
|
-
@
|
6
|
+
def initialize(options = {})
|
7
|
+
@period = options[:period] || '3mo'
|
8
|
+
@metrics = options[:metrics] || 'visitors,pageviews,bounce_rate,visit_duration'
|
9
|
+
@filter = options[:filter]
|
10
|
+
@date = options[:date]
|
12
11
|
end
|
13
12
|
|
14
13
|
def request_url
|
15
|
-
"api/v1/stats/aggregate?site_id=$SITE_ID&period=#{@period}&metrics=#{@metrics}"
|
14
|
+
url = "/api/v1/stats/aggregate?site_id=$SITE_ID&period=#{@period}&metrics=#{@metrics}"
|
15
|
+
if @filter
|
16
|
+
url += "&filter=#{CGI.escape(@filter)}"
|
17
|
+
end
|
18
|
+
if @date
|
19
|
+
url += "&date=#{@date}"
|
20
|
+
end
|
21
|
+
url
|
16
22
|
end
|
17
23
|
end
|
18
24
|
end
|
@@ -1,11 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'plausible_api/request'
|
4
|
-
|
5
3
|
module PlausibleApi
|
6
4
|
module Stats
|
7
5
|
class Timeseries
|
6
|
+
def initialize(options = {})
|
7
|
+
@period = options[:period] || '3mo'
|
8
|
+
@filter = options[:filter]
|
9
|
+
@date = options[:date]
|
10
|
+
end
|
8
11
|
|
12
|
+
def request_url
|
13
|
+
url = "/api/v1/stats/timeseries?site_id=$SITE_ID&period=#{@period}"
|
14
|
+
if @filter
|
15
|
+
url += "&filter=#{CGI.escape(@filter)}"
|
16
|
+
end
|
17
|
+
if @date
|
18
|
+
url += "&date=#{@date}"
|
19
|
+
end
|
20
|
+
url
|
21
|
+
end
|
9
22
|
end
|
10
23
|
end
|
11
24
|
end
|
data/plausible_api.gemspec
CHANGED
@@ -12,10 +12,11 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.description = 'A very humble wrapper for the new API by Plausible'
|
13
13
|
s.authors = ['Gustavo Garcia']
|
14
14
|
s.email = 'gustavo@dailytics.com'
|
15
|
-
s.homepage = 'https://
|
15
|
+
s.homepage = 'https://github.com/dailytics/plausible-api'
|
16
16
|
s.license = 'MIT'
|
17
17
|
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
|
18
18
|
s.require_paths = ['lib']
|
19
19
|
|
20
|
-
s.add_dependency 'faraday'
|
20
|
+
s.add_dependency 'faraday', '~> 1.0'
|
21
|
+
s.required_ruby_version = '>= 2.4'
|
21
22
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plausible_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gustavo Garcia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '1.0'
|
27
27
|
description: A very humble wrapper for the new API by Plausible
|
28
28
|
email: gustavo@dailytics.com
|
29
29
|
executables: []
|
@@ -37,10 +37,9 @@ files:
|
|
37
37
|
- lib/plausible_api/api/realtime/visitors.rb
|
38
38
|
- lib/plausible_api/api/stats/aggregate.rb
|
39
39
|
- lib/plausible_api/api/stats/timeseries.rb
|
40
|
-
- lib/plausible_api/request.rb
|
41
40
|
- lib/plausible_api/version.rb
|
42
41
|
- plausible_api.gemspec
|
43
|
-
homepage: https://
|
42
|
+
homepage: https://github.com/dailytics/plausible-api
|
44
43
|
licenses:
|
45
44
|
- MIT
|
46
45
|
metadata: {}
|
@@ -52,7 +51,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
52
51
|
requirements:
|
53
52
|
- - ">="
|
54
53
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
54
|
+
version: '2.4'
|
56
55
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
56
|
requirements:
|
58
57
|
- - ">="
|