http://www.mediawiki.org/wiki/Special:Code/pywikipedia/11216
Revision: 11216
Author: amir
Date: 2013-03-18 00:14:02 +0000 (Mon, 18 Mar 2013)
Log Message:
-----------
Adding claims' sources via PWB
Modified Paths:
--------------
trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py 2013-03-16 16:54:18 UTC (rev 11215)
+++ trunk/pywikipedia/wikipedia.py 2013-03-18 00:14:02 UTC (rev 11216)
@@ -4316,7 +4316,7 @@
if data['success'] == u"1":
return 302, response.msg, data['success']
return response.code, response.msg, data
- def editclaim(self, WDproperty, value,raw_value=False, comment=None,
token=None, sysop=False,botflag=True):
+ def editclaim(self, WDproperty, value,raw_value=False, refs=None,
comment=None, token=None, sysop=False,botflag=True):
if isinstance(WDproperty,int):
propertyID=WDproperty
elif isinstance(WDproperty,basestring):
@@ -4326,7 +4326,7 @@
try:
propertyID=int(WDproperty.replace("p","").replace("P",""))
except ValueError:
- search=self.searchentities(WDproperty, 'property')
+ search=self.searchentities(WDproperty, 'property',
lang=self._originSite.lang)
propertyID=int(search[0]["id"].replace("p",""))
else:
pass
@@ -4344,7 +4344,7 @@
try:
value=int(value.replace("q","").replace("Q",""))
except ValueError:
- search=self.searchentities(value, 'item')
+ search=self.searchentities(value, 'item',
lang=self._originSite.lang)
value=int(search[0]["id"].replace("q",""))
else:
pass
@@ -4377,6 +4377,7 @@
raise RuntimeError("API query error: %s" % data)
if u'warnings' in data:
output(str(data[u'warnings']))
+ guid=theclaim['g']
else:
params = {
'action': 'wbcreateclaim',
@@ -4395,6 +4396,59 @@
raise RuntimeError("API query error: %s" % data)
if u'warnings' in data:
output(str(data[u'warnings']))
+ guid=data['claim']['id']
+ if refs:
+ snak=[]
+ for ref in refs:
+ if isinstance(ref,basestring):
+ raise RuntimeError("the references must be like
this:{(ref1,value1),(ref2,value2)}")
+ for i in [0,1]:
+ if isinstance(ref[i],int):
+ value=ref[i]
+ elif isinstance(ref[i],basestring):
+ try:
+ value=int(ref[i])
+ except ValueError:
+ try:
+
value=int(ref[i].replace("q","").replace("Q","").replace("P","").replace("p",""))
+ except ValueError:
+ if i==0:
+ typesearch='property'
+ else:
+ typesearch='item'
+ search=self.searchentities(ref[i], typesearch,
lang=self._originSite.lang)
+
value=int(search[0]["id"].replace("q","").replace("p",""))
+ else:
+ pass
+ else:
+ pass
+ else:
+ raise RuntimeError("Unknown item: %s" % ref[i])
+ snak.append(value)
+ finalsnak={}
+ for i in range(0,len(snak)/2):
+ snaki = [{"snaktype":"value",
+ "property":"p"+str(snak[i*2]),
+
"datavalue":{"type":"wikibase-entityid","value":{"entity-type":"item","numeric-id":snak[(i*2)+1]}}}]
+ finalsnak["p"+str(snak[i*2])]=snaki
+ finalsnak=json.dumps(finalsnak)
+ finalsnak=finalsnak.replace("'", '"')
+ params = {
+ 'action': 'wbsetreference',
+ 'statement' : guid,
+ 'snaks' :u"%s" % finalsnak,
+ 'bot' : '1'
+ }
+ if token:
+ params['token'] = token
+ else:
+ params['token'] = self.site().getToken(sysop = sysop)
+ output(u"Adding references to %s" % self.title())
+ data = query.GetData(params, self.site(), sysop=sysop)
+ if 'error' in data:
+ raise RuntimeError("API query error: %s" % data)
+ if u'warnings' in data:
+ output(str(data[u'warnings']))
def getentity(self,force=False, get_redirect=False, throttle=True,
sysop=False, change_edit_time=True):
"""Returns items of a entity in a dictionary
@@ -4527,7 +4581,7 @@
raise BadTitle('BadTitle: %s' % self)
return entities
- def searchentities(self, search, entitytype=None, sysop=False):
+ def searchentities(self, search, entitytype=None, lang='en', sysop=False):
"""API module to search for entities.
(independent of page object and could thus be extracted from this
class)
@@ -4536,7 +4590,7 @@
'action': 'wbsearchentities',
'search': search,
#'language': self.site().language(),
- 'language': 'en',
+ 'language': lang,
}
if entitytype:
params['type']=entitytype
_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn