airly-client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1e77d91f6aea92ad07f54d29100bef9c1551ca4b067011d0df318b0079c1eb22
4
+ data.tar.gz: e6f204f4a04fd461e37c8bdfbf19561d0508f31d66a72ec474bf1e9b974ea83f
5
+ SHA512:
6
+ metadata.gz: 89f18b4a71cee866878661f173da4ca9453a34018b74a901c7fa6e025fba9ab5ab50bcf4c6aa11eac785b3c924bebf46ff541b88e7e2faa19820e24d01007071
7
+ data.tar.gz: 71ac3c7cfc11622905de62a069f8b265c9d3bd6cb478b5b0200bcdd223692831fc41e88d361188fd8117fb40b0b4614d81e6bfbc0c6be342f718b4f58ee0bf6f
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ gem 'httparty', '~> 0.17.1'
@@ -0,0 +1,19 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ httparty (0.17.1)
5
+ mime-types (~> 3.0)
6
+ multi_xml (>= 0.5.2)
7
+ mime-types (3.3)
8
+ mime-types-data (~> 3.2015)
9
+ mime-types-data (3.2019.0904)
10
+ multi_xml (0.6.0)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ httparty (~> 0.17.1)
17
+
18
+ BUNDLED WITH
19
+ 1.17.2
@@ -0,0 +1,12 @@
1
+ # AirlyClient
2
+
3
+ AirlyClient is a ruby client for [airly.eu](https://airly.eu/) API.
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ AirlyClient.set_api_key(key) # Setup API key
9
+ AirlyClient.nearest_installation(latitude, longtitude, max_distance_km: distance, max_results: results) # Find nearest installations
10
+ AirlyClient.installation(id) # Get installation data by id
11
+ AirlyClient.measurements(installation_id) # Get measurements for station
12
+ ```
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'airly-client'
3
+ s.version = '0.0.1'
4
+ s.date = '2019-10-08'
5
+ s.summary = "Client for airly.eu api"
6
+ s.description = "Simple client for fetching information from airly.eu"
7
+ s.authors = ["kuskoman"]
8
+ s.email = 'kubasurdej@gmail.com'
9
+ s.files = `git ls-files -z`.split("\x0")
10
+ s.require_paths = ["lib"]
11
+ s.homepage =
12
+ 'https://github.com/kuskoman/airly-client'
13
+ s.license = 'MIT'
14
+
15
+ s.add_dependency 'httparty', '~> 0.17.1'
16
+ end
@@ -0,0 +1,53 @@
1
+ require_relative 'api/client'
2
+ require_relative 'api/entity'
3
+ require_relative 'api/installation'
4
+ require_relative 'api/measurements'
5
+
6
+ require 'httparty'
7
+ require 'uri'
8
+
9
+ module AirlyClient
10
+ class << self
11
+ def api
12
+ @client ||= ApiClient.new
13
+ end
14
+
15
+ def set_api_key(api_key)
16
+ api.api_key = api_key
17
+ end
18
+
19
+ def nearest_installation(latitude, longtitude, max_distance_km: 5, max_results: 1)
20
+ res = api.make_request("installations/nearest",
21
+ {
22
+ "lat" => latitude,
23
+ "lng" => longtitude,
24
+ "maxDistanceKM" => max_distance_km,
25
+ "maxResults" => max_results
26
+ })
27
+
28
+ installations = []
29
+
30
+ res.each do |raw|
31
+ installations << Installation.new(raw)
32
+ end
33
+
34
+ installations
35
+ end
36
+
37
+ def installation(id)
38
+ res = api.make_request("installations/#{id}")
39
+
40
+ Installation.new(res)
41
+ end
42
+
43
+ def measurements(installation_id, index_type = 'AIRLY_CAQI')
44
+ res = api.make_request("measurements/installation",
45
+ {
46
+ "installationId" => installation_id,
47
+ "indexType" => index_type
48
+ })
49
+
50
+ Measurements.new(res)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,27 @@
1
+ module AirlyClient
2
+ class Address < Entity
3
+ def country
4
+ @raw['country']
5
+ end
6
+
7
+ def city
8
+ @raw['city']
9
+ end
10
+
11
+ def street
12
+ @raw['street']
13
+ end
14
+
15
+ def number
16
+ @raw['number']
17
+ end
18
+
19
+ def display_address1
20
+ @raw['displayAddress1']
21
+ end
22
+
23
+ def display_address2
24
+ @raw['displayAddress2']
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ module AirlyClient
2
+ class ApiClient
3
+ attr_writer :api_key
4
+ def initialize(api_key = nil, base_url = "https://airapi.airly.eu/v2/")
5
+ @api_key = api_key
6
+ @base_url = base_url
7
+ end
8
+
9
+ def make_request(resource, params = {})
10
+ res = fetch(resource, params)
11
+ JSON.parse(res.body)
12
+ end
13
+
14
+ private
15
+
16
+ def fetch(resource, params)
17
+ HTTParty.get(
18
+ @base_url + resource + stringify_params(params),
19
+ headers: headers
20
+ )
21
+ end
22
+
23
+ def headers
24
+ {
25
+ 'Accept' => 'application/json',
26
+ 'Accept-Language' => 'en',
27
+ 'apikey' => @api_key
28
+ }
29
+ end
30
+
31
+ def stringify_params(params)
32
+ if params.nil?
33
+ ""
34
+ else
35
+ "?" + URI.encode_www_form(params)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,6 @@
1
+ class Entity
2
+ attr_reader :raw
3
+ def initialize(raw)
4
+ @raw = raw
5
+ end
6
+ end
@@ -0,0 +1,31 @@
1
+ require_relative 'location'
2
+ require_relative 'address'
3
+ require_relative 'sponsor'
4
+
5
+ module AirlyClient
6
+ class Installation < Entity
7
+ def id
8
+ @raw['id']
9
+ end
10
+
11
+ def location
12
+ @location ||= Location.new(@raw['location'])
13
+ end
14
+
15
+ def elevation
16
+ @raw['elevation']
17
+ end
18
+
19
+ def address
20
+ @address ||= Address.new(@raw['address'])
21
+ end
22
+
23
+ def airly
24
+ @raw['airly']
25
+ end
26
+
27
+ def sponsor
28
+ @sponsor ||= Sponsor.new(@raw['sponsor'])
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ module AirlyClient
2
+ class Location < Entity
3
+ def latitude
4
+ @raw['latitude']
5
+ end
6
+
7
+ def longtitude
8
+ @raw['longtitude']
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,29 @@
1
+ require_relative 'single_measurement'
2
+
3
+ module AirlyClient
4
+ class Measurements < Entity
5
+ def current
6
+ @current ||= SingleMeasurement.new(@raw['current'])
7
+ end
8
+
9
+ def history
10
+ @history ||= parse_array_of_measurements(@raw['history'])
11
+ end
12
+
13
+ def forecast
14
+ @forecast ||= parse_array_of_measurements(@raw['forecast'])
15
+ end
16
+
17
+ private
18
+
19
+ def parse_array_of_measurements(array)
20
+ parsed = []
21
+
22
+ array.each do |measurement|
23
+ parsed << SingleMeasurement.new(measurement)
24
+ end
25
+
26
+ parsed
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,50 @@
1
+ module AirlyClient
2
+ class SingleMeasurement < Entity
3
+ def initialize(raw)
4
+ super
5
+ parse_values
6
+ end
7
+
8
+ def from_date_time
9
+ @raw['fromDateTime']
10
+ end
11
+
12
+ def till_date_time
13
+ @raw['tillDatetime']
14
+ end
15
+
16
+ def pm1
17
+ @values['PM1']
18
+ end
19
+
20
+ def pm10
21
+ @values['PM10']
22
+ end
23
+
24
+ def pm25
25
+ @values['PM25']
26
+ end
27
+
28
+ def pressure
29
+ @values['PRESSURE']
30
+ end
31
+
32
+ def humidity
33
+ @values['HUMIDITY']
34
+ end
35
+
36
+ def temperature
37
+ @values['TEMPERATURE']
38
+ end
39
+
40
+ private
41
+
42
+ def parse_values
43
+ @values = {}
44
+ @raw['values'].each do |value|
45
+ name = value['name']
46
+ @values[name] = value['value']
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,23 @@
1
+ module AirlyClient
2
+ class Sponsor < Entity
3
+ def id
4
+ @raw['id']
5
+ end
6
+
7
+ def name
8
+ @raw['name']
9
+ end
10
+
11
+ def description
12
+ @raw['description']
13
+ end
14
+
15
+ def logo
16
+ @raw['logo']
17
+ end
18
+
19
+ def link
20
+ @raw['link']
21
+ end
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: airly-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - kuskoman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.17.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.17.1
27
+ description: Simple client for fetching information from airly.eu
28
+ email: kubasurdej@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - Gemfile
34
+ - Gemfile.lock
35
+ - README.md
36
+ - airly-client.gemspec
37
+ - lib/airly-client.rb
38
+ - lib/api/address.rb
39
+ - lib/api/client.rb
40
+ - lib/api/entity.rb
41
+ - lib/api/installation.rb
42
+ - lib/api/location.rb
43
+ - lib/api/measurements.rb
44
+ - lib/api/single_measurement.rb
45
+ - lib/api/sponsor.rb
46
+ homepage: https://github.com/kuskoman/airly-client
47
+ licenses:
48
+ - MIT
49
+ metadata: {}
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubygems_version: 3.0.3
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: Client for airly.eu api
69
+ test_files: []