council_item.addClaim(claim) # 選舉區數量 try: council_item.claims['P4253'] except: claim = pywikibot.Claim(repo, 'P4253') target = pywikibot.WbQuantity(site=site, amount=len(v['constituencies'])) claim.setTarget(target) council_item.addClaim(claim) # county council specific constituency if not cities[county].get('county_councilor_constituency'): county_constituency_label = '%s 의원동정 선거구' % county try: item_id = utils.get_qnumber(wikiarticle=county_constituency_label, lang="ko") if not item_id: raise county_constituency_item = pywikibot.ItemPage(repo, item_id) county_constituency_item.get() if county_constituency_item.labels['ko'] != county_constituency_label: raise except: labels = {"ko": county_constituency_label} item_id = utils.create_item(wikidata_site, labels) county_constituency_item = pywikibot.ItemPage(repo, item_id) county_constituency_item.get() cities[county]['county_councilor_constituency'] = county_constituency_item.id else: county_constituency_item = pywikibot.ItemPage(repo, cities[county]['county_councilor_constituency']) county_constituency_item.get()
# 選舉區數量 try: council_item.claims['P4253'] except: claim = pywikibot.Claim(repo, 'P4253') target = pywikibot.WbQuantity(site=site, amount=len(v['constituencies'])) claim.setTarget(target) council_item.addClaim(claim) # county council specific constituency if not cities[county].get('county_councilor_constituency'): county_constituency_label = '%s區議員選區' % county try: item_id = utils.get_qnumber(wikiarticle=county_constituency_label, lang="zh") if not item_id: raise county_constituency_item = pywikibot.ItemPage(repo, item_id) county_constituency_item.get() if county_constituency_item.labels[ 'zh'] != county_constituency_label: raise except: labels = {"zh": county_constituency_label} item_id = utils.create_item(wikidata_site, labels) county_constituency_item = pywikibot.ItemPage(repo, item_id) county_constituency_item.get() cities[county][ 'county_councilor_constituency'] = county_constituency_item.id else:
# query = ''' # SELECT ?council ?councilLabel ?city ?cityLabel ?councilor_position ?councilor_positionLabel WHERE { # ?council wdt:P31 wd:Q3308596; # wdt:P17 wd:Q865; # wdt:P1001 ?city; # wdt:P527 ?councilor_position. # SERVICE wikibase:label { bd:serviceParam wikibase:language "zh-tw". } # } # ''' wiki_maps_path = 'taiwan/data/city_councils_councilor_maps.json' wiki_maps = json.load(open(wiki_maps_path)) for r in wiki_maps: county_constituency_label = '%s議員選區' % r['cityLabel'] if not r.get('county_constituency'): try: item_id = utils.get_qnumber(wikiarticle=county_constituency_label, lang="zh-tw") if not item_id: raise except: labels = {} for code in ['zh', 'zh-tw', 'zh-hant']: labels[code] = county_constituency_label item_id = utils.create_item(wikidata_site, labels) else: item_id = r['county_constituency'] item = pywikibot.ItemPage(repo, item_id) item.get() print(county_constituency_label, item.id) if r.get('cityLabel_en'): city_item = pywikibot.ItemPage(repo, r['city'].split('/')[-1]) city_item.get()
county_target = pywikibot.ItemPage(repo, v['id']) # county P194 -> council try: county_target.claims['P194'] except: claim = pywikibot.Claim(repo, 'P194') claim.setTarget(council_item) county_target.addClaim(claim) # councilor position if not v.get('councilor_position'): position = '%s議員' % county try: match = False for q_id in utils.get_qnumber(wikiarticle=position, lang="zh", limit=None): position_item = pywikibot.ItemPage(repo, q_id) position_item.get() if position_item.claims.get('P31') and 'Q4164871' in [ x.target.id for x in position_item.claims['P31'] ]: # Q4164871 職位 match = True break if not match: raise except: position_labels = {'en': '%s councilor' % v['en']} for code in ['zh', 'zh-tw', 'zh-hant']: position_labels[code] = position position_item_id = utils.create_item(wikidata_site,
} for x in cities } people = json.load(open('hk/data/flacs_councilor.json')) site = pywikibot.Site("zh", "wikipedia") wikidata_site = pywikibot.Site("wikidata", "wikidata") repo = site.data_repository() for county, v in cities.items(): print(county) term_name = '第%d屆%s議員' % (ad, county) if not cities[county].get('councilor_terms', {}).get(ad): try: item_id = utils.get_qnumber(wikiarticle=term_name, lang='zh') if not item_id: raise item = pywikibot.ItemPage(repo, item_id) item.get() if item.labels['zh'] != term_name: raise except: labels = { 'en': '%s Councilor in %s' % (utils.ordinal_number(ad), cities[county]['en']) } for code in ['zh', 'zh-tw', 'zh-hant']: labels[code] = term_name item_id = utils.create_item(wikidata_site, labels)
site = pywikibot.Site("zh", "wikipedia") wikidata_site = pywikibot.Site("wikidata", "wikidata") repo = site.data_repository() for row in c.fetchall(): r = row[0] print(r['county']) council_name = '%s議會' % r['county'] page = pywikibot.Page(site, council_name) item = pywikibot.ItemPage.fromPage(page) print(council_name, item.id) county_page = pywikibot.Page(site, r['county']) try: county_target = pywikibot.ItemPage.fromPage(county_page) except: county_q = utils.get_qnumber(wikiarticle=r['county'], lang="zh-tw") county_target = pywikibot.ItemPage(wikidata_site, county_q) # councilor position position = '%s議員' % r['county'] try: match = False for q_id in utils.get_qnumber(wikiarticle=position, lang="zh-tw", limit=None): position_item = pywikibot.ItemPage(repo, q_id) position_item.get() if position_item.claims.get('P31') and 'Q4164871' in [ x.target.id for x in position_item.claims['P31'] ]: # Q4164871 職位
party_maps[party] = None continue try: page = pywikibot.Page(site, party) item = pywikibot.ItemPage.fromPage(page) item.get() print(item) if 'Q884' not in [x.target.id for x in item.claims['P17']] or [ x.target.id for x in item.claims['P31'] if x.target.id in ['Q4167410', 'Q13406463'] ]: raise except: match = False for item_id in utils.get_qnumber(wikiarticle=party, lang="ko", limit=None): print(item_id) item = pywikibot.ItemPage(repo, item_id) item.get() try: if 'Q7278' in [ x.target.id for x in item.claims['P31'] ] and 'Q884' in [x.target.id for x in item.claims['P17']]: match = True break except: continue if not match: raise print(item)
''') site = pywikibot.Site("zh", "wikipedia") wikidata_site = pywikibot.Site("wikidata", "wikidata") repo = site.data_repository() for i, row in enumerate(c.fetchall()): r = row[0] print(i, r['county']) ad = utils.get_term_ad(r['county'], r['election_year']) term_name = '第%d屆%s議員' % (ad, r['county']) term_alias = '第%s屆%s議員' % (ref[ad-1], r['county']) term_description = '%s~%s%s議員' % (r['start_at'].split('-')[0], r['end_at'].split('-')[0] if r.get('end_at') else '', r['county']) if r.get('start_at') else None council_name = '%s議會' % r['county'] try: item_id = utils.get_qnumber(wikiarticle=term_name, lang="zh-tw") if not item_id: raise else: item = pywikibot.ItemPage(repo, item_id) item.get() if item.labels['zh'] != term_name: raise except: labels = {"zh": term_name, "zh-tw": term_name, "zh-hant": term_name} item_id = utils.create_item(wikidata_site, labels) item = pywikibot.ItemPage(repo, item_id) item.get() print(term_name, item.id) # aliases
qualifier.setTarget(target) claim.addQualifier(qualifier) time.sleep(sleep_second) # terms try: claim.qualifiers['P2937'] except: qualifier = pywikibot.Claim(repo, 'P2937') qualifier.setTarget(term_target) claim.addQualifier(qualifier) time.sleep(sleep_second) # constituency try: qualifier = claim.qualifiers['P768'] except: qualifier = pywikibot.Claim(repo, 'P768') if not person.get('special_constituency'): electoral_area_title = '%s%s區議員選區' % (person['county'], person['town']) else: electoral_area_title = '%s當然議員' % person['county'] item_id = utils.get_qnumber(wikiarticle=electoral_area_title, lang="zh") target = pywikibot.ItemPage(repo, item_id) qualifier.setTarget(target) claim.addQualifier(qualifier) time.sleep(sleep_second) json.dump(people, open(people_path, 'w'), indent=2, ensure_ascii=False)
import json import time import pywikibot from common import db_settings, utils conn = db_settings.con_ly() c = conn.cursor() sleep_second = 5 site = pywikibot.Site("zh", "wikipedia") repo = site.data_repository() ad = 9 election_years = [1989, 1992, 1995, 1998, 2001, 2004, 2008, 2012, 2016, 2020] election_title = '%d年立法委員選舉' % election_years[ad - 1] election_id = utils.get_qnumber(wikiarticle=election_title, lang="zh-tw") election_target = pywikibot.ItemPage(repo, election_id) term_id = utils.get_qnumber(wikiarticle="第%d屆立法委員" % ad, lang="zh-tw") term_target = pywikibot.ItemPage(repo, term_id) def person_qid_from_db(name): c.execute( ''' select lm.data->>'wikidata_qid' from legislator_legislatordetail l left join legislator_legislator lm on l.legislator_id = lm.uid where l.ad = %s and l.name = %s ''', [ad, name]) r = c.fetchone() if r:
areas = set() for x in people: if x['type'] == 'region': if x['county'] != x['constituency']: areas.add('%s %s' % (x['county'], x['constituency'])) else: areas.add('%s' % x['county']) print(len(areas)) for i, area in enumerate(areas): print(i, area) county = area.split()[0] try: match = False for item_id in utils.get_qnumber(wikiarticle=area, lang="ko", limit=None): print(item_id) item = pywikibot.ItemPage(repo, item_id) item.get() if item.labels['ko'] == area and len(item.claims.get( 'P31', [])) == 1 and 'Q50240982' in [ x.target.id for x in item.claims['P31'] ]: match = True break if not match: create = input('create new entity?(y/n)') if create == 'y': raise except:
] if b_month == 1 and b_day == 1: b_year_target = pywikibot.WbTime(year=b_year, precision='year') claim.setTarget(b_year_target) else: b_target = pywikibot.WbTime(year=b_year, month=b_month, day=b_day, precision='day') claim.setTarget(b_target) item.addClaim(claim) # term ad = utils.get_term_ad(person['county'], person['election_year']) term_name = '第%d屆%s議員' % (ad, person['county']) term_id = utils.get_qnumber(wikiarticle=term_name, lang="zh-tw") term_target = pywikibot.ItemPage(repo, term_id) # term_start term_start_year, term_start_month, term_start_day = [ int(x) for x in person['term_start'].split('-') ] term_start_target = pywikibot.WbTime(year=term_start_year, month=term_start_month, day=term_start_day, precision='day') # XX縣市議員 position_held_id = position_maps['%s議員' % person['county']] try: match = False for i, x in enumerate(item.claims['P39']): if x.target.id == position_held_id:
site = pywikibot.Site("zh", "wikipedia") repo = site.data_repository() wikidata_site = pywikibot.Site("wikidata", "wikidata") wikidata_repo = wikidata_site.data_repository() for r in c.fetchall(): r = r[0] print( r['county'], r['constituency'], ) # constituency if r['county'] == '全國不分區': constituency_label = r['county'] constituency_id = utils.get_qnumber(wikiarticle=constituency_label, lang="zh-tw") print(constituency_id) elif r['county'] in ['平地原住民', '山地原住民']: constituency_label = '%s立法委員選區' % r['county'] constituency_id = utils.get_qnumber(wikiarticle=constituency_label, lang="zh-tw") item = pywikibot.ItemPage(wikidata_site, constituency_id) item.get() # 國家 try: item.claims['P17'] except: claim = pywikibot.Claim(repo, 'P17') target = pywikibot.ItemPage(repo, 'Q865') # Q865 Taiwan claim.setTarget(target)