83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
"""Google Reader/FreshRSS API code for Youtube2FreshRSS."""
|
|
|
|
import requests
|
|
|
|
|
|
class FreshRss:
|
|
"""FreshRSS greader API helper class."""
|
|
base_path = "/api/greader.php"
|
|
base_api_path = f"{base_path}/reader/api/0/"
|
|
|
|
def __init__(self, baseurl, username, password):
|
|
self.base_url = baseurl
|
|
self.username = username
|
|
self.password = password
|
|
self.auth_header = ""
|
|
|
|
def get_auth_token(self):
|
|
"Retrieve greader auth token"
|
|
res = requests.post(
|
|
f"{self.base_url}{self.base_path}/accounts/ClientLogin",
|
|
params={'Email': self.username, 'Passwd': self.password},
|
|
timeout=15
|
|
)
|
|
auth_token = res.text.split("=")[-1].strip()
|
|
self.auth_header = f"GoogleLogin auth={auth_token}"
|
|
|
|
def post(self, path, params=None, data=None):
|
|
"Make a POST request to a greader API."
|
|
res = requests.post(
|
|
f"{self.base_url}{self.base_api_path}{path}",
|
|
data=data,
|
|
params=params,
|
|
headers={"Authorization": self.auth_header},
|
|
timeout=15
|
|
)
|
|
return res.text
|
|
|
|
def get(self, path, params=None):
|
|
"""Make a GET request to a greader API."""
|
|
res = requests.get(
|
|
f"{self.base_url}{self.base_api_path}{path}?output=json",
|
|
params=params,
|
|
headers={"Authorization": self.auth_header},
|
|
timeout=15
|
|
)
|
|
return res.json()
|
|
|
|
def get_feeds(self):
|
|
"Retrieve greader subscriptions."
|
|
return self.get("/subscription/list")
|
|
|
|
def add_feed(self, title, feed_url):
|
|
"""Create greader feed."""
|
|
self.post(
|
|
"/subscription/edit",
|
|
data={
|
|
"ac": "subscribe",
|
|
"s": "feed/" + feed_url,
|
|
"t": title,
|
|
"a": "user/-/label/YouTube"
|
|
}
|
|
)
|
|
|
|
def remove_feed(self, feed_url):
|
|
"""Remove greader feed."""
|
|
self.post(
|
|
"/subscription/edit",
|
|
data={
|
|
"ac": "unsubscribe",
|
|
"s": "feed/" + feed_url,
|
|
}
|
|
)
|
|
|
|
def parse_feeds_urls(self, feeds):
|
|
"""Parse active feed URLs from feeds list."""
|
|
urls = []
|
|
|
|
for feed in feeds['subscriptions']:
|
|
if feed['categories'][0]['id'] == "user/-/label/YouTube":
|
|
urls.append(feed['url'])
|
|
|
|
return urls
|