From 9e963d5debfe3bb95a402204d6dae58f7f408e8a Mon Sep 17 00:00:00 2001 From: Tomas Halman Date: Mon, 22 Sep 2025 23:03:37 +0200 Subject: [PATCH] api: Use new download link It looks like the server is moving at least with some books somewhere else. This fix update improves the way the downloload information is handled. --- src/neknihy/api.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/neknihy/api.py b/src/neknihy/api.py index a3e7b3b..e5767c1 100644 --- a/src/neknihy/api.py +++ b/src/neknihy/api.py @@ -69,6 +69,20 @@ def getRentDownloadInfo(self, book): response.text) return json.loads(response.text) + def fileExtension(self, response): + ftype = response.headers["Content-Type"] + if "/epub" in ftype: + return ".epub" + if "/pdf" in ftype: + return ".pdf" + + fdisposition = response.headers["Content-Disposition"] + match = re.search('filename="[^"]+(\\.[^".]+)"', fdisposition) + if match: + return match.group(1).lower() + + return ".unknown" + def downloadBook(self, workdir, book): downloadInfo = self.getRentDownloadInfo(book) if not downloadInfo["status"]: @@ -76,14 +90,13 @@ def downloadBook(self, workdir, book): return info = downloadInfo["file"] params = urllib.parse.parse_qs(info.split('?', 1)[1]) - - url = params["url"][0] - ext = ".unknown" - match = re.search("\\.[^.]+$", url.split('?')[0]) - if match: - ext = match.group(0).lower() - filename = params["filename"][0] + ext - fullpath = os.path.join(workdir, filename) + basename = params["filename"][0] + if "url" in params and params["url"][0].lower().startswith("https://cdn.palmknihy.cz"): + # old way + url = params["url"][0] + else: + url = info + fullpath = os.path.join(workdir, basename + ".part") response = requests.get(url, stream=True) with open(fullpath, 'wb') as f: for chunk in response.iter_content(chunk_size=10240): @@ -91,5 +104,7 @@ def downloadBook(self, workdir, book): f.write(chunk) if response.status_code >= 300: raise RuntimeError("Nepodařilo se stáhnout knihu %s\n(%s)" % - (filename, response.text)) - book["neknihy"] = {"status": "ok", "filename": filename} + (basename, response.text)) + ext = self.fileExtension(response) + os.rename(fullpath, os.path.join(workdir, basename + ext)) + book["neknihy"] = {"status": "ok", "filename": basename + ext}