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()
Пример #2
0
    # 選舉區數量
    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,
Пример #5
0
        }
        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 職位
Пример #7
0
     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)
Пример #10
0
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:
Пример #11
0
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:
Пример #12
0
            ]
            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:
Пример #13
0
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)