plausible_api 0.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b58fa3210ca9873840e437b5a892002428841db0f3f5783ebe17d908e21c4796
4
+ data.tar.gz: a08c015aaae05008413710e4cc7d367f15fa37385ef5db4d751d072c56255637
5
+ SHA512:
6
+ metadata.gz: c794f02c31e7bedfd56b461bfc0a66ec8a106583fd71eca4ce2a8c71abce521d69088b93a73b012f8ad6201211b02462778b76d6c876d1084431214d6da1afdd
7
+ data.tar.gz: 27efd9f3d37cd91c2952800690b5bc5a998f38fc7ef4c40652f56b6c6d843468ef016896f8af945e0a2b11c33d8ed789e8f0f7b99a65a6fff52a8fda7d19a919
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Plausible API (Work In Progress)
2
+ This is a simple wrapper to read the Plausible API with Ruby.
3
+ It's based on the WIP [API guide](https://plausible.io/docs/stats-api)
4
+
5
+ ## Usage
6
+ Add this gem to your Gemfile:
7
+ ```
8
+ gem 'plausible_api'
9
+ ```
10
+ Then you need to initialize a Client and then call one of the available stats:
11
+ ```
12
+ c = PlausibleApi::Client.new(site_id: 'dailytics.com', token: '123123')
13
+ c.aggregate(period: '1w', metrics: 'visitors,pageviews,bounce_rate,visit_duration')
14
+ ```
15
+
16
+ ## Development
17
+ ```
18
+ $ gem build plausible_api.gemspec
19
+ $ gem install ./plausible_api-X.X.X.gem
20
+ $ irb
21
+ irb(main) > require 'plausible_api'
22
+ irb(main) > c = PlausibleApi::Client.new(site_id: 'dailytics.com', token: '123123')
23
+ irb(main) > c.aggregate(period: '1w', metrics: 'visitors,pageviews,bounce_rate,visit_duration')
24
+ ```
25
+
26
+ ## Todo
27
+ - Add support for other endpoints
28
+ - Tests
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'plausible_api/api/client'
4
+
5
+ module PlausibleApi
6
+ class << self
7
+ attr_writer :logger
8
+
9
+ def logger
10
+ @logger ||= Logger.new($stdout).tap { |log| log.progname = self.name }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'plausible_api/api/realtime/visitors'
4
+ require 'plausible_api/api/stats/aggregate'
5
+ require 'plausible_api/api/stats/timeseries'
6
+
7
+ require 'faraday'
8
+ require 'json'
9
+
10
+ module PlausibleApi
11
+ class Client
12
+
13
+ BASE_URL = 'https://plausible.io'
14
+
15
+ def initialize(site_id:, token:)
16
+ @site_id = site_id.to_s
17
+ @token = token
18
+ end
19
+
20
+ def aggregate(period:, metrics:)
21
+ call PlausibleApi::Stats::Aggregate.new(period: period, metrics: metrics)
22
+ end
23
+
24
+ private
25
+ def call(resource)
26
+ res = Faraday.get("#{BASE_URL}/#{resource.request_url.gsub('$SITE_ID', @site_id)}") do |req|
27
+ req.headers['Authorization'] = "Bearer #{@token}"
28
+ end
29
+ JSON.parse res.body
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'plausible_api/request'
4
+
5
+ module PlausibleApi
6
+ module Realtime
7
+ class Visitors
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'plausible_api/request'
4
+
5
+ module PlausibleApi
6
+ module Stats
7
+ class Aggregate
8
+
9
+ def initialize(period: nil, metrics: nil)
10
+ @period = period || '3m'
11
+ @metrics = metrics || 'visitors,pageviews,bounce_rate,visit_duration'
12
+ end
13
+
14
+ def request_url
15
+ "api/v1/stats/aggregate?site_id=$SITE_ID&period=#{@period}&metrics=#{@metrics}"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'plausible_api/request'
4
+
5
+ module PlausibleApi
6
+ module Stats
7
+ class Timeseries
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ module PlausibleApi
2
+ class Request
3
+
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module PlausibleApi
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'plausible_api/version'
7
+
8
+ Gem::Specification.new do |s|
9
+ s.name = 'plausible_api'
10
+ s.version = PlausibleApi::VERSION
11
+ s.summary = 'A simple Plausible API wrapper for Rails'
12
+ s.description = 'A very humble wrapper for the new API by Plausible'
13
+ s.authors = ['Gustavo Garcia']
14
+ s.email = 'gustavo@dailytics.com'
15
+ s.homepage = 'https://rubygems.org/gems/plausible_api'
16
+ s.license = 'MIT'
17
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
18
+ s.require_paths = ['lib']
19
+
20
+ s.add_dependency 'faraday'
21
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: plausible_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gustavo Garcia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: A very humble wrapper for the new API by Plausible
28
+ email: gustavo@dailytics.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".gitignore"
34
+ - README.md
35
+ - lib/plausible_api.rb
36
+ - lib/plausible_api/api/client.rb
37
+ - lib/plausible_api/api/realtime/visitors.rb
38
+ - lib/plausible_api/api/stats/aggregate.rb
39
+ - lib/plausible_api/api/stats/timeseries.rb
40
+ - lib/plausible_api/request.rb
41
+ - lib/plausible_api/version.rb
42
+ - plausible_api.gemspec
43
+ homepage: https://rubygems.org/gems/plausible_api
44
+ licenses:
45
+ - MIT
46
+ metadata: {}
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubygems_version: 3.1.4
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: A simple Plausible API wrapper for Rails
66
+ test_files: []