Created
January 14, 2021 20:26
-
-
Save Horrendus/3df24161c76179f7c2d207c41a6b6101 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pywikibot | |
from collections import defaultdict | |
AWARDS = { | |
"Hugo Best Novel": "Q255032", | |
"Nebula Best Novel": "Q266012", | |
"Locus Best SF Novel": "Q2576795", | |
"Philip K. Dick Award": "Q1341487" | |
} | |
P_WINNER = "P1346" | |
P_FOR_WORK = "P1686" | |
P_TIME_POINT = "P585" | |
P_TITLE = "P1476" | |
P_AUTHOR = "P50" | |
site = pywikibot.Site("wikidata", "wikidata") | |
repo = site.data_repository() | |
award_winners = defaultdict(dict) | |
def all_award_winners(): | |
for award_name in AWARDS: | |
award_id = AWARDS[award_name] | |
winners_parsed = all_winners(award_id) | |
for winner in winners_parsed: | |
if winner: | |
award_winners[winner[0]][award_id] = winner[1] | |
def all_winners(award_id): | |
item = pywikibot.ItemPage(repo, award_id) | |
item_dict = item.get() | |
winners = item_dict["claims"][P_WINNER] | |
winners_parsed = [winner_data(w) for w in winners] | |
return winners_parsed | |
def winner_data(winner_claim): | |
winner = winner_claim.toJSON() | |
try: | |
winner_qualifiers = winner["qualifiers"] | |
winner_year = time_point_to_year(winner_qualifiers[P_TIME_POINT][0]["datavalue"]["value"]["time"]) | |
winner_work_claim_id = "Q" + str(winner_qualifiers[P_FOR_WORK][0]["datavalue"]["value"]["numeric-id"]) | |
return (winner_work_claim_id, winner_year) | |
except KeyError: | |
print(winner) | |
return None | |
def time_point_to_year(time_point: str) -> int: | |
return int(time_point.split("-")[0][-4:]) | |
all_award_winners() | |
print(award_winners) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment