"""Pocket API code for FreshRSS2Pocket.""" import requests import os.path class Pocket: """Pocket API helper class.""" base_api_path = "https://getpocket.com/v3" request_token = "" access_token = "" def __init__(self, consumer_key): self.consumer_key = consumer_key if not self.access_token_stored(): self.get_request_token() self.authenticate_app() self.get_access_tocken() else: self.read_access_token() def post_request(self, path, json): res = requests.post( f"{self.base_api_path}/{path}", headers={"X-Accept": "application/json"}, json=json, timeout=15 ) if res.status_code >= 400: raise ValueError("Response status codes indicates and error!") return res.json() def get_request_token(self): """Request a request token.""" json = { "consumer_key": self.consumer_key, "redirect_uri": "http://localhost" } data = self.post_request( "oauth/request", json ) self.request_token = data['code'] def authenticate_app(self): print("Paste the following URL in your browser to authorize freshrss2pocket") print(f"https://getpocket.com/auth/authorize?request_token={self.request_token}&redirect_uri=http%3A%2F%2Flocalhost") input("Press Enter if done...") def get_access_tocken(self): json = { "consumer_key": self.consumer_key, "code": self.request_token } data = self.post_request( "oauth/authorize", json ) self.access_token = data['access_token'] self.write_access_token() def access_token_stored(self): return os.path.isfile(".pocket_access_token") def read_access_token(self): with open(".pocket_access_token", "r") as token_file: self.access_token = token_file.read().strip() def write_access_token(self): with open(".pocket_access_token", "w") as token_file: token_file.write(self.access_token) def add(self, url, title="", tags=""): """Add URL to Pocket's save list.""" json = { "consumer_key": self.consumer_key, "access_token": self.access_token, "url": url } if title: json['title'] = title if tags: json['tags'] = tags self.post_request( "add", json=json )