示例#1
0
文件: entity.py 项目: hay/chantek
    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
示例#2
0
    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
示例#3
0
文件: query.py 项目: hay/chantek
    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
示例#4
0
文件: entity.py 项目: hay/chantek
    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
示例#5
0
文件: search.py 项目: hay/chantek
    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
示例#6
0
文件: entity.py 项目: hay/chantek
    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")
示例#7
0
    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
示例#8
0
    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
示例#9
0
    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")
示例#10
0
文件: bengwiki.py 项目: hay/chantek
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]["*"])
示例#11
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]["*"])
示例#12
0
文件: linkshere.py 项目: hay/chantek
    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
示例#13
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
示例#14
0
    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