def labels(self, items, language): # Now add a "Q" in front of the id if its not already there all_items = [ qid if qid[0] == "Q" else f"Q{qid}" for qid in items] # Batch in chunks of 50 because the WD api doesn't accept more labels = {} for items in util.batch_iterable(all_items, 50): r = util.apirequest(API_ENDPOINT, { "languages" : language, "action" : "wbgetentities", "format" : "json", "props" : "labels", "languagefallback" : 1, "ids" : "|".join(items) }) if not "entities" in r: continue for qid, data in r["entities"].items(): if "labels" in data: labels[qid] = data["labels"][language]["value"] else: labels[qid] = None return labels
def labels(self, items, language): # Now add a "Q" in front of the id if its not already there all_items = [qid if qid[0] == "Q" else f"Q{qid}" for qid in items] # Batch in chunks of 50 because the WD api doesn't accept more labels = {} for items in util.batch_iterable(all_items, 50): r = util.apirequest( API_ENDPOINT, { "languages": language, "action": "wbgetentities", "format": "json", "props": "labels", "languagefallback": 1, "ids": "|".join(items) }) if not "entities" in r: continue for qid, data in r["entities"].items(): if "labels" in data: labels[qid] = data["labels"][language]["value"] else: labels[qid] = None return labels
def query(self, params): r = util.apirequest(API_ENDPOINT, { "q" : params["q"] }) status = r["status"] if r["status"]["error"] == "OK": frm, to = int(params["from"]), int(params["from"]) + int(params["size"]) items = r["items"][frm:to] if params["resolvedata"] != False: entity = WikidataEntity() ids = ",".join(map(str, items)) entities = entity.entity({ "q" : ids, "language" : params["language"] }) return entities else: return items else: return False
def _get_random_qids(self, args, count): r = util.apirequest(API_ENDPOINT, { "action" : "query", "list" : "random", "rnnamespace" : 0, "format" : "json", "rnlimit" : count }) if "query" not in r: return {"error" : "Could not get a random item"} else: return r
def search(self, params): r = util.apirequest(API_ENDPOINT, { "action" : "wbsearchentities", "format" : "json", "language" : params["language"], "type" : "item", "search" : params["q"] }) if "success" in r: return r["search"] else: return False
def entity_request(self, ids): r = util.apirequest(API_ENDPOINT, { "languages" : "|".join(self.languages), "action" : "wbgetentities", "ids" : "|".join(ids), "props" : "|".join(self.props), "languagefallback" : 1, "format" : "json" }) if "success" in r: return r["entities"] else: raise Exception("Invalid or bad API request")
def search(self, params): r = util.apirequest( API_ENDPOINT, { "action": "wbsearchentities", "format": "json", "language": params["language"], "type": "item", "search": params["q"] }) if "success" in r: return r["search"] else: return False
def _get_random_qids(self, args, count): r = util.apirequest( API_ENDPOINT, { "action": "query", "list": "random", "rnnamespace": 0, "format": "json", "rnlimit": count }) if "query" not in r: return {"error": "Could not get a random item"} else: return r
def entity_request(self, ids): r = util.apirequest( API_ENDPOINT, { "languages": "|".join(self.languages), "action": "wbgetentities", "ids": "|".join(ids), "props": "|".join(self.props), "languagefallback": 1, "format": "json" }) if "success" in r: return r["entities"] else: raise Exception("Invalid or bad API request")
def pagetext(q): r = util.apirequest(WIKI_ENDPOINT, { "format" : "json", "action" : "query", "prop" : "revisions", "titles" : q, "rvprop" : "content", "rvparse" : 1 }) if "-1" in r["query"]["pages"]: return False rev = r["query"]["pages"] rev = next(iter(rev.values())) return _parsehtml(rev["revisions"][0]["*"])
def pagetext(q): r = util.apirequest( WIKI_ENDPOINT, { "format": "json", "action": "query", "prop": "revisions", "titles": q, "rvprop": "content", "rvparse": 1 }) if "-1" in r["query"]["pages"]: return False rev = r["query"]["pages"] rev = next(iter(rev.values())) return _parsehtml(rev["revisions"][0]["*"])
def _linkshere(self, q): r = util.apirequest(API_ENDPOINT, { "action" : "query", "prop" : "linkshere", "titles" : q, "lhnamespace" : 0, "lhshow" : "!redirect", "format" : "json", "lhlimit" : 50 }) if "-1" in r["query"]["pages"]: return False links = iter(r["query"]["pages"].values()).next().get("linkshere", None) if links: return [ i["title"] for i in links ] else: return False
def _linkshere(self, q): r = util.apirequest( API_ENDPOINT, { "action": "query", "prop": "linkshere", "titles": q, "lhnamespace": 0, "lhshow": "!redirect", "format": "json", "lhlimit": 50 }) if "-1" in r["query"]["pages"]: return False links = iter(r["query"]["pages"].values()).next().get( "linkshere", None) if links: return [i["title"] for i in links] else: return False
def query(self, params): r = util.apirequest(API_ENDPOINT, {"q": params["q"]}) status = r["status"] if r["status"]["error"] == "OK": frm, to = int( params["from"]), int(params["from"]) + int(params["size"]) items = r["items"][frm:to] if params["resolvedata"] != False: entity = WikidataEntity() ids = ",".join(map(str, items)) entities = entity.entity({ "q": ids, "language": params["language"] }) return entities else: return items else: return False