Skip to content

Instantly share code, notes, and snippets.

@Horrendus
Created January 14, 2021 20:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Horrendus/3df24161c76179f7c2d207c41a6b6101 to your computer and use it in GitHub Desktop.
Save Horrendus/3df24161c76179f7c2d207c41a6b6101 to your computer and use it in GitHub Desktop.
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