# encoding=utf8 # # # # # # # # # # # # # # # # # # # # # # # # # REQUIREMENTS # # # # # # # # # # # # # # # # # # # # # # # # from flask import send_file, Flask, Response, url_for, render_template, Markup, jsonify, redirect, request, flash, session, make_response import requests from SPARQLWrapper import SPARQLWrapper, JSON import json # import pandas as pd # ##### IMPORTS FOR TEST WIKIPAGE from lxml import html from bs4 import BeautifulSoup import re # # # # # # # # # # # # # # # # # # # # # # # # # GETTING STARTED # # # # # # # # # # # # # # # # # # # # # # # # app = Flask(__name__, static_url_path='', static_folder="static", template_folder="templates") app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 app.jinja_env.add_extension('jinja2.ext.loopcontrols') # # # # # # # # # # # # # # # # # # # # # # # # # GETTING WIKIBASE DATA # # # # # # # # # # # # # # # # # # # # # # # # sparql = SPARQLWrapper("https://query.daap.bannerrepeater.org/proxy/wdqs/bigdata/namespace/wdq/sparql") # # # # # # # # # # # # # # # # # # # # # # # # # PAGES # # # # # # # # # # # # # # # # # # # # # # # # @app.route("/") def home(): sparql.setQuery(''' SELECT ?work ?workLabel ?image ?date ?dateadded WHERE { { SELECT ?work ?workLabel (SAMPLE(?date) AS ?date) WHERE { ?work wdt:P1 wd:Q1; wdt:P13 ?date. FILTER(?work != wd:Q57) SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?work ?workLabel ORDER BY ?workLabel } { SELECT ?work ?workLabel (SAMPLE(?image) AS ?image) WHERE { ?work wdt:P1 wd:Q1; p:P90 ?statement. ?statement ps:P90 ?image; pq:P54 wd:Q90. FILTER(?work != wd:Q57) SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?work ?workLabel ORDER BY ?workLabel } SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } ?work wdt:P1 wd:Q1; wdt:P87 ?dateadded. FILTER(?work != wd:Q57) } ORDER BY DESC (?dateadded) LIMIT 12 ''') sparql.setReturnFormat(JSON) results = sparql.query().convert() ImagesBanner = [] # print(results) for publication in results["results"]["bindings"]: publication_title = publication["workLabel"]["value"] publication_uri = publication["work"]["value"] #if key exists if "date" in publication: publication_date = publication["date"]["value"] if "image" in publication: publication_image = publication["image"]["value"] ImagesBanner.append(publication_image) ImagesBanner = ImagesBanner[-12:] return render_template('home.html', results=results, ImagesBanner=ImagesBanner) @app.route("/browsethearchive") def browsethearchive(): sparql.setQuery(''' SELECT ?work ?workLabel ?image ?date WHERE { { SELECT ?work ?workLabel (SAMPLE(?date) AS ?date) WHERE { ?work wdt:P1 wd:Q1; wdt:P13 ?date. FILTER(?work != wd:Q57) SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?work ?workLabel ORDER BY ?workLabel } ?work wdt:P1 wd:Q1. OPTIONAL {?work p:P90 ?statement. ?statement ps:P90 ?image; pq:P54 wd:Q90.} FILTER(?work != wd:Q57) SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ORDER BY ?workLabel ''') sparql.setReturnFormat(JSON) results = sparql.query().convert() # print(results) for publication in results["results"]["bindings"]: publication_title = publication["workLabel"]["value"] publication_uri = publication["work"]["value"] #if key exists if "date" in publication: publication_date = publication["date"]["value"] if "image" in publication: publication_image = publication["image"]["value"] return render_template('browsethearchive.html', results=results) @app.route("/browsebycategory") def browsebycategory(): return render_template('browsebycategory.html') ########################## # CATEGORIES TO BE BROWSED ######################### ######################### ARTIST INDEX @app.route("/artistsindex") def artistsindex(): sparql.setQuery(''' SELECT ?creators ?creatorsLabel ?creatorsAltLabel ?creatorsDescription WHERE { { SELECT ?creators (COUNT(DISTINCT ?a) AS ?count) WHERE { ?a ?prop ?creators . ?a wdt:P1 ?work . BIND (wdt:P9 AS ?prop) . BIND (wd:Q1 AS ?work) . } GROUP BY ?creators } . SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . } FILTER (?creators !=wd:Q82) } ORDER BY DESC(?count) ?creatorsLabel ''') sparql.setReturnFormat(JSON) results = sparql.query().convert() return render_template('artistsindex.html', results=results) ######################### PUBLISHERS INDEX @app.route("/publishersindex") def publishersindex(): sparql.setQuery(''' SELECT ?publishers ?publishersLabel ?publishersAltLabel ?publishersDescription WHERE { { SELECT ?publishers (COUNT(DISTINCT ?a) AS ?count) WHERE { ?a ?prop ?publishers . ?a wdt:P1 ?work . BIND (wdt:P10 AS ?prop) . BIND (wd:Q1 AS ?work) . } GROUP BY ?publishers } . SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . } FILTER(?publishers != wd:Q83) FILTER(?publishers != wd:Q71) } ORDER BY DESC(?count) ?publishersLabel ''') sparql.setReturnFormat(JSON) results = sparql.query().convert() return render_template('publishersindex.html', results=results) ######################### SELF PUBLISHED INDEX @app.route("/selfpublishedindex") def selfpublishedindex(): sparql.setQuery(''' SELECT ?work ?workLabel ?image ?date WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } ?work wdt:P1 wd:Q1; wdt:P10 wd:Q71. OPTIONAL {?work p:P90 ?statement. ?statement ps:P90 ?image; pq:P54 wd:Q90.} OPTIONAL { ?work wdt:P13 ?date. } FILTER(?work != wd:Q57) } ''') sparql.setReturnFormat(JSON) results = sparql.query().convert() return render_template('selfpublishedindex.html', results=results) ######################### ZINES INDEX @app.route("/zinesindex") def zinesindex(): sparql.setQuery(''' SELECT ?work ?workLabel ?image ?date WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } ?work wdt:P1 wd:Q1; wdt:P16 wd:Q152. OPTIONAL {?work p:P90 ?statement. ?statement ps:P90 ?image; pq:P54 wd:Q90.} OPTIONAL { ?work wdt:P13 ?date. } FILTER(?work != wd:Q57) } ORDER BY ?workLabel ''') sparql.setReturnFormat(JSON) results = sparql.query().convert() # print(results) return render_template('zinesindex.html', results=results) ########################## # DETAILED INDIVIDUAL PAGES ######################### ######################### ARTWORK @app.route("/artwork", methods=['GET']) def artwork(): artwork_id = request.args.get('id') # Artwork Intro / Top of the page sparql.setQuery(''' SELECT ?work ?workLabel ?workDescription ?itemtypeLabel { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P1 ?itemtype. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) artworkintro = sparql.query().convert() # Image(s) # query for later sparql.setQuery(''' SELECT ?image ?depictsLabel ?licenseLabel WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P90 ?image. OPTIONAL { ?work p:P90 ?statement2. ?statement2 ps:P90 ?image; pq:P54 ?depicts; pq:P56 ?license.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en".} } ''') sparql.setReturnFormat(JSON) artworkimages = sparql.query().convert() # print(artworkimages) # Links and downloads sparql.setQuery(''' SELECT ?DownloadDigitalFacsimile ?DigitalFacsimileExternalLink ?DigitalFacsimileExternalLink2 WHERE { VALUES ?work {wd:'''+artwork_id+'''} OPTIONAL {?work wdt:P32 ?DownloadDigitalFacsimile.} OPTIONAL {?work wdt:P34 ?DigitalFacsimileExternalLink.} OPTIONAL {?work wdt:P33 ?DigitalFacsimileExternalLink2.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en".} }''') sparql.setReturnFormat(JSON) artworklinksanddownloads = sparql.query().convert() # Other digital artefacts sparql.setQuery(''' SELECT ?ImageFile ?AudioFile ?VideoFile WHERE { { SELECT ?ImageFile WHERE { VALUES ?work {wd:'''+artwork_id+'''} OPTIONAL {?work p:P35 ?statement. ?statement ps:P35 ?ImageFile; pq:P16 wd:Q85.} }} { SELECT ?AudioFile WHERE { VALUES ?work {wd:'''+artwork_id+'''} OPTIONAL {?work p:P35 ?statement. ?statement ps:P35 ?AudioFile; pq:P16 wd:Q28.} }} { SELECT ?VideoFile WHERE { VALUES ?work {wd:'''+artwork_id+'''} OPTIONAL {?work p:P35 ?statement. ?statement ps:P35 ?VideoFile; pq:P16 wd:Q27.} }} SERVICE wikibase:label { bd:serviceParam wikibase:language "en".} } ''') sparql.setReturnFormat(JSON) artworkartefacts = sparql.query().convert() # print(artworkartefacts) # Distributor Links sparql.setQuery(''' SELECT ?distributorLinks WHERE { VALUES ?work {wd:'''+artwork_id+'''} OPTIONAL {?work wdt:P37 ?distributorLinks.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en".} } ''') sparql.setReturnFormat(JSON) artworkdistributorlinks = sparql.query().convert() ######### Right top # contributors sparql.setQuery(''' SELECT DISTINCT ?creators ?creatorsLabel (group_concat(?creatorRolesLabel; separator="; ") as ?role) WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P9 ?creators. OPTIONAL { ?work p:P9 ?statement1. ?statement1 ps:P9 ?creators; pq:P49 ?creatorRoles. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". ?creators rdfs:label ?creatorsLabel. ?creatorRoles rdfs:label ?creatorRolesLabel. } } GROUP BY ?creators ?creatorsLabel ORDER BY ?creatorsLabel ''') sparql.setReturnFormat(JSON) artworkcontributors = sparql.query().convert() # date sparql.setQuery(''' SELECT ?date ?sourceLabel WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P13 ?date. OPTIONAL { ?work p:P13 ?statement1. ?statement1 ps:P13 ?date; pq:P50 ?source. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en".} } ''') sparql.setReturnFormat(JSON) artworkdate = sparql.query().convert() # publishers sparql.setQuery(''' SELECT DISTINCT ?publishers ?publishersLabel (group_concat(?publishersRolesLabel; separator="; ") as ?role) WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P10 ?publishers. OPTIONAL { ?work p:P10 ?statement1. ?statement1 ps:P10 ?publishers; pq:P49 ?creatorRoles. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". ?publishers rdfs:label ?publishersLabel. ?publishersRoles rdfs:label ?publishersRolesLabel. } } GROUP BY ?publishers ?publishersLabel ORDER BY ?publishersLabel ''') sparql.setReturnFormat(JSON) artworkpublisher = sparql.query().convert() #####right middle # description + id to be changed sparql.setQuery(''' SELECT ?accessURLdescriptionPage ?authordescriptionPage ?authordescriptionPageLabel ?datedescriptionPage ?sourcedescriptionPage ?sourcedescriptionPageLabel WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P65 ?descriptionPage. OPTIONAL { ?descriptionPage wdt:P4 ?accessURLdescriptionPage. } OPTIONAL { ?descriptionPage wdt:P9 ?authordescriptionPage. } OPTIONAL { ?descriptionPage wdt:P13 ?datedescriptionPage. } OPTIONAL { ?descriptionPage wdt:P50 ?sourcedescriptionPage. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) artworkdescriptiondata = sparql.query().convert() for x in artworkdescriptiondata['results']['bindings']: if "accessURLdescriptionPage" in x: accessURLdescriptionUrl = x["accessURLdescriptionPage"]["value"] desc_url = re.search(r':Q(.*)', accessURLdescriptionUrl, re.DOTALL) desc_id=desc_url.group(1) # # get the description content from wiki artworkdescriptioncontenturl = "https://daap.bannerrepeater.org/w/index.php?title=Description:Q"+desc_id+"&action=render" # # Make a GET request to fetch the raw HTML content html_content = requests.get(artworkdescriptioncontenturl).text # # Parse the html content soup = BeautifulSoup(html_content, "lxml") # # print(soup.prettify()) # print the parsed data of html text=soup.find("div" , {"class" : "mw-parser-output"}) # text=soup.find_all("p") # text=Markup(text) # artworkdescriptiontext.append(text) x["text"] = text else: # print("url for description absent") text="
Information not available
" x["text"] = text # print(artworkdescriptiondata) # exhibitions + id to be changed sparql.setQuery(''' SELECT ?accessURLexhibitionHisPage ?authorexhibitionHisPageLabel ?dateexhibitionHisPage ?sourceexhibitionHisPage WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P66 ?exhibitionHisPage. OPTIONAL { ?exhibitionHisPage wdt:P4 ?accessURLexhibitionHisPage. } OPTIONAL { ?exhibitionHisPage wdt:P9 ?authorexhibitionHisPage. } OPTIONAL { ?exhibitionHisPage wdt:P13 ?dateexhibitionHisPage. } OPTIONAL { ?exhibitionHisPage wdt:P50 ?sourceexhibitionHisPage. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) artworkexhibitiondata = sparql.query().convert() # get the text from the url for x in artworkexhibitiondata['results']['bindings']: if "accessURLexhibitionHisPage" in x: accessURLexhibitionHisPage = x["accessURLexhibitionHisPage"]["value"] desc_url = re.search(r':Q(.*)', accessURLexhibitionHisPage, re.DOTALL) # print(desc_url.group(1)) desc_id=desc_url.group(1) # # get the description content from wiki artworkexhibitioncontenturl = "https://daap.bannerrepeater.org/w/index.php?title=History:Q"+desc_id+"&action=render" # # Make a GET request to fetch the raw HTML content html_content = requests.get(artworkexhibitioncontenturl).text # # Parse the html content soup = BeautifulSoup(html_content, "lxml") # # print(soup.prettify()) # print the parsed data of html text=soup.find("div" , {"class" : "mw-parser-output"}) # text=soup.find_all("p") # artworkexhibitiontext=Markup(text) x['text']=text else: # print("url for description absent") text="Information not available
" # artworkexhibitiontext=Markup(text) x['text']=text ############## bottom # copies in collection sparql.setQuery(''' SELECT ?copiesCollections ?copiesCollectionsLabel ?collection ?collectionLabel ?image WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P43 ?copiesCollections. ?copiesCollections wdt:P47 ?collection. OPTIONAL { ?collection wdt:P90 ?image. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) copiesincollection = sparql.query().convert() # related works sparql.setQuery(''' SELECT ?relatedWorks ?relatedWorksLabel ?image ?daterelatedWorks WHERE { { SELECT ?relatedWorks ?relatedWorksLabel (SAMPLE(?daterelatedWorks) AS ?daterelatedWorks) WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P44 ?relatedWorks. OPTIONAL {?relatedWorks wdt:P13 ?daterelatedWorks.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?relatedWorks ?relatedWorksLabel ORDER BY ?relatedWorksLabel } { SELECT ?relatedWorks ?relatedWorksLabel (SAMPLE(?image) AS ?image) WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P44 ?relatedWorks. OPTIONAL {?relatedWorks wdt:P90 ?image.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?relatedWorks ?relatedWorksLabel ORDER BY ?relatedWorksLabel } } ''') sparql.setReturnFormat(JSON) relatedworks = sparql.query().convert() # lists sparql.setQuery(''' SELECT ?list ?listLabel ?image ?date WHERE { VALUES ?work {wd:'''+artwork_id+'''} ?work wdt:P45 ?list. OPTIONAL {?list wdt:P13 ?date.} OPTIONAL {?list wdt:P90 ?image.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en".} } ''') sparql.setReturnFormat(JSON) artworklists = sparql.query().convert() return render_template('artwork.html', artwork_id=artwork_id, artworkintro=artworkintro, artworkimages=artworkimages, artworklinksanddownloads=artworklinksanddownloads, artworkartefacts=artworkartefacts, artworkdistributorlinks=artworkdistributorlinks, artworkcontributors=artworkcontributors, artworkdate=artworkdate, artworkpublisher=artworkpublisher, artworkdescriptiondata=artworkdescriptiondata, artworkexhibitiondata=artworkexhibitiondata, artworklists=artworklists, copiesincollection=copiesincollection, relatedworks=relatedworks) ######################### COPY ITEM @app.route("/copy", methods=['GET']) def copy(): copy_id = request.args.get('id') # Intro sparql.setQuery(''' SELECT ?item ?itemLabel ?itemDescription ?itemtypeLabel { VALUES ?item {wd:'''+copy_id+'''} ?item wdt:P1 ?itemtype. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) copyintro = sparql.query().convert() # image sparql.setQuery(''' SELECT ?image ?depictsLabel ?licenseLabel WHERE { VALUES ?item {wd:'''+copy_id+'''} ?item wdt:P90 ?image. OPTIONAL { ?work p:P90 ?statement2. ?statement2 ps:P90 ?image; pq:P54 ?depicts; pq:P56 ?license.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en".} } ''') sparql.setReturnFormat(JSON) copyimage = sparql.query().convert() # copy of sparql.setQuery(''' SELECT ?work ?workLabel WHERE { VALUES ?item {wd:'''+copy_id+'''} ?item wdt:P46 ?work. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) copyof = sparql.query().convert() # collection sparql.setQuery(''' SELECT ?collection ?collectionLabel WHERE { VALUES ?item {wd:'''+copy_id+'''} ?item wdt:P47 ?collection. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) copycollection = sparql.query().convert() # inventory number sparql.setQuery(''' SELECT ?inventoryNumber WHERE { VALUES ?item {wd:'''+copy_id+'''} ?item wdt:P48 ?inventoryNumber. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) copyinventorynumber = sparql.query().convert() # copy description sparql.setQuery(''' SELECT ?accessURLdescriptionPage ?authordescriptionPageLabel ?datedescriptionPage ?sourcedescriptionPageLabel WHERE { VALUES ?item {wd:'''+copy_id+'''} ?item wdt:P65 ?descriptionPage. OPTIONAL { ?descriptionPage wdt:P4 ?accessURLdescriptionPage. } OPTIONAL { ?descriptionPage wdt:P9 ?authordescriptionPage. } OPTIONAL { ?descriptionPage wdt:P13 ?datedescriptionPage. } OPTIONAL { ?descriptionPage wdt:P50 ?sourcedescriptionPage. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) copydescription = sparql.query().convert() for x in copydescription['results']['bindings']: if "accessURLdescriptionPage" in x: accessURLdescURL = x["accessURLdescriptionPage"]["value"] desc_url = re.search(r':Q(.*)', accessURLdescURL, re.DOTALL) desc_id=desc_url.group(1) # # get the description content from wiki copydesccontenturl = "https://daap.bannerrepeater.org/w/index.php?title=Description:Q"+desc_id+"&action=render" # # Make a GET request to fetch the raw HTML content html_content = requests.get(copydesccontenturl).text # # Parse the html content soup = BeautifulSoup(html_content, "lxml") # # print(soup.prettify()) # print the parsed data of html text=soup.find("div" , {"class" : "mw-parser-output"}) # text=soup.find_all("p") # text=Markup(text) # artworkdescriptiontext.append(text) x["text"] = text else: # print("url for description absent") text="Information not available
" x["text"] = text return render_template('copy.html', copy_id=copy_id, copyintro=copyintro, copyimage=copyimage, copyof=copyof, copycollection=copycollection, copyinventorynumber=copyinventorynumber, copydescription=copydescription) ######################### ITEM : COLLECTIVE - PERSON - ORGANISATION @app.route("/item", methods=['GET']) def item(): item_id = request.args.get('id') # Intro sparql.setQuery(''' SELECT ?item ?itemLabel ?itemDescription ?itemtypeLabel { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P1 ?itemtype. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) itemintro = sparql.query().convert() # image sparql.setQuery(''' SELECT ?image ?depictsLabel ?licenseLabel WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P90 ?image. OPTIONAL { ?work p:P90 ?statement2. ?statement2 ps:P90 ?image; pq:P54 ?depicts; pq:P56 ?license.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en".} } ''') sparql.setReturnFormat(JSON) itemimage = sparql.query().convert() # official website sparql.setQuery(''' SELECT ?website WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P61 ?website. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) itemwebsite = sparql.query().convert() # wikidata id sparql.setQuery(''' SELECT ?WikidataID WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P3 ?WikidataID. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) itemwikidataID = sparql.query().convert() # viaf ID sparql.setQuery(''' SELECT ?VIAFID WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P80 ?VIAFID. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) itemviafID = sparql.query().convert() # PERSON gender # for test:Q82} sparql.setQuery(''' SELECT ?genderLabel WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P86 ?gender. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) persongender = sparql.query().convert() # PERSON pronouns sparql.setQuery(''' SELECT ?pronounLabel WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P85 ?pronoun. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) personpronouns = sparql.query().convert() # ORGANISATION location sparql.setQuery(''' SELECT ?locationLabel WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P83 ?location. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) orglocation = sparql.query().convert() # ORGANISATION country sparql.setQuery(''' SELECT ?countryLabel WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P84 ?country. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) orgcountry = sparql.query().convert() # COLLECTIVE MEMBERS # for test:Q309} sparql.setQuery(''' SELECT ?members ?membersLabel WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P74 ?members. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) collectivemembers = sparql.query().convert() # PERSON biography sparql.setQuery(''' SELECT ?accessURLbioPage ?authorBioPageLabel ?dateBioPage ?sourceBioPageLabel WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P67 ?bioPage. OPTIONAL { ?bioPage wdt:P4 ?accessURLbioPage. } OPTIONAL { ?bioPage wdt:P9 ?authorBioPage. } OPTIONAL { ?bioPage wdt:P13 ?dateBioPage. } OPTIONAL { ?bioPage wdt:P50 ?sourceBioPage. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) personbiography = sparql.query().convert() for x in personbiography['results']['bindings']: if "accessURLbioPage" in x: accessURLbioURL = x["accessURLbioPage"]["value"] desc_url = re.search(r':Q(.*)', accessURLbioURL, re.DOTALL) desc_id=desc_url.group(1) # # get the description content from wiki personbiocontenturl = "https://daap.bannerrepeater.org/w/index.php?title=Biography:Q"+desc_id+"&action=render" # # Make a GET request to fetch the raw HTML content html_content = requests.get(personbiocontenturl).text # # Parse the html content soup = BeautifulSoup(html_content, "lxml") # # print(soup.prettify()) # print the parsed data of html text=soup.find("div" , {"class" : "mw-parser-output"}) # text=soup.find_all("p") # text=Markup(text) # artworkdescriptiontext.append(text) x["text"] = text else: # print("url for description absent") text="Information not available
" x["text"] = text # COLLECTIVE AND INSTITUTION DESCRIPTION sparql.setQuery(''' SELECT ?accessURLdescriptionPage ?authordescriptionPageLabel ?datedescriptionPage ?sourcedescriptionPageLabel WHERE { VALUES ?item {wd:'''+item_id+'''} ?item wdt:P65 ?descriptionPage. OPTIONAL { ?descriptionPage wdt:P4 ?accessURLdescriptionPage. } OPTIONAL { ?descriptionPage wdt:P9 ?authordescriptionPage. } OPTIONAL { ?descriptionPage wdt:P13 ?datedescriptionPage. } OPTIONAL { ?descriptionPage wdt:P50 ?sourcedescriptionPage. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ''') sparql.setReturnFormat(JSON) colorgdescription = sparql.query().convert() for x in colorgdescription['results']['bindings']: if "accessURLdescriptionPage" in x: accessURLdescURL = x["accessURLdescriptionPage"]["value"] desc_url = re.search(r':Q(.*)', accessURLdescURL, re.DOTALL) desc_id=desc_url.group(1) # # get the description content from wiki itemdesccontenturl = "https://daap.bannerrepeater.org/w/index.php?title=Description:Q"+desc_id+"&action=render" # # Make a GET request to fetch the raw HTML content html_content = requests.get(itemdesccontenturl).text # # Parse the html content soup = BeautifulSoup(html_content, "lxml") # # print(soup.prettify()) # print the parsed data of html text=soup.find("div" , {"class" : "mw-parser-output"}) # text=soup.find_all("p") # text=Markup(text) # artworkdescriptiontext.append(text) x["text"] = text else: # print("url for description absent") text="Information not available
" x["text"] = text # creator of sparql.setQuery(''' SELECT ?Works ?WorksLabel ?image ?dateWorks WHERE { { SELECT ?Works ?WorksLabel (SAMPLE(?dateWorks) AS ?dateWorks) WHERE { VALUES ?item {wd:'''+item_id+'''} ?Works wdt:P1 wd:Q1; wdt:P9 ?item; wdt:P13 ?dateWorks. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?Works ?WorksLabel ORDER BY ?WorksLabel } { SELECT ?Works ?WorksLabel (SAMPLE(?image) AS ?image) WHERE { VALUES ?item {wd:'''+item_id+'''} ?Works wdt:P1 wd:Q1; wdt:P9 ?item. OPTIONAL {?Works wdt:P90 ?image.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?Works ?WorksLabel ORDER BY ?WorksLabel } } ''') sparql.setReturnFormat(JSON) item_creatorof = sparql.query().convert() # publisher of sparql.setQuery(''' SELECT ?Works ?WorksLabel ?image ?dateWorks WHERE { { SELECT ?Works ?WorksLabel (SAMPLE(?dateWorks) AS ?dateWorks) WHERE { VALUES ?item {wd:'''+item_id+'''} ?Works wdt:P1 wd:Q1; wdt:P10 ?item; wdt:P13 ?dateWorks. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?Works ?WorksLabel ORDER BY ?WorksLabel } { SELECT ?Works ?WorksLabel (SAMPLE(?image) AS ?image) WHERE { VALUES ?item {wd:'''+item_id+'''} ?Works wdt:P1 wd:Q1; wdt:P10 ?item. OPTIONAL {?Works wdt:P90 ?image.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?Works ?WorksLabel ORDER BY ?WorksLabel } } ''') sparql.setReturnFormat(JSON) item_publisherof = sparql.query().convert() # commissioned sparql.setQuery(''' SELECT ?Works ?WorksLabel ?image ?dateWorks WHERE { { SELECT ?Works ?WorksLabel (SAMPLE(?dateWorks) AS ?dateWorks) WHERE { VALUES ?item {wd:'''+item_id+'''} ?Works wdt:P1 wd:Q1; wdt:P14 ?item; wdt:P13 ?dateWorks. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?Works ?WorksLabel ORDER BY ?WorksLabel } { SELECT ?Works ?WorksLabel (SAMPLE(?image) AS ?image) WHERE { VALUES ?item {wd:'''+item_id+'''} ?Works wdt:P1 wd:Q1; wdt:P14 ?item. OPTIONAL {?Works wdt:P90 ?image.} SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?Works ?WorksLabel ORDER BY ?WorksLabel } } ''') sparql.setReturnFormat(JSON) item_commissioned = sparql.query().convert() return render_template("item.html", item_id=item_id, item_creatorof=item_creatorof, itemwebsite=itemwebsite, itemwikidataID=itemwikidataID, itemviafID=itemviafID, item_publisherof=item_publisherof, item_commissioned=item_commissioned, itemintro=itemintro, itemimage=itemimage, personbiography=personbiography, persongender=persongender, personpronouns=personpronouns, collectivemembers=collectivemembers, orglocation=orglocation, orgcountry=orgcountry, colorgdescription=colorgdescription) ######################### ORGANISATION # @app.route("/organisation", methods=['GET']) # def organisation(): # org_id = request.args.get('id') # return render_template("organisation.html") ######################### # PAGES FROM WIKI ######################### ######################### ABOUT @app.route("/about") def about(): url="https://daap.bannerrepeater.org/w/index.php?title=About&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") # A problem with image src obtention was solved by using absolute paths rather than traditional wiki syntax # replaceString = "wiki/Special:Redirect/file/" # cleanSoup = BeautifulSoup(str(text).replace("wiki/File:", replaceString)) # for a in soup.find_all('a', href=True): # if a.text: # print(a['href']) # replace src from img zith href from a href and remove the a text=Markup(text) return render_template('about.html', text=text) ######################### UPLOAD @app.route("/upload") def upload(): url="https://daap.bannerrepeater.org/w/index.php?title=Upload&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('upload.html', text=text) # #################### TEAM @app.route("/team") def team(): url="https://daap.bannerrepeater.org/w/index.php?title=Team&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('team.html', text=text) # #################### CASE STUDY @app.route("/casestudy") def casestudy(): url="https://daap.bannerrepeater.org/w/index.php?title=Carolee_Schneemann_case_study&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('casestudy.html', text=text) # #################### CODE OF CONDUCT @app.route("/codeofconduct") def codeofconduct(): url="https://daap.bannerrepeater.org/w/index.php?title=Code_of_Conduct&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('codeofconduct.html', text=text) # #################### SEARCH TOOLS @app.route("/searchtools") def searchtools(): url="https://daap.bannerrepeater.org/w/index.php?title=Search_Tools&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('searchtools.html', text=text) ######################### TUTORIAL @app.route("/tutorials") def tutorials(): url="https://daap.bannerrepeater.org/w/index.php?title=Tutorials&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('tutorials.html', text=text) ######################### TUTORIAL 1 @app.route("/tutorial_1") def tutorial_1(): url="https://daap.bannerrepeater.org/w/index.php?title=Tutorial_1&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('tutorials.html', text=text) ######################### TUTORIAL 2 @app.route("/tutorial_2") def tutorial_2(): url="https://daap.bannerrepeater.org/w/index.php?title=Tutorial_2&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('tutorials.html', text=text) ######################### TUTORIAL 3 @app.route("/tutorial_3") def tutorial_3(): url="https://daap.bannerrepeater.org/w/index.php?title=Tutorial_3&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('tutorials.html', text=text) ######################### TUTORIAL 4 @app.route("/tutorial_4") def tutorial_4(): url="https://daap.bannerrepeater.org/w/index.php?title=Tutorial_4&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('tutorials.html', text=text) ######################### TUTORIAL 5 @app.route("/tutorial_5") def tutorial_5(): url="https://daap.bannerrepeater.org/w/index.php?title=Tutorial_5&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('tutorials.html', text=text) ######################### TUTORIAL 6 @app.route("/tutorial_6") def tutorial_6(): url="https://daap.bannerrepeater.org/w/index.php?title=Tutorial_6&action=render" # Make a GET request to fetch the raw HTML content html_content = requests.get(url).text # Parse the html content soup = BeautifulSoup(html_content, "lxml") # print(soup.prettify()) # print the parsed data of html text=soup.find("html") text=Markup(text) return render_template('tutorials.html', text=text) ######################### LOGIN #Goes to wikibase page # ALL NAME # https://daap.bannerrepeater.org/w/api.php?action=query&meta=siteinfo&siprop=namespaces|namespacealiases # replace or insert tags # https://stackoverflow.com/questions/2073541/search-and-replace-in-html-with-beautifulsoup