import httpx import Utils class Fetcher: def __init__(self, URL, token): self.URL = URL self.token = token self.headers = {"Authorization": "GoogleLogin auth="+token} self.articles = {} def refresh(self): self.getUnreadCounts() self.getSubscriptions() def getUnreadCounts(self): response = httpx.get(self.URL+"/reader/api/0/unread-count?output=json", headers=self.headers) result = dict([(item["id"], (item["count"], item["newestItemTimestampUsec"], Utils.timestampToDate( item["newestItemTimestampUsec"]))) for item in response.json()["unreadcounts"]]) self.unreadCounts = result def getSubscriptions(self): response = httpx.get(self.URL+"/reader/api/0/subscription/list?output=json", headers=self.headers) self.feeds = response.json()["subscriptions"] def checkCategory(self, category): return category in self.articles.keys() def feedsFromCategory(self, category): return sorted([item for item in self.feeds if item["categories"][0]["id"] == category and self.unreadCounts[item["id"]][0] != 0], key=lambda item: self.unreadCounts[item["id"]][2], reverse=True) def articlesFromCategory(self, category, number): if category not in self.articles: response = httpx.get(self.URL+"/reader/api/0/stream/contents?n="+number+"&s="+category, headers=self.headers) return response.json()["items"] # self.articles[category] = response.json()["items"] async def articlesFromCategoryAsync(self, category, number): if category not in self.articles: response = await httpx.AsyncClient().get(self.URL+"/reader/api/0/stream/contents?n="+number + "&s="+category, headers=self.headers) self.articles[category] = response.json()["items"] def articlesFromFeed(self, feed, category): try: return [article for article in self.articles[category] if article["origin"]["streamId"] == feed] except BaseException: return None def fetch(self): for category in self.categories: yield "Fetching category " + category["name"] self.articlesFromCategory(category["id"], str(self.unreadCounts[category["id"]][0]))