Creating claims of "local media" to "items" through api interface

30 views Asked by At

I have the WikibaseLocalMedia extension loaded onto my local Wikidata instance. I have a couple of files loaded onto it. I am able to claim these files over the web interface to items through a property of datatype "Media file".

But I am unable to create the claim programmatically. When i try doing the following

site = pwb.Site('localwiki:en')
#site.login()

token = pwb.data.api.Request(site=site, parameters={'action': 'query', 'meta': 'tokens'}).submit()
csrf_token = token['query']['tokens']['csrftoken']


result = pwb.data.api.Request(site=site, parameters={'action': 'wbcreateclaim', 'token': csrf_token,
                              'entity': 'P1','property': 'P50', 'snaktype': 'value', 
                              'datatype': 'localMedia', 'type': 'statement',
                             'value': {'value': 'Neo.jpg', 'type': 'localMedia'}}).submit()

I get the following error

APIError: invalid-snak: Invalid snak data.
[param: action=wbcreateclaim&entity=P1&property=P50&snaktype=value&datatype=localMedia&type=statement&value=value%7Ctype&assert=user&maxlag=1&format=json&token=6caed2ab16ab837896c5a17b01d6fee7652fb29e%2B%5C;
 messages: [{'name': 'wikibase-api-invalid-snak', 'parameters': [], 'html': {'*': 'Invalid snak data.'}}];

When i create the claim over the web interface, the json data of the item contains the claim as the following

'claims': <class 'pywikibot.page._collections.ClaimCollection'>(
    {
        'P50': [Claim.fromJSON(DataSite("en", "localwiki"), 
                               {'mainsnak': {'snaktype': 'value', 
                                             'property': 'P50', 
                                             'datatype': 'localMedia', 
                                             'datavalue': {'value': 'Jpg3.jpg', 'type': 'localMedia'}
                                            }, 
                                'type': 'statement', 
                                'id': 'P1$ceabb6c6-4ba1-f31b-d2e1-b18cdb78050e', 
                                'rank': 'normal'}), 
                Claim(DataSite("en", "localwiki"), 'P50'), 
                Claim(DataSite("en", "localwiki"), 'P50')]    
    }
)

Is there an appropriate syntax to claim an image programmatically to an item?

0

There are 0 answers