示例#1
0
 def make_pywikibot_item(self, value):
     val_item = None
     if isinstance(value, list) and len(value) == 1:
         value = value[0]
     if utils.string_is_q_item(value):
         val_item = self.make_q_item(value)
     elif value == "novalue":
         val_item = value
     elif isinstance(value, dict) and 'monolingual_value' in value:
         text = value['monolingual_value']
         language = value['lang']
         val_item = pywikibot.WbMonolingualText(text=text,
                                                language=language)
     elif isinstance(value, dict) and 'quantity_value' in value:
         number = value['quantity_value']
         if 'unit' in value:
             unit = self.wdstuff.QtoItemPage(value["unit"])
         else:
             unit = None
         val_item = pywikibot.WbQuantity(amount=number,
                                         unit=unit,
                                         site=self.repo)
     elif isinstance(value, dict) and 'date_value' in value:
         date_dict = value["date_value"]
         val_item = pywikibot.WbTime(year=date_dict.get("year"),
                                     month=date_dict.get("month"),
                                     day=date_dict.get("day"))
     elif value == "novalue":
         #  raise NotImplementedError
         #  implement Error
         print("Status: novalue will be added here")
     else:
         val_item = value
     return val_item
def create_claim(property=None,
                 value=None,
                 item=None,
                 quantity=None,
                 repo=REPO,
                 site=SITE,
                 year=None,
                 month=None,
                 day=None,
                 text=None,
                 language=None):

    claim = pywikibot.Claim(repo, property)

    if item is not None:
        value = pywikibot.ItemPage(repo, item)
    elif quantity is not None:
        value = pywikibot.WbQuantity(quantity, site=site)
    elif year is not None:
        value = pywikibot.WbTime(year=year, month=month, day=day)
    elif text is not None:
        if language is not None:
            value = pywikibot.WbMonolingualText(text, language)

    claim.setTarget(value)

    return claim
示例#3
0
    def addTitle(self, item, metadata):
        """
        Add the title (P1476) to the item. For now just skip items that already have a title
        :param item: The artwork item to work on
        :param metadata: All the metadata about this artwork, should contain the title field as a dict
        :return:
        """
        claims = item.get().get('claims')

        if u'P1476' in claims:
            # Already has a title. Don't care if it's the same contents and or language for now
            return

        if metadata.get(u'title'):
            for lang in metadata.get(u'title'):
                # To prevent any empty titles
                if metadata.get(u'title').get(lang):
                    try:
                        newtitle = pywikibot.WbMonolingualText(text=metadata.get(u'title').get(lang).strip(),
                                                               language=lang,
                                                               )
                        newclaim = pywikibot.Claim(self.repo, u'P1476')
                        newclaim.setTarget(newtitle)
                        pywikibot.output('Adding title to %s' % item)
                        item.addClaim(newclaim)
                        self.addReference(item, newclaim, metadata[u'refurl'])
                    except pywikibot.exceptions.OtherPageSaveError:
                        pywikibot.output(u'The title was malformed, skipping it')
                        pass
示例#4
0
 def act_wd_imatge_peu(self, fitxer, peu):
     if self.item == None:
         print("Error, item no seleccionat")
         return
     print("Posant imatge a Wikidata")
     nouclm = pywikibot.Claim(self.repowd, 'P18')
     nouclm.setTarget(fitxer)
     importatde = pywikibot.Claim(self.repowd, 'P143')
     importatde.setTarget(pywikibot.ItemPage(self.repowd, 'Q199693'))
     # importat de viquipèdia en català
     lrefs = [importatde]
     self.item.addClaim(nouclm)
     nouclm.addSources(lrefs)
     if peu.strip() != "":
         qualif = pywikibot.Claim(self.repowd, 'P2096')
         qualif.setTarget(
             pywikibot.WbMonolingualText(text=peu, language='ca'))
         minuts = 1
         # Wikidata dóna molts timeouts, hem de posar més controls
         while True:
             try:
                 nouclm.addQualifier(qualif)
                 break
             except pywikibot.exceptions.MaxlagTimeoutError:
                 time.sleep(minuts * 120)
                 minuts = minuts + 1
                 nouclm.addQualifier(qualif)
 def test_set_WbMonolingualText(self):
     """Test setting claim of monolingualtext type."""
     wikidata = self.get_repo()
     claim = pywikibot.Claim(wikidata, 'P1450')
     self.assertEqual(claim.type, 'monolingualtext')
     target = pywikibot.WbMonolingualText(text='Test this!', language='en')
     claim.setTarget(target)
     self.assertEqual(claim.target, target)
示例#6
0
    def make_monolingual_item(self, quantity):
        """
        Create claim for a monolingual text.

        quantity: {'monolingual_value': 'The bestest text', 'lang': 'en'}
        """
        return pywikibot.WbMonolingualText(text=quantity['monolingual_value'],
                                           language=quantity['lang'])
示例#7
0
    def test_format_claim_value_monolingual(self):
        self.set_claim_type('monolingualtext')
        expected_data = pywikibot.WbMonolingualText('Foo', 'sv')

        data = format_claim_value(self.mock_claim, {
            'text': 'Foo',
            'lang': 'sv'
        })
        self.assertEqual(data, expected_data)
示例#8
0
def format_claim_value(claim, value):
    """
    Reformat the internal claim as the relevant pywikibot object.

    @param claim: pywikibot.Claim to which value should be added
    @param value: str|dict encoding the value to be added
    @return: pywikibot representation of the claim value
    """
    repo = claim.repo
    if claim.type == 'wikibase-item':
        return pywikibot.ItemPage(repo, value)
    elif claim.type == 'commonsMedia':
        return pywikibot.FilePage(_get_commons(), value)
    elif claim.type == 'geo-shape':
        return pywikibot.WbGeoShape(
            pywikibot.Page(repo.geo_shape_repository(), value))
    elif claim.type == 'tabular-data':
        return pywikibot.WbTabularData(
            pywikibot.Page(repo.tabular_data_repository(), value))
    elif claim.type == 'monolingualtext':
        if common.is_str(value):
            text, _, lang = value.partition('@')
            value = {'text': text, 'lang': lang}

        return pywikibot.WbMonolingualText(value.get('text'),
                                           value.get('lang'))
    elif claim.type == 'globe-coordinate':
        if common.is_str(value):
            parts = value.replace(',', '@').split('@')
            value = {parts[1]: parts[0], parts[3]: parts[2]}

        # set precision to the least precise of the values
        precision = max(coord_precision(value.get('lat')),
                        coord_precision(value.get('lon')))
        return pywikibot.Coordinate(float(value.get('lat')),
                                    float(value.get('lon')),
                                    precision=precision)
    elif claim.type == 'quantity':
        if common.is_str(value):
            amount, _, unit = value.partition('@')
            value = {'amount': amount, 'unit': unit}

        if value.get('unit'):
            return pywikibot.WbQuantity(value.get('amount'),
                                        pywikibot.ItemPage(
                                            repo, value.get('unit')),
                                        site=repo)
        return pywikibot.WbQuantity(value.get('amount'), site=repo)
    elif claim.type == 'time':
        # note that Wikidata only supports precision down to day
        # as a result pywikibot.WbTime.fromTimestr will produce an incompatible
        # result for a fully qualified timestamp/timestr
        return iso_to_wbtime(value)

    # simple strings
    return value
示例#9
0
def create_target(ptype, target_str):
    if ptype == "item":
        target = pywikibot.ItemPage(wikidata, target_str)
    elif ptype == "string":
        target = target_str
    elif ptype == "entext":
        target = pywikibot.WbMonolingualText(target_str, "en")
    else:
        raise NotImplementedError(ptype)
    return target
示例#10
0
    def add_title_claim(self, painting_item, painting):
        """Add a title/P1476 claim based on dcTitle.

        @param painting_item: item to which claim is added
        @type painting_item: pywikibot.ItemPage
        @param painting: information object for the painting
        @type painting: dict
        """
        dc_title = painting['object']['proxies'][0]['dcTitle']
        titles = []
        for lang, title in dc_title.iteritems():
            titles.append(pywikibot.WbMonolingualText(title[0], lang))
        for title in titles:
            self.wd.addNewClaim(u'P1476', WD.Statement(title), painting_item,
                                self.make_europeana_reference(painting))
示例#11
0
    def test_WbMonolingualText_edit(self):
        """Attempt adding a monolingual text with valid input."""
        # Clean the slate in preparation for test.
        testsite = self.get_repo()
        item = self._clean_item(testsite, 'P271')

        # set new claim
        claim = pywikibot.page.Claim(testsite, 'P271', datatype='monolingualtext')
        target = pywikibot.WbMonolingualText(text='Test this!', language='en')
        claim.setTarget(target)
        item.addClaim(claim)

        # confirm new claim
        item.get(force=True)
        claim = item.claims['P271'][0]
        self.assertEqual(claim.getTarget(), target)
示例#12
0
def addClaim(repo='', item='', claim='', value='', valuelang='', ref=''):
    if repo and item and claim and value:
        print("Adding claim", claim, "value", value.encode('utf-8'))
        claimx = pywikibot.Claim(repo, claim)
        if re.search(r'\d\d\d\d-\d\d-\d\d', value):
            target = pywikibot.WbTime(year=int(value.split('-')[0]),
                                      month=int(value.split('-')[1]),
                                      day=int(value.split('-')[2]))
        elif value.startswith('Q'):
            target = pywikibot.ItemPage(repo, value)
        elif valuelang:
            target = pywikibot.WbMonolingualText(text=value,
                                                 language=valuelang)
        else:
            target = value
        claimx.setTarget(target)
        item.addClaim(claimx, summary='BOT - Adding 1 claim')
        if ref:
            addReference(repo=repo, claim=claimx, ref=ref)
示例#13
0
def get_or_create_sources(
    claim: Claim,
    url: str,
    retrieved,
    edit_group_hash: str,
    title: Optional[str] = None,
    date: Optional[WbTime] = None,
):
    """
    Gets or creates a `source` under the property `claim` to `url`
    """
    all_sources = []

    src_p = Properties.reference_url

    for i in claim.sources or []:
        if src_p in i:
            all_sources.append(i[src_p][0])

    for src_url in all_sources:
        if src_url.target_equals(url):
            break
    else:
        src_url = Claim(Settings.wikidata_repo, src_p)
        src_url.setTarget(url)
        src_retrieved = Claim(Settings.wikidata_repo, Properties.retrieved)
        src_retrieved.setTarget(retrieved)

        sources = [src_url, src_retrieved]

        if title:
            src_title = Claim(Settings.wikidata_repo, Properties.title)
            src_title.setTarget(pywikibot.WbMonolingualText(title, "en"))
            sources.append(src_title)
        if date:
            src_date = Claim(Settings.wikidata_repo,
                             Properties.publication_date)
            src_date.setTarget(date)
            sources.append(src_date)
        claim.addSources(sources, summary=get_sumary(edit_group_hash))

    return src_url
示例#14
0
 def act_wd_audio_peu(self, fitxer, peu):
     if self.item == None:
         print("Error, item no seleccionat")
         return
     print(
         "********** ATENCIO Posant àudio a Wikidata **************************"
     )
     nouclm = pywikibot.Claim(self.repowd, 'P51')
     nouclm.setTarget(fitxer)
     importatde = pywikibot.Claim(self.repowd, 'P143')
     importatde.setTarget(pywikibot.ItemPage(self.repowd, 'Q199693'))
     # importat de viquipèdia en català
     lrefs = [importatde]
     self.item.addClaim(nouclm)
     nouclm.addSources(lrefs)
     if peu.strip() != "":
         qualif = pywikibot.Claim(self.repowd, 'P2096')
         qualif.setTarget(
             pywikibot.WbMonolingualText(text=peu, language='ca'))
         nouclm.addQualifier(qualif)
示例#15
0
def get_or_create_sources(repo, claim, url, retrieved, title=None, date=None):
    """
    Gets or creates a `source` under the property `claim` to `url`
    """
    all_sources = []

    src_p = Settings.properties["reference URL"]
    retrieved_p = Settings.properties["retrieved"]
    title_p = Settings.properties["title"]
    date_p = Settings.properties["publication date"]

    # We could have many sources, so let's
    if claim.sources:
        for i in claim.sources:
            if src_p in i:
                all_sources.append(i[src_p][0])
    else:
        all_sources = []

    for src_url in all_sources:
        if src_url.target_equals(url):
            break
    else:
        src_url = pywikibot.Claim(repo, src_p)
        src_url.setTarget(url)
        src_retrieved = pywikibot.Claim(repo, retrieved_p)
        src_retrieved.setTarget(retrieved)

        sources = [src_url, src_retrieved]

        if title:
            src_title = pywikibot.Claim(repo, title_p)
            src_title.setTarget(pywikibot.WbMonolingualText(title, "en"))
            sources.append(src_title)
        if date:
            src_date = pywikibot.Claim(repo, date_p)
            src_date.setTarget(date)
            sources.append(src_date)
        claim.addSources(sources)

    return src_url
示例#16
0
 def act_wd_peu(self, fitxer, peu, propietat):
     if len(peu) == 0:
         return
     if self.item == None:
         print("Error, item no seleccionat")
         return
     #print self.item_dict
     if propietat in self.item.claims:  # si hi ha imatge a wikidata
         clm_dict = self.item_dict["claims"]
         clm_fitxer = clm_dict[propietat]  # això és tot el paquet d'imatges
         for clm in clm_fitxer:  # pot haver-hi més d'una imatge
             tg = clm.getTarget()
             #print tg
             #print type(tg)
             #print dir(tg)
             nom_fitxer = tg.title(with_ns=False)
             if varglobals.comp_fitx(
                     nom_fitxer, fitxer):  # aquest és el fitxer on hem de
                 # posar el peu de foto
                 print("Posant peu d'imatge a Wikidata")
                 qualif = pywikibot.Claim(self.repowd, 'P2096')
                 qualif.setTarget(
                     pywikibot.WbMonolingualText(text=peu, language='ca'))
                 clm.addQualifier(qualif)
示例#17
0
    def addImageSuggestion(self, item, metadata):
        """
        Add  Commons compatible image available at URL (P4765) to an image that can be uploaded to Commons

        It will also add the suggestion if the item already has an image, but new one is of much better quality

        :param item: The artwork item to work on
        :param metadata: All the metadata about this artwork, should contain the imageurl field
        :return: Nothing, updates item in place
        """
        claims = item.get().get('claims')

        if not metadata.get(u'imageurl'):
            # Nothing to add
            return
        if u'P4765' in claims:
            # Already has a suggestion
            return
        if u'P6500' in claims:
            # Already has a non-free artwork image URL
            return

        if u'P18' in claims and not metadata.get(u'imageurlforce'):
            if not metadata.get(u'imageupgrade'):
                return
            newimage = requests.get(metadata.get(u'imageurl'), stream=True)
            if not newimage.headers.get('Content-length'):
                return
            if not newimage.headers.get('Content-length').isnumeric():
                return
            newimagesize = int(newimage.headers['Content-length'])
            #print (u'Size of the new image is %s according to the headers' % (newimagesize,))
            if newimagesize < 500000:
                # Smaller than 500KB is just too small to bother check to replace
                return

            for imageclaim in claims.get(u'P18'):
                currentsize = imageclaim.getTarget().latest_file_info.size
                #print (u'Size of the current image is %s' % (currentsize,))
                # New image should at least be 4 times larger
                if currentsize * 4 > newimagesize:
                    return

        newclaim = pywikibot.Claim(self.repo, u'P4765')
        newclaim.setTarget(metadata[u'imageurl'])
        pywikibot.output('Adding commons compatible image available at URL claim to %s' % item)
        item.addClaim(newclaim)

        if metadata.get(u'imageurlformat'):
            newqualifier = pywikibot.Claim(self.repo, u'P2701')
            newqualifier.setTarget(pywikibot.ItemPage(self.repo, metadata.get(u'imageurlformat')))
            pywikibot.output('Adding new qualifier claim to %s' % item)
            newclaim.addQualifier(newqualifier)

        newqualifier = pywikibot.Claim(self.repo, u'P2699')
        newqualifier.setTarget(metadata[u'imagesourceurl'])
        pywikibot.output('Adding new qualifier claim to %s' % item)
        newclaim.addQualifier(newqualifier)

        if metadata.get('title'):
            if metadata.get('title').get(u'en'):
                title = pywikibot.WbMonolingualText(metadata.get('title').get(u'en'), u'en')
            else:
                lang = list(metadata.get('title').keys())[0]
                title = pywikibot.WbMonolingualText(metadata.get('title').get(lang), lang)
            newqualifier = pywikibot.Claim(self.repo, u'P1476')
            newqualifier.setTarget(title)
            pywikibot.output('Adding new qualifier claim to %s' % item)
            newclaim.addQualifier(newqualifier)

        if metadata.get('creatorname'):
            newqualifier = pywikibot.Claim(self.repo, u'P2093')
            newqualifier.setTarget(metadata.get('creatorname'))
            pywikibot.output('Adding new qualifier claim to %s' % item)
            newclaim.addQualifier(newqualifier)

        if metadata.get(u'imageurllicense'):
            newqualifier = pywikibot.Claim(self.repo, u'P275')
            newqualifier.setTarget(pywikibot.ItemPage(self.repo, metadata.get(u'imageurllicense')))
            pywikibot.output('Adding new qualifier claim to %s' % item)
            newclaim.addQualifier(newqualifier)

        if metadata.get(u'imageoperatedby'):
            newqualifier = pywikibot.Claim(self.repo, u'P137')
            newqualifier.setTarget(pywikibot.ItemPage(self.repo, metadata.get(u'imageoperatedby')))
            pywikibot.output('Adding new qualifier claim to %s' % item)
            newclaim.addQualifier(newqualifier)
示例#18
0
 def _make_WbMonolingualText_claim(self, repo, text, language):
     """Make a WbMonolingualText and set its value."""
     claim = pywikibot.page.Claim(repo, 'P271', datatype='monolingualtext')
     target = pywikibot.WbMonolingualText(text=text, language=language)
     claim.setTarget(target)
     return claim
示例#19
0
        # add source to claim
        source = pywikibot.Claim(repo, url_prop_id)
        source.setTarget(source_url_for_wikidata)

        # add retrieved date to claim
        retrieved = pywikibot.Claim(repo, retrieved_prop_id)
        today = datetime.datetime.today()
        retrieved_date = pywikibot.WbTime(year=today.year,
                                          month=today.month,
                                          day=today.day)
        retrieved.setTarget(retrieved_date)

        # add title source_title_text = "Statistisches Amt Basel-Stadt: Bevoelkerungsstatistik", source, retreived to claim
        title = pywikibot.Claim(repo, title_prop_id)
        title.setTarget(
            pywikibot.WbMonolingualText(text=source_title_text, language='de'))
        population_claim.addSources([source, retrieved, title])

        # set preferred rank for latest date only
        if (date == latest_date):
            population_claim.changeRank("preferred")
    else:
        print("Population claim already exists on %s for year %s" %
              (item_id, date.isoformat()))
        # set rank to normal if not latest year
        if (population_claim.getRank() == "preferred" and date != latest_date):
            print(
                "This is not the latest date claim, changing rank from preferred to normal"
            )
            population_claim.changeRank("normal")
        if (population_claim.getRank() != "preferred" and date == latest_date):
def test_edit_item_1():

    site = pywikibot.Site('wikidata', "wikidata")
    repo = site.data_repository()
    item = pywikibot.ItemPage(repo, 'Q4115189')  # Wikidata Sandbox

    # Crate claim
    population = 'P1082'  # pid: property_id
    claim = pywikibot.Claim(repo, population)  # , rank='preferred')
    # value = to_value[insee_code]
    value = 7
    quantity = pywikibot.WbQuantity(value, site=site)
    # print(type(quantity))
    claim.setTarget(quantity)
    # TODO: Remove if population is not the last one
    # claim.setRank('preferred')
    #item.addClaim(claim, summary="Add population 2015")
    # claim.changeRank('preferred')

    # Create qualifier
    point_in_time = 'P585'
    qualifier = pywikibot.Claim(repo, point_in_time)
    date = pywikibot.WbTime(year=2015, month=1, day=1)
    qualifier.setTarget(date)
    # claim.addQualifier(qualifier, summary=u'Adding a qualifier.')
    # set_qualifiers
    qualifier.isQualifier = True
    claim.qualifiers[qualifier.getID()] = [qualifier]

    # Create source
    stated_in = pywikibot.Claim(repo, 'P248')
    insee = pywikibot.ItemPage(repo, 'Q156616')
    stated_in.setTarget(insee)

    title = pywikibot.Claim(repo, 'P1476')
    text = pywikibot.WbMonolingualText("Recensement de la population 2015",
                                       'fr')  # monolingual text
    title.setTarget(text)

    publication_date = pywikibot.Claim(repo, 'P577')
    date = pywikibot.WbTime(year=2017, month=12, day=27)
    publication_date.setTarget(date)

    # claim.addSources([statedin, publication_date], summary="Adding sources.")
    # claim.addSources([statedin], summary="Adding sources.")
    # claim.addSources([statedin, title, publication_date], summary="Adding sources.")

    # set_source
    claims = [stated_in, title, publication_date]
    source = defaultdict(list)
    for c in claims:
        c.isReference = True
        source[c.getID()].append(c)
    claim.sources.append(source)

    # Set rank
    # claim.changeRank('preferred', summary="Add population 2015")
    claim.rank = 'preferred'

    identification = {'id': item.getID()}
    data = {
        'claims': [claim.toJSON()]
    }  # add the statement on property: use []
    # to overwrite statement on property: do not use []
    response = repo.editEntity(identification,
                               data,
                               summary="Add 2015 population")
def Wikidata_import_ratings(QId_Elo, year, month):
    currentDay = datetime.now().day
    currentMonth = datetime.now().month
    currentYear = datetime.now().year
    
    wikidata_site = pywikibot.Site('wikidata', 'wikidata')
    repo = wikidata_site.data_repository()
    with open('elo_ratings_for_import.json') as fh:
        i = 0
        fh.write("[ \n")
        for QId, EloEntry in QId_Elo.items():
            if ( i > 0 ) :
                fh.write(', \n')
            i = i+1
            fh.write("    ")
            line = {"QID": QId, "P1087": int(EloEntry["Elo"]), "P585":{ "Y":int(year) , "M":month }, "P248":"Q27038151", "P1440": EloEntry["FideID"], "P813":{ "Y":currentYear, "M":currentMonth, "D":currentDay }}
            json.dump(line, fh, ensure_ascii=False)
        fh.write("\n")
        fh.write("]")
        fh.close()

    with open('elo_ratings_for_import.json') as fh:
        inputdata = json.load(fh)

    for i, obj in enumerate(inputdata):
        random.shuffle(inputdata)
        eloAlreadySet = False
    
        Qitem = pywikibot.ItemPage(repo, obj['QID'])
        while True:
            try:
                Qitem = pywikibot.ItemPage(repo, obj['QID'])
                Qitem.get()
                break
            except pywikibot.exceptions.MaxlagTimeoutError as e:
                print(e)
                time.sleep(10)    

        if Qitem.claims and 'P1087' in Qitem.claims:
            for eloClaim in Qitem.claims['P1087']:
                if eloClaim.qualifiers and 'P585' in eloClaim.qualifiers:
                    for j, dummy in enumerate(eloClaim.qualifiers['P585']):
                        pointInTime = eloClaim.qualifiers['P585'][j].getTarget()
                        if pointInTime.year==obj['P585']['Y'] and pointInTime.month==obj['P585']['M']:
                            eloAlreadySet = True
                            print('{}: Elo claim for {}-{:02d} already exists with value {}; skip'.format(obj['QID'], obj['P585']['Y'], obj['P585']['M'], eloClaim.getTarget().amount))

        if eloAlreadySet==False:
            newElo = pywikibot.Claim(repo, 'P1087')
            newElo.setTarget(value=pywikibot.WbQuantity(site=repo, amount=obj['P1087']))
            Qitem.addClaim(newElo)

            timestmp = pywikibot.Claim(repo, 'P585')
            timestmp.setTarget(value=pywikibot.WbTime(year=obj['P585']['Y'], month=obj['P585']['M']))
            newElo.addQualifier(timestmp)

            if 'P1440' in obj:
                statedIn = pywikibot.Claim(repo, 'P248')
                statedIn.setTarget(value=pywikibot.ItemPage(repo, 'Q27038151')); # Q27038151 is ratings.fide.org
                fideId = pywikibot.Claim(repo, 'P1440')
                fideId.setTarget(value=obj['P1440'])
                retrieved = pywikibot.Claim(repo, 'P813')
                retrieved.setTarget(value=pywikibot.WbTime(year=obj['P813']['Y'], month=obj['P813']['M'], day=obj['P813']['D']))
                newElo.addSources([statedIn, fideId, retrieved])
            elif 'P854' in obj:
                url = pywikibot.Claim(repo, 'P854')
                url.setTarget(value=obj['P854'])
                retrieved = pywikibot.Claim(repo, 'P813')
                retrieved.setTarget(value=pywikibot.WbTime(year=obj['P813']['Y'], month=obj['P813']['M'], day=obj['P813']['D']))
                if 'P1476' in obj:
                    title = pywikibot.Claim(repo, 'P1476')
                    title.setTarget(value=pywikibot.WbMonolingualText(text=obj['P1476'], language='en'))
                    newElo.addSources([url, retrieved, title])
                else:
                    newElo.addSources([url, retrieved])

            print('{}: Elo claim for {}-{:02d} with value {} successfully added'.format(obj['QID'], obj['P585']['Y'], obj['P585']['M'], obj['P1087']))
        else:
            time.sleep(1) # wait 1 second to avoid reading too fast from the API

    print('All done, task finished')        
 def test_WbMonolingualText_unicode(self):
     """Test WbMonolingualText unicode."""
     q = pywikibot.WbMonolingualText(text='Testa det här', language='sv')
     q_dict = {'text': 'Testa det här', 'language': 'sv'}
     self.assertEqual(q.toWikibase(), q_dict)
 def test_WbMonolingualText_equality(self):
     """Test WbMonolingualText equality."""
     q = pywikibot.WbMonolingualText(text='Thou shall test this!',
                                     language='en-gb')
     self.assertEqual(q, q)
def test():

    # site = pywikibot.Site('test', "wikidata")
    site = SITE  # pywikibot.Site('wikidata', "wikidata")
    repo = REPO  # site.data_repository()
    # item = pywikibot.ItemPage(repo, "Q121006")  # test:
    item = pywikibot.ItemPage(repo, 'Q4115189')  # Wikidata Sandbox

    # Add claim
    prop = 'P1082'
    claim = pywikibot.Claim(repo, prop)  # , rank='preferred')
    #value = to_value[insee_code]
    value = 666
    quantity = pywikibot.WbQuantity(value, site=site)
    #print(type(quantity))
    claim.setTarget(quantity)
    # TODO: Remove if population is not the last one
    # claim.setRank('preferred')
    item.addClaim(claim, summary="Add population 2015")
    #claim.changeRank('preferred')

    # Create qualifier
    point_in_time = 'P585'
    qualifier = pywikibot.Claim(repo, point_in_time)
    date = pywikibot.WbTime(year=2015)  # , month=3, day=20)
    qualifier.setTarget(date)
    #claim.addQualifier(qualifier, summary=u'Adding a qualifier.')
    # set_qualifier
    qualifier.isQualifier = True
    claim.qualifiers[qualifier.getID()] = [qualifier]

    # Create source
    statedin = pywikibot.Claim(repo, 'P248')
    insee = pywikibot.ItemPage(repo, 'Q156616')
    statedin.setTarget(insee)

    title = pywikibot.Claim(repo, 'P1476')
    text = pywikibot.WbMonolingualText("Recensement de la population 2015",
                                       'fr')  # monolingual text
    title.setTarget(text)

    publication_date = pywikibot.Claim(repo, 'P577')
    date = pywikibot.WbTime(year=2017, month=12, day=27)
    publication_date.setTarget(date)

    # claim.addSources([statedin, publication_date], summary="Adding sources.")
    # claim.addSources([statedin], summary="Adding sources.")
    #claim.addSources([statedin, title, publication_date], summary="Adding sources.")

    # set_source
    claims = [statedin, title, publication_date]
    source = defaultdict(list)
    for c in claims:
        c.isReference = True
        source[c.getID()].append(c)
    claim.sources.append(source)

    # Set rank
    #claim.changeRank('preferred', summary="Add population 2015")
    claim.rank = 'preferred'

    claim.repo.save_claim(claim, summary="Add population 2015")
 def test_WbMonolingualText_string(self):
     """Test WbMonolingualText string."""
     q = pywikibot.WbMonolingualText(text='Test that basics work',
                                     language='en')
     q_dict = {'text': 'Test that basics work', 'language': 'en'}
     self.assertEqual(q.toWikibase(), q_dict)
示例#26
0
def addname(item, repo, data):

    newClaim = pywikibot.Claim(repo, 'P1705')  #native label
    newClaim.setTarget(pywikibot.WbMonolingualText(text=data, language='lv'))
    item.addClaim(newClaim)
示例#27
0
        srcurl = row[3]
        srctitle = row[4]
        if doexit:
            break
        if selected is not None and filename != selected:
            continue
        if check_md5file(filename):
            print("Passing {}, due to no change".format(filename))
            continue
        print("==", qid, filename, "==")

        # Quelle – eine für alle Einträge
        statedin = pywikibot.Claim(repo, 'P854')
        statedin.setTarget(srcurl)
        title = pywikibot.Claim(repo, 'P1476')
        title.setTarget(pywikibot.WbMonolingualText(srctitle, "en"))
        retrieved = pywikibot.Claim(repo, 'P813')
        retrieved.setTarget(wbtoday)

        # Stable Version
        stablev = pywikibot.Claim(repo, 'P548')
        stablev.setTarget(pywikibot.ItemPage(repo, 'Q2804309'))

        # Get item
        item = pywikibot.ItemPage(repo, qid)
        item.get()

        for line in reversed(list(open(filename))):
            if doexit:
                break
            if len(line.split()) != 2:
示例#28
0
    def run(self):
        """
        Starts the robot.
        """
        for itempage in self.generator:
            pywikibot.output(u'Working on %s' % (itempage.title(), ))
            if not itempage.exists():
                pywikibot.output(u'Item does not exist, skipping')
                continue

            data = itempage.get()
            claims = data.get('claims')

            # Do some checks so we are sure we found exactly one inventory number and one collection
            if u'P350' not in claims:
                pywikibot.output(u'No RKDimages found, skipping')
                continue

            if u'P18' in claims:
                pywikibot.output(u'Already has an image, done')
                continue

            if u'P4765' in claims:
                pywikibot.output(u'Already has an image suggestion, done')
                continue

            rkdimagesid = claims.get(u'P350')[0].getTarget()
            rkdimagesurl = u'https://rkd.nl/nl/explore/images/%s' % (
                rkdimagesid, )

            imagePage = requests.get(
                'https://api.rkd.nl/api/record/images/%s?format=json&language=nl'
                % (rkdimagesid, ),
                verify=False)
            try:
                imagejson = imagePage.json()
            except ValueError:
                pywikibot.output(u'No valid json found for %s' %
                                 (rkdimagesurl, ))
                continue

            if imagejson.get('content') and imagejson.get('content').get(
                    'message'):
                pywikibot.output(
                    u'Something went wrong, got "%s" for %s, skipping' %
                    (imagejson.get('content').get('message'), imagejson))
                continue

            if not imagejson.get(u'response').get(u'docs')[0].get(
                    u'standplaats'):
                continue
            # Just get the first one
            standplaats = imagejson.get(u'response').get(u'docs')[0].get(
                u'standplaats')[0]
            if not standplaats.get('licence') or not standplaats.get(
                    'licence') == u'pub-dom':
                pywikibot.output(u'No valid license found, skipping')
                continue
            afbeeldingsnummer = standplaats.get('afbeeldingsnummer')

            if not imagejson.get(u'response').get(u'docs')[0].get(
                    u'afbeeldingsnummer_rkd_picturae_mapping'):
                continue
            picturae_id = imagejson.get(u'response').get(u'docs')[0].get(
                u'afbeeldingsnummer_rkd_picturae_mapping').get(
                    afbeeldingsnummer)

            if not picturae_id:
                continue

            imageurl = u'https://images.rkd.nl/rkd/thumb/fullsize/%s.jpg' % (
                picturae_id, )

            print(imageurl)

            descriptioncontents = imagejson.get(u'response').get(u'docs')[
                0].get(u'virtualFields').get(u'introduction').get(u'contents')
            title = descriptioncontents.get(u'benaming').strip()
            creator = descriptioncontents.get(u'toeschrijving').strip()
            print(title)
            print(creator)

            newclaim = pywikibot.Claim(self.repo, u'P4765')
            newclaim.setTarget(imageurl)
            pywikibot.output(
                'Adding commons compatible image available at URL claim to %s'
                % (itempage.title(), ))
            itempage.addClaim(newclaim)

            # JPEG
            newqualifier = pywikibot.Claim(self.repo, u'P2701')
            newqualifier.setTarget(pywikibot.ItemPage(self.repo, u'Q2195'))
            newclaim.addQualifier(newqualifier)

            # Source link
            newqualifier = pywikibot.Claim(self.repo, u'P2699')
            newqualifier.setTarget(rkdimagesurl)
            newclaim.addQualifier(newqualifier)

            # Operated by link
            newqualifier = pywikibot.Claim(self.repo, u'P137')
            newqualifier.setTarget(pywikibot.ItemPage(self.repo, u'Q758610'))
            newclaim.addQualifier(newqualifier)

            # Title qualifier
            if title:
                nltitle = pywikibot.WbMonolingualText(title, u'nl')
                newqualifier = pywikibot.Claim(self.repo, u'P1476')
                newqualifier.setTarget(nltitle)
                newclaim.addQualifier(newqualifier)

            # Author name string qualifier
            if creator:
                newqualifier = pywikibot.Claim(self.repo, u'P2093')
                newqualifier.setTarget(creator)
                newclaim.addQualifier(newqualifier)
示例#29
0
def get_address(value, repo):
    address = ', '.join(value)
    return pywikibot.WbMonolingualText(text=address, language='ru')
示例#30
0
    def run(self):
        """
        Starts the robot.
        """
        for itempage in self.generator:
            pywikibot.output(u'Working on %s' % (itempage.title(),))
            if not itempage.exists():
                pywikibot.output(u'Item does not exist, skipping')
                continue

            data = itempage.get()
            claims = data.get('claims')

            # Do some checks so we are sure we found exactly one inventory number and one collection
            if u'P1679' not in claims:
                pywikibot.output(u'No Art UK artwork ID found, skipping')
                continue

            if u'P18' in claims:
                pywikibot.output(u'Already has an image, done')
                continue

            if u'P4765' in claims:
                pywikibot.output(u'Already has an image suggestion, done')
                continue

            artukid = claims.get(u'P1679')[0].getTarget()
            artukidurl = 'https://artuk.org/discover/artworks/%s' % (artukid,)

            imagePage = requests.get(artukidurl) #, verify=False)
            # They are sending the wrong headers so I got ISO-8859-1 instead of utf-8
            imagePage.encoding = imagePage.apparent_encoding

            ccregex = 'id\=\"download-artwork\"[\s\t\r\n]*class\=\"btn dl toolbar_icon\"[\s\t\r\n]*title\=\"Creative Commons\"'
            dlregex = '\<a href\=\"(https\:\/\/artuk\.org\/download\/[^\"]+)\" class\=\"btn btn-default\" id\=\"download-button\" data-val\=\"Downloaded\"\>Download\<\/a\>'
            titleregex = '\<h1 class\=\"artwork-title\"\>([^\<]+)\s*\<\/h1\>'
            creatorregex = '\<h2 class\=\"artist\"\>[\s\t\r\n]*\<a href\=\"[^\"]*\"\>\s*([^\<]+)\s*</a>'

            ccmatch = re.search(ccregex, imagePage.text)
            dlmatch = re.search(dlregex, imagePage.text)
            titlematch = re.search(titleregex, imagePage.text)
            creatormatch = re.search(creatorregex, imagePage.text)

            if not ccmatch or not dlmatch or not titlematch or not creatormatch:
                continue

            imageurl = dlmatch.group(1)
            title = titlematch.group(1).strip()
            creator = " ".join(creatormatch.group(1).split()).replace('–','-')
            print (imageurl)
            print (title)
            print (creator)

            newclaim = pywikibot.Claim(self.repo, u'P4765')
            newclaim.setTarget(imageurl)
            pywikibot.output('Adding commons compatible image available at URL claim to %s' % (itempage.title(),))
            itempage.addClaim(newclaim)

            # JPEG
            newqualifier = pywikibot.Claim(self.repo, u'P2701')
            newqualifier.setTarget(pywikibot.ItemPage(self.repo, u'Q2195'))
            newclaim.addQualifier(newqualifier)

            # Source link
            newqualifier = pywikibot.Claim(self.repo, u'P2699')
            newqualifier.setTarget(artukidurl)
            newclaim.addQualifier(newqualifier)

            # Operated by link
            newqualifier = pywikibot.Claim(self.repo, u'P137')
            newqualifier.setTarget(pywikibot.ItemPage(self.repo, u'Q7257339'))
            newclaim.addQualifier(newqualifier)

            # Title qualifier
            entitle = pywikibot.WbMonolingualText(title, u'en')
            newqualifier = pywikibot.Claim(self.repo, u'P1476')
            newqualifier.setTarget(entitle)
            newclaim.addQualifier(newqualifier)

            # Author name string qualifier
            newqualifier = pywikibot.Claim(self.repo, u'P2093')
            newqualifier.setTarget(creator)
            newclaim.addQualifier(newqualifier)