ProfessionalWiki / WikibaseLocalMedia

MediaWiki extension that adds support for local media files to Wikibase via a new data type.
https://wikibase.consulting
GNU General Public License v2.0
11 stars 6 forks source link

Creating claims of local media to items through api interface #27

Open plasticadmiral opened 11 months ago

plasticadmiral commented 11 months ago

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

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')]    
    }
)
JeroenDeDauw commented 11 months ago

I don't recall the specifics, but the format should be the same as for commons media files. I suggest you ask on the Wikibase Telegram or similar support channel.