From 21eb011f87223af513bb60427a1512627c9f9d90 Mon Sep 17 00:00:00 2001 From: Filla Reno Date: Thu, 30 Jun 2022 14:58:28 +0200 Subject: [PATCH 1/5] Update __init__.py --- thingspeak/__init__.py | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/thingspeak/__init__.py b/thingspeak/__init__.py index 40908c0..562c796 100644 --- a/thingspeak/__init__.py +++ b/thingspeak/__init__.py @@ -9,13 +9,17 @@ class Channel(object): def __init__( self, id, - api_key=None, + user_api_key=None, + read_api_key=None, + write_api_key=None, fmt="json", timeout=None, server_url="https://api.thingspeak.com", ): self.id = id - self.api_key = api_key + self.user_api_key = user_api_key + self.read_api_key = read_api_key + self.write_api_key = write_api_key self.fmt = ("." + fmt) if fmt in ["json", "xml"] else "" self.timeout = timeout self.server_url = server_url @@ -28,8 +32,8 @@ def get(self, options=None): """ if options is None: options = dict() - if self.api_key is not None: - options["api_key"] = self.api_key + if self.read_api_key is not None: + options["api_key"] = self.read_api_key url = "{server_url}/channels/{id}/feeds{fmt}".format( server_url=self.server_url, id=self.id, fmt=self.fmt ) @@ -44,8 +48,8 @@ def get_field(self, field=None, options=None): """ if options is None: options = dict() - if self.api_key is not None: - options["api_key"] = self.api_key + if self.read_api_key is not None: + options["api_key"] = self.read_api_key url = "{server_url}/channels/{id}/fields/{field}{fmt}".format( server_url=self.server_url, id=self.id, field=field, fmt=self.fmt ) @@ -60,8 +64,8 @@ def get_field_last(self, field=None, options=None): """ if options is None: options = dict() - if self.api_key is not None: - options["api_key"] = self.api_key + if self.read_api_key is not None: + options["api_key"] = self.read_api_key url = "{server_url}/channels/{id}/fields/{field}/last{fmt}".format( server_url=self.server_url, id=self.id, field=field, fmt=self.fmt ) @@ -76,8 +80,8 @@ def get_last_data_age(self, field=None, options=None): """ if options is None: options = dict() - if self.api_key is not None: - options["api_key"] = self.api_key + if self.read_api_key is not None: + options["api_key"] = self.read_api_key url = "{server_url}/channels/{id}/fields/{field}/last_data_age{fmt}" url = url.format( server_url=self.server_url, id=self.id, field=field, fmt=self.fmt @@ -92,8 +96,8 @@ def view(self): `_ """ options = dict() - if self.api_key is not None: - options["api_key"] = self.api_key + if self.user_key is not None: + options["api_key"] = self.user_api_key url = "{server_url}/channels/{id}{fmt}".format( server_url=self.server_url, id=self.id, fmt=self.fmt ) @@ -106,10 +110,10 @@ def update(self, data): `update-channel-feed `_ """ - if self.api_key is not None: - data["api_key"] = self.api_key + if self.write_api_key is not None: + data["api_key"] = self.write_api_key else: - raise ValueError("Missing api_key") + raise ValueError("Missing write api_key") url = "{server_url}/update{fmt}".format( server_url=self.server_url, id=self.id, fmt=self.fmt ) From 3ce3826629d71555407ca14233c5b10feafa7c29 Mon Sep 17 00:00:00 2001 From: Filla Reno Date: Thu, 30 Jun 2022 15:05:44 +0200 Subject: [PATCH 2/5] Update __init__.py --- thingspeak/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thingspeak/__init__.py b/thingspeak/__init__.py index 562c796..42b94d3 100644 --- a/thingspeak/__init__.py +++ b/thingspeak/__init__.py @@ -96,7 +96,7 @@ def view(self): `_ """ options = dict() - if self.user_key is not None: + if self.user_api_key is not None: options["api_key"] = self.user_api_key url = "{server_url}/channels/{id}{fmt}".format( server_url=self.server_url, id=self.id, fmt=self.fmt From 6a8d211b386db115478f364285bdc3fb30bcff6d Mon Sep 17 00:00:00 2001 From: Filla Reno Date: Thu, 30 Jun 2022 21:35:30 +0200 Subject: [PATCH 3/5] Update __init__.py --- thingspeak/__init__.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/thingspeak/__init__.py b/thingspeak/__init__.py index 42b94d3..28c8388 100644 --- a/thingspeak/__init__.py +++ b/thingspeak/__init__.py @@ -40,6 +40,22 @@ def get(self, options=None): r = requests.get(url, params=options, timeout=self.timeout) return self._fmt(r) + def get_last(self, options=None): + """Get a last entry in channel feed. + + `get-a-channel-feed + `_ + """ + if options is None: + options = dict() + if self.read_api_key is not None: + options["api_key"] = self.read_api_key + url = "{server_url}/channels/{id}/feeds/last{fmt}".format( + server_url=self.server_url, id=self.id, fmt=self.fmt + ) + r = requests.get(url, params=options, timeout=self.timeout) + return self._fmt(r) + def get_field(self, field=None, options=None): """Get particular field From 62be29705a992bf173c4a1342b5640c0c18b4f0b Mon Sep 17 00:00:00 2001 From: Filla Reno Date: Thu, 30 Jun 2022 21:52:13 +0200 Subject: [PATCH 4/5] Update __init__.py --- thingspeak/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thingspeak/__init__.py b/thingspeak/__init__.py index 28c8388..2d1e919 100644 --- a/thingspeak/__init__.py +++ b/thingspeak/__init__.py @@ -109,7 +109,7 @@ def view(self): """View a Channel `view-a-channel - `_ + `_ """ options = dict() if self.user_api_key is not None: From 6e8a59bf86bd50c5b5ec440aa5f4bbdb389923c1 Mon Sep 17 00:00:00 2001 From: Filla Reno Date: Mon, 4 Jul 2022 09:13:19 +0200 Subject: [PATCH 5/5] added get_api_keys() --- thingspeak/__init__.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/thingspeak/__init__.py b/thingspeak/__init__.py index 2d1e919..04d59f4 100644 --- a/thingspeak/__init__.py +++ b/thingspeak/__init__.py @@ -120,6 +120,28 @@ def view(self): r = requests.get(url, params=options, timeout=self.timeout) return self._fmt(r) + def get_api_keys(self): + """Get Read/Write API Keys a Channel + + `control-a-channel + `_ + """ + import json + v_json = self.view() + v = json.loads(v_json) + read_api_key = None + write_api_key = None + for k in v['api_keys']: + if k['write_flag']: + if write_api_key is None: + write_api_key = k['api_key'] + else: + if read_api_key is None: + read_api_key = k['api_key'] + setattr(self,'read_api_key', read_api_key) + setattr(self,'write_api_key', write_api_key) + return read_api_key, write_api_key + def update(self, data): """Update channel feed.