From cb3d10a06c0166c4eb8ec2d48852e4bfc236ef27 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Tue, 27 Jul 2021 17:01:29 -0700 Subject: refs: support for wikipedia outbound refs, and display in tables --- python/fatcat_tools/references.py | 4 ++-- python/fatcat_web/ref_routes.py | 26 ++++++++++++++++++--- python/fatcat_web/templates/refs_macros.html | 20 +++++++++++++--- .../templates/wikipedia_view_fuzzy_refs.html | 27 ++++++++++++++++++++++ 4 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 python/fatcat_web/templates/wikipedia_view_fuzzy_refs.html (limited to 'python') diff --git a/python/fatcat_tools/references.py b/python/fatcat_tools/references.py index 81b55f41..508cf19d 100644 --- a/python/fatcat_tools/references.py +++ b/python/fatcat_tools/references.py @@ -289,8 +289,8 @@ def enrich_inbound_refs(refs: List[BiblioRef], fatcat_api_client: Any, hide: Opt release = fatcat_api_client.get_release(ref.source_release_ident, hide=hide, expand=expand) access = release_access_options(release) if ref.source_wikipedia_article: - wiki_lang = ref.source_wikipedia.split(':')[0] - wiki_article = ':'.join(ref.source_wikipedia.split(':')[1:]) + wiki_lang = ref.source_wikipedia_article.split(':')[0] + wiki_article = ':'.join(ref.source_wikipedia_article.split(':')[1:]).replace(' ', '_') access.append(AccessOption( access_type="wikipedia", access_url=f"https://{wiki_lang}.wikipedia.org/wiki/{wiki_article}", diff --git a/python/fatcat_web/ref_routes.py b/python/fatcat_web/ref_routes.py index 6f887c4d..88ac0744 100644 --- a/python/fatcat_web/ref_routes.py +++ b/python/fatcat_web/ref_routes.py @@ -15,7 +15,7 @@ from fatcat_web.cors import crossdomain from fatcat_web.forms import * from fatcat_web.entity_helpers import * -def _refs_web(direction, release_ident=None, work_ident=None, openlibrary_id=None) -> RefHits: +def _refs_web(direction, release_ident=None, work_ident=None, openlibrary_id=None, wikipedia_article=None) -> RefHits: offset = request.args.get('offset', '0') offset = max(0, int(offset)) if offset.isnumeric() else 0 limit = request.args.get('limit', '30') @@ -37,6 +37,7 @@ def _refs_web(direction, release_ident=None, work_ident=None, openlibrary_id=Non elif direction == "out": hits = get_outbound_refs( release_ident=release_ident, + wikipedia_article=wikipedia_article, work_ident=work_ident, es_client=app.es_client, offset=offset, @@ -74,12 +75,23 @@ def release_view_refs_outbound(ident): @app.route('/openlibrary/OLW/refs-in', methods=['GET']) def openlibrary_view_refs_inbound(id_num): if request.accept_mimetypes.best == "application/json": - return openlibrary_view_refs_inbound(id_num) + return openlibrary_view_refs_inbound_json(id_num) openlibrary_id = f"OL{id_num}W" hits = _refs_web("in", openlibrary_id=openlibrary_id) return render_template('openlibrary_view_fuzzy_refs.html', openlibrary_id=openlibrary_id, direction="in", hits=hits), 200 +@app.route('/wikipedia/:/refs-out', methods=['GET']) +def wikipedia_view_refs_outbound(wiki_lang: str, wiki_article: str): + if request.accept_mimetypes.best == "application/json": + return wikipedia_view_refs_outbound_json(wiki_lang, wiki_article) + + wiki_url = f"https://{wiki_lang}.wikipedia.org/wiki/{wiki_article}" + wiki_article = wiki_article.replace('_', ' ') + wikipedia_article = wiki_lang + ":" + wiki_article + hits = _refs_web("out", wikipedia_article=wikipedia_article) + return render_template('wikipedia_view_fuzzy_refs.html', wiki_article=wiki_article, wiki_lang=wiki_lang, wiki_url=wiki_url, direction="out", hits=hits), 200 + @app.route('/reference/match', methods=['GET', 'POST']) def reference_match(): @@ -140,9 +152,17 @@ def release_view_refs_inbound_json(ident): hits = _refs_web("in", release_ident=ident) return Response(hits.json(exclude_unset=True), mimetype="application/json") -@app.route('/openlibrary/OLW/refs-in', methods=['GET', 'OPTIONS']) +@app.route('/openlibrary/OLW/refs-in.json', methods=['GET', 'OPTIONS']) @crossdomain(origin='*',headers=['access-control-allow-origin','Content-Type']) def openlibrary_view_refs_inbound_json(ident): openlibrary_id = f"OL{id_num}W" hits = _refs_web("in", openlibrary_id=openlibrary_id) return Response(hits.json(exclude_unset=True), mimetype="application/json") + +@app.route('/wikipedia/:/refs-out.json', methods=['GET', 'OPTIONS']) +@crossdomain(origin='*',headers=['access-control-allow-origin','Content-Type']) +def wikipedia_view_refs_outbound_json(wiki_lang: str, wiki_article: str): + wiki_article = wiki_article.replace('_', ' ') + wikipedia_article = wiki_lang + ":" + wiki_article + hits = _refs_web("out", wikipedia_article=wikipedia_article) + return Response(hits.json(exclude_unset=True), mimetype="application/json") diff --git a/python/fatcat_web/templates/refs_macros.html b/python/fatcat_web/templates/refs_macros.html index 405aca73..ba4d18ad 100644 --- a/python/fatcat_web/templates/refs_macros.html +++ b/python/fatcat_web/templates/refs_macros.html @@ -35,12 +35,26 @@ {% if release %} {{ entity_macros.release_summary(release) }} - {% elif row.ref.target_unstructured %} + {% elif direction == "in" and row.ref.source_wikipedia_article %} + {% set wiki_lang = row.ref.source_wikipedia_article.split(':')[0] %} + {% set wiki_article = ':'.join(row.ref.source_wikipedia_article.split(':')[1:]) %} + + + {{ wiki_article }} + + [wikipedia] + +
+ lang:{{ wiki_lang }}  + [references]  + {% elif direction == "out" and row.ref.target_unstructured %} {{ row.ref.target_unstructured }} {% if row.ref.target_openlibrary_work %} -
openlibrary:{{ row.ref.target_openlibrary_work }}  +
+ openlibrary:{{ row.ref.target_openlibrary_work }}  + [cited-by]  {% endif %} - {% elif row.ref.target_csl %} + {% elif direction == "in" and row.ref.target_csl %} {{ entity_macros.csl_summary(row.ref.target_csl) }} {% else %} blank diff --git a/python/fatcat_web/templates/wikipedia_view_fuzzy_refs.html b/python/fatcat_web/templates/wikipedia_view_fuzzy_refs.html new file mode 100644 index 00000000..5b53d692 --- /dev/null +++ b/python/fatcat_web/templates/wikipedia_view_fuzzy_refs.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} +{% import "refs_macros.html" as refs_macros %} + +{% block title %}Wikipedia Refs{% endblock %} + +{% block fullbody %} +

+ [{{ wiki_lang }}] {{ wiki_article }} + {{ wiki_url }} +

+ +{% if direction == "in" %} +

Cited By

+

This page lists references to a wikipedia article, from other works (eg, journal articles). +{% elif direction == "out" %} +

References

+ Refernces from wikipedia article to other entities. +{% endif %} + +{% if hits.result_refs %} + {{ refs_macros.refs_table(hits, direction) }} +{% else %} +

None found +{% endif %} + +{% endblock %} + -- cgit v1.2.3