http://www.mediawiki.org/wiki/Special:Code/pywikipedia/11209
Revision: 11209
Author: amir
Date: 2013-03-16 01:47:20 +0000 (Sat, 16 Mar 2013)
Log Message:
-----------
some changes about Wikidata, Especially making easier to change a claim
Modified Paths:
--------------
trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py 2013-03-15 15:36:59 UTC (rev 11208)
+++ trunk/pywikipedia/wikipedia.py 2013-03-16 01:47:20 UTC (rev 11209)
@@ -4220,7 +4220,7 @@
return 302, response.msg, data['success']
return 302, response.msg, False
- def createitem(self, summary=None, watchArticle=False, minorEdit=True,
+ def createitem(self, summary=None, value=None, watchArticle=False,
minorEdit=True,
token=None, newToken=False, sysop=False, captcha=None,
botflag=True, maxTries=-1):
"""Creating an item
@@ -4236,12 +4236,15 @@
'format': 'jsonfm',
'action': 'wbeditentity'
}
- params['data'] = (u'{"labels": {"%(lang)s": {"language": "%(lang)s", '
+ if not value:
+ params['data'] = (u'{"labels": {"%(lang)s": {"language":
"%(lang)s", '
u'"value": "%(title)s"}}, "sitelinks": {"%(site)s": '
u'{"site": "%(site)s", "title": "%(title)s"}}}'
% {'lang': self._originSite.lang,
'title': self._originTitle,
'site': self._siteTitle})
+ else:
+ params['data'] = re.sub(ur"\bu\'",
u'"',repr(value).decode("unicode-escape")).replace("'", '"')
if token:
params['token'] = token
else:
@@ -4313,62 +4316,83 @@
if data['success'] == u"1":
return 302, response.msg, data['success']
return response.code, response.msg, data
-
- def setclaimvalue(self, guid, value, comment=None, token=None, sysop=False,
- botflag=True):
- """API module for setting the value of a Wikibase claim.
-
- (independent of page object and could thus be extracted from this
class)
- """
- params = {
- 'action': 'wbsetclaimvalue',
- 'claim': guid,
- 'snaktype': 'value',
- 'value': value,
- }
- if token:
- params['token'] = token
+ def editclaim(self, WDproperty, value,raw_value=False, comment=None,
token=None, sysop=False,botflag=True):
+ if isinstance(WDproperty,int):
+ propertyID=WDproperty
+ elif isinstance(WDproperty,basestring):
+ try:
+ propertyID=int(WDproperty)
+ except ValueError:
+ try:
+ propertyID=int(WDproperty.replace("p","").replace("P",""))
+ except ValueError:
+ search=self.searchentities(WDproperty, 'property')
+ propertyID=int(search[0]["id"].replace("p",""))
+ else:
+ pass
+ else:
+ pass
else:
- params['token'] = self.site().getToken(sysop = sysop)
- #if botflag:
- # params['bot'] = 1
- # retrying is done by query.GetData
- 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']))
-
- return
-
- def createclaim(self, prop, value, comment=None, token=None, sysop=False,
- botflag=True):
- """API module for creating Wikibase claims.
- """
- params = {
+ raise RuntimeError("Unknown property type: %s" % WDproperty)
+ if not raw_value:
+ if isinstance(value,int):
+ pass
+ elif isinstance(value,basestring):
+ try:
+ value=int(value)
+ except ValueError:
+ try:
+ value=int(value.replace("q","").replace("Q",""))
+ except ValueError:
+ search=self.searchentities(value, 'item')
+ value=int(search[0]["id"].replace("Q",""))
+ else:
+ pass
+ else:
+ pass
+ else:
+ raise RuntimeError("Unknown property type: %s" % value)
+ value="{\"entity-type\":\"item\",\"numeric-id\":%s}" % value
+ else:
+ pass
+ claims=self.get()['claims']
+ theclaim=None
+ for claim in claims:
+ if claim['m'][1]==propertyID:
+ theclaim=claim
+ if theclaim:
+ params = {
+ 'action': 'wbsetclaimvalue',
+ 'claim': theclaim['g'],
+ 'snaktype': 'value',
+ 'value': value,
+ }
+ if token:
+ params['token'] = token
+ else:
+ params['token'] = self.site().getToken(sysop = sysop)
+ 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']))
+ else:
+ params = {
'action': 'wbcreateclaim',
'entity': self.title(),
'snaktype': 'value',
- 'property': prop,
+ 'property': u"p"+str(WDproperty),
'value': value,
- }
- if token:
- params['token'] = token
- else:
- params['token'] = self.site().getToken(sysop = sysop)
- #if botflag:
- # params['bot'] = 1
- # retrying is done by query.GetData
- 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']))
-
- return
-
+ }
+ if token:
+ params['token'] = token
+ else:
+ params['token'] = self.site().getToken(sysop = sysop)
+ 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
@@ -4501,7 +4525,7 @@
raise BadTitle('BadTitle: %s' % self)
return entities
- def searchentities(self, search, sysop=False):
+ def searchentities(self, search, entitytype=None, sysop=False):
"""API module to search for entities.
(independent of page object and could thus be extracted from this
class)
@@ -4512,6 +4536,8 @@
#'language': self.site().language(),
'language': 'en',
}
+ if entitytype:
+ params['type']=entitytype
# retrying is done by query.GetData
data = query.GetData(params, self.site(), sysop=sysop)
search = data['search']
_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn