Ivan000 commited on
Commit
7ada18c
·
verified ·
1 Parent(s): e219f4f

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +12 -5
main.py CHANGED
@@ -58,13 +58,14 @@ def generate_root_feed():
58
  ns = "http://www.w3.org/2005/Atom"
59
  ET.register_namespace("", ns)
60
  feed = ET.Element("feed", xmlns=ns)
 
61
  ET.SubElement(feed, "title").text = "DuckDuckGo OPDS Catalog"
62
  ET.SubElement(feed, "updated").text = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
63
 
64
  # Relative search link (OpenSearch template)
65
  feed.append(ET.Element("link", {
66
  "rel": "search",
67
- "type": "application/atom+xml",
68
  "href": "/opds/search?q={searchTerms}",
69
  "templated": "true"
70
  }))
@@ -76,6 +77,7 @@ def generate_search_feed(query: str, results):
76
  ns = "http://www.w3.org/2005/Atom"
77
  ET.register_namespace("", ns)
78
  feed = ET.Element("feed", xmlns=ns)
 
79
  ET.SubElement(feed, "title").text = f"Search results for '{query}'"
80
  ET.SubElement(feed, "updated").text = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
81
 
@@ -96,17 +98,23 @@ def generate_search_feed(query: str, results):
96
  @app.get("/opds", include_in_schema=False)
97
  def opds_root() -> Response:
98
  xml_data = generate_root_feed()
99
- return Response(content=xml_data, media_type="application/atom+xml")
 
 
 
100
 
101
  @app.get("/opds/search")
102
  def opds_search(
103
  q: str = Query(..., description="Search query"),
104
  searchType: str = Query(None, alias="searchType")
105
  ) -> Response:
106
- # Ignoring searchType parameter if provided
107
  results = duckduckgo_search(q)
108
  xml_data = generate_search_feed(q, results)
109
- return Response(content=xml_data, media_type="application/atom+xml")
 
 
 
110
 
111
  @app.get("/download")
112
  def download_fb2(url: str) -> Response:
@@ -122,4 +130,3 @@ def download_fb2(url: str) -> Response:
122
  media_type="application/fb2+xml",
123
  headers={"Content-Disposition": f"attachment; filename={filename}"}
124
  )
125
-
 
58
  ns = "http://www.w3.org/2005/Atom"
59
  ET.register_namespace("", ns)
60
  feed = ET.Element("feed", xmlns=ns)
61
+ ET.SubElement(feed, "id").text = "urn:uuid:duckopds-catalog"
62
  ET.SubElement(feed, "title").text = "DuckDuckGo OPDS Catalog"
63
  ET.SubElement(feed, "updated").text = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
64
 
65
  # Relative search link (OpenSearch template)
66
  feed.append(ET.Element("link", {
67
  "rel": "search",
68
+ "type": "application/atom+xml;profile=opds-catalog;kind=acquisition",
69
  "href": "/opds/search?q={searchTerms}",
70
  "templated": "true"
71
  }))
 
77
  ns = "http://www.w3.org/2005/Atom"
78
  ET.register_namespace("", ns)
79
  feed = ET.Element("feed", xmlns=ns)
80
+ ET.SubElement(feed, "id").text = f"urn:uuid:duckopds-search-{quote(query)}"
81
  ET.SubElement(feed, "title").text = f"Search results for '{query}'"
82
  ET.SubElement(feed, "updated").text = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
83
 
 
98
  @app.get("/opds", include_in_schema=False)
99
  def opds_root() -> Response:
100
  xml_data = generate_root_feed()
101
+ return Response(
102
+ content=xml_data,
103
+ media_type="application/atom+xml;profile=opds-catalog;kind=navigation"
104
+ )
105
 
106
  @app.get("/opds/search")
107
  def opds_search(
108
  q: str = Query(..., description="Search query"),
109
  searchType: str = Query(None, alias="searchType")
110
  ) -> Response:
111
+ # Ignoring searchType parameter
112
  results = duckduckgo_search(q)
113
  xml_data = generate_search_feed(q, results)
114
+ return Response(
115
+ content=xml_data,
116
+ media_type="application/atom+xml;profile=opds-catalog;kind=acquisition"
117
+ )
118
 
119
  @app.get("/download")
120
  def download_fb2(url: str) -> Response:
 
130
  media_type="application/fb2+xml",
131
  headers={"Content-Disposition": f"attachment; filename={filename}"}
132
  )