89def response(resp:
"SXNG_Response") -> EngineResults:
92 json_data = resp.json()
94 for result
in json_data.get(
"results", []):
96 if not result.get(
"title"):
100 url: str |
None =
None
103 doi: str = result.get(
"doi")
105 url = f
"https://doi.org/{doi}"
107 if url
is None and result.get(
"doi"):
109 url =
"https://doi.org/" + str(result[
"doi"])
110 elif result.get(
"id"):
111 url =
"https://core.ac.uk/works/" + str(result[
"id"])
112 elif result.get(
"downloadUrl"):
113 url = result[
"downloadUrl"]
114 elif result.get(
"sourceFulltextUrls"):
115 url = result[
"sourceFulltextUrls"]
120 published_date =
None
122 raw_date = result.get(
"publishedDate")
or result.get(
"depositedDate")
125 published_date = datetime.fromisoformat(result[
"publishedDate"].replace(
"Z",
"+00:00"))
126 except (ValueError, AttributeError):
131 if result.get(
"journals"):
132 journals = [j.get(
"title")
for j
in result[
"journals"]
if j.get(
"title")]
135 publisher = result.get(
"publisher",
"").strip(
"'")
138 authors: set[str] = set()
139 for i
in result.get(
"authors", []):
140 name: str |
None = i.get(
"name")
146 title=result.get(
"title"),
148 content=result.get(
"fullText",
"")
or "",
149 tags=result.get(
"fieldOfStudy", []),
150 publishedDate=published_date,
151 type=result.get(
"documentType",
"")
or "",
153 editor=
", ".join(result.get(
"contributors", [])),
155 journal=
", ".join(journals),
156 doi=result.get(
"doi"),
157 pdf_url=result.get(
"downloadUrl", {})
or result.get(
"sourceFulltextUrls", {}),