def get_time(claims, propertyName, locale, defaultValue=None): propValue = claims.get(propertyName, {}) if len(propValue) == 0: return defaultValue result = [] for e in propValue: mainsnak = e.get('mainsnak', {}) datavalue = mainsnak.get('datavalue', {}) if datavalue is not None: value = datavalue.get('value', '') result.append(value.get('time', '')) if len(result) == 0: date_string = defaultValue else: date_string = ', '.join(result) try: parsed_date = datetime.strptime(date_string, "+%Y-%m-%dT%H:%M:%SZ") except: if date_string.startswith('-'): return date_string.split('T')[0] try: parsed_date = dateutil_parse(date_string, fuzzy=False, default=False) except: logger.debug('could not parse date %s', date_string) return date_string.split('T')[0] return format_date_by_locale(parsed_date, locale)
def getDetail(jsonresponse, wikidata_id, language, locale): results = [] urls = [] attributes = [] result = jsonresponse.get('entities', {}).get(wikidata_id, {}) title = result.get('labels', {}).get(language, {}).get('value', None) if title is None: title = result.get('labels', {}).get('en', {}).get('value', None) if title is None: return results description = result\ .get('descriptions', {})\ .get(language, {})\ .get('value', None) if description is None: description = result\ .get('descriptions', {})\ .get('en', {})\ .get('value', '') claims = result.get('claims', {}) official_website = get_string(claims, 'P856', None) if official_website is not None: urls.append({'title': 'Official site', 'url': official_website}) results.append({'title': title, 'url': official_website}) wikipedia_link_count = 0 if language != 'en': wikipedia_link_count += add_url( urls, 'Wikipedia (' + language + ')', get_wikilink(result, language + 'wiki')) wikipedia_en_link = get_wikilink(result, 'enwiki') wikipedia_link_count += add_url(urls, 'Wikipedia (en)', wikipedia_en_link) if wikipedia_link_count == 0: misc_language = get_wiki_firstlanguage(result, 'wiki') if misc_language is not None: add_url(urls, 'Wikipedia (' + misc_language + ')', get_wikilink(result, misc_language + 'wiki')) if language != 'en': add_url(urls, 'Wiki voyage (' + language + ')', get_wikilink(result, language + 'wikivoyage')) add_url(urls, 'Wiki voyage (en)', get_wikilink(result, 'enwikivoyage')) if language != 'en': add_url(urls, 'Wikiquote (' + language + ')', get_wikilink(result, language + 'wikiquote')) add_url(urls, 'Wikiquote (en)', get_wikilink(result, 'enwikiquote')) add_url(urls, 'Commons wiki', get_wikilink(result, 'commonswiki')) add_url(urls, 'Location', get_geolink(claims, 'P625', None)) add_url( urls, 'Wikidata', 'https://www.wikidata.org/wiki/' + wikidata_id + '?uselang=' + language) musicbrainz_work_id = get_string(claims, 'P435') if musicbrainz_work_id is not None: add_url(urls, 'MusicBrainz', 'http://musicbrainz.org/work/' + musicbrainz_work_id) musicbrainz_artist_id = get_string(claims, 'P434') if musicbrainz_artist_id is not None: add_url(urls, 'MusicBrainz', 'http://musicbrainz.org/artist/' + musicbrainz_artist_id) musicbrainz_release_group_id = get_string(claims, 'P436') if musicbrainz_release_group_id is not None: add_url( urls, 'MusicBrainz', 'http://musicbrainz.org/release-group/' + musicbrainz_release_group_id) musicbrainz_label_id = get_string(claims, 'P966') if musicbrainz_label_id is not None: add_url(urls, 'MusicBrainz', 'http://musicbrainz.org/label/' + musicbrainz_label_id) # musicbrainz_area_id = get_string(claims, 'P982') # P1407 MusicBrainz series ID # P1004 MusicBrainz place ID # P1330 MusicBrainz instrument ID # P1407 MusicBrainz series ID postal_code = get_string(claims, 'P281', None) if postal_code is not None: attributes.append({'label': 'Postal code(s)', 'value': postal_code}) date_of_birth = get_time(claims, 'P569', None) if date_of_birth is not None: date_of_birth = format_date_by_locale(date_of_birth[8:], locale) attributes.append({'label': 'Date of birth', 'value': date_of_birth}) date_of_death = get_time(claims, 'P570', None) if date_of_death is not None: date_of_death = format_date_by_locale(date_of_death[8:], locale) attributes.append({'label': 'Date of death', 'value': date_of_death}) if len(attributes) == 0 and len(urls) == 2 and len(description) == 0: results.append({ 'url': urls[0]['url'], 'title': title, 'content': description }) else: results.append({ 'infobox': title, 'id': wikipedia_en_link, 'content': description, 'attributes': attributes, 'urls': urls }) return results
def getDetail(jsonresponse, wikidata_id, language, locale): results = [] urls = [] attributes = [] result = jsonresponse.get('entities', {}).get(wikidata_id, {}) title = result.get('labels', {}).get(language, {}).get('value', None) if title is None: title = result.get('labels', {}).get('en', {}).get('value', None) if title is None: return results description = result\ .get('descriptions', {})\ .get(language, {})\ .get('value', None) if description is None: description = result\ .get('descriptions', {})\ .get('en', {})\ .get('value', '') claims = result.get('claims', {}) official_website = get_string(claims, 'P856', None) if official_website is not None: urls.append({'title': 'Official site', 'url': official_website}) results.append({'title': title, 'url': official_website}) wikipedia_link_count = 0 if language != 'en': wikipedia_link_count += add_url(urls, 'Wikipedia (' + language + ')', get_wikilink(result, language + 'wiki')) wikipedia_en_link = get_wikilink(result, 'enwiki') wikipedia_link_count += add_url(urls, 'Wikipedia (en)', wikipedia_en_link) if wikipedia_link_count == 0: misc_language = get_wiki_firstlanguage(result, 'wiki') if misc_language is not None: add_url(urls, 'Wikipedia (' + misc_language + ')', get_wikilink(result, misc_language + 'wiki')) if language != 'en': add_url(urls, 'Wiki voyage (' + language + ')', get_wikilink(result, language + 'wikivoyage')) add_url(urls, 'Wiki voyage (en)', get_wikilink(result, 'enwikivoyage')) if language != 'en': add_url(urls, 'Wikiquote (' + language + ')', get_wikilink(result, language + 'wikiquote')) add_url(urls, 'Wikiquote (en)', get_wikilink(result, 'enwikiquote')) add_url(urls, 'Commons wiki', get_wikilink(result, 'commonswiki')) add_url(urls, 'Location', get_geolink(claims, 'P625', None)) add_url(urls, 'Wikidata', 'https://www.wikidata.org/wiki/' + wikidata_id + '?uselang=' + language) musicbrainz_work_id = get_string(claims, 'P435') if musicbrainz_work_id is not None: add_url(urls, 'MusicBrainz', 'http://musicbrainz.org/work/' + musicbrainz_work_id) musicbrainz_artist_id = get_string(claims, 'P434') if musicbrainz_artist_id is not None: add_url(urls, 'MusicBrainz', 'http://musicbrainz.org/artist/' + musicbrainz_artist_id) musicbrainz_release_group_id = get_string(claims, 'P436') if musicbrainz_release_group_id is not None: add_url(urls, 'MusicBrainz', 'http://musicbrainz.org/release-group/' + musicbrainz_release_group_id) musicbrainz_label_id = get_string(claims, 'P966') if musicbrainz_label_id is not None: add_url(urls, 'MusicBrainz', 'http://musicbrainz.org/label/' + musicbrainz_label_id) # musicbrainz_area_id = get_string(claims, 'P982') # P1407 MusicBrainz series ID # P1004 MusicBrainz place ID # P1330 MusicBrainz instrument ID # P1407 MusicBrainz series ID postal_code = get_string(claims, 'P281', None) if postal_code is not None: attributes.append({'label': 'Postal code(s)', 'value': postal_code}) date_of_birth = get_time(claims, 'P569', None) if date_of_birth is not None: date_of_birth = format_date_by_locale(date_of_birth[8:], locale) attributes.append({'label': 'Date of birth', 'value': date_of_birth}) date_of_death = get_time(claims, 'P570', None) if date_of_death is not None: date_of_death = format_date_by_locale(date_of_death[8:], locale) attributes.append({'label': 'Date of death', 'value': date_of_death}) if len(attributes) == 0 and len(urls) == 2 and len(description) == 0: results.append({ 'url': urls[0]['url'], 'title': title, 'content': description }) else: results.append({ 'infobox': title, 'id': wikipedia_en_link, 'content': description, 'attributes': attributes, 'urls': urls }) return results