XMPP form example for PyXMPP
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
def get_search(self,iq):
iq=iq.make_result_response()
q=iq.xmlnode.newChild(None,"query",None)
q.setProp("xmlns","jabber:iq:search")
q.newTextChild(None,"instructions","Enter a keyword")
form=q.newChild(None,"x",None)
form.setProp("xmlns","jabber:x:data")
form.setProp("type","form")
formType=form.newChild(None,"field",None)
formType.setProp("type","hidden")
formType.setProp("var","FORM_TYPE")
formType.newTextChild(None,"value","jabber:iq:search")
text=form.newChild(None,"field",None)
text.setProp("type","text-single")
text.setProp("label","Search")
text.setProp("var","searchField")
self.stream.send(iq)
return 1
def set_search(self, iq):
fromjid = iq.get_from().bare()
searchField=iq.xpath_eval("//r:field[@var='searchField']/r:value",{"r":"jabber:x:data"})
if searchField:
searchField='%'+searchField[0].getContent().replace("%","\\%")+'%'
else:
return
if searchField=='%%' or len(searchField)<5:
self.stream.send(iq.make_error_response("not-acceptable"))
return
self.dbCurST.execute("COMMIT")
self.dbCurST.execute("SELECT feedname, description, url, subscribers, timeout FROM feeds WHERE (feedname LIKE %s OR description LIKE %s OR url LIKE %s OR tags LIKE %s) AND (private = '0' OR (private = '1' AND registrar = %s))", (searchField, searchField, searchField, searchField, fromjid))
a=self.dbCurST.fetchall()
print (a)
iq=iq.make_result_response()
q=iq.new_query("jabber:iq:search")
form=q.newChild(None,"x",None)
form.setProp("xmlns","jabber:x:data")
form.setProp("type","result")
formType=form.newChild(None,"field",None)
formType.setProp("type","hidden")
formType.setProp("var","FORM_TYPE")
formType.newTextChild(None,"value","jabber:iq:search")
reported=form.newChild(None,"reported",None)
reportedJid=reported.newChild(None,"field",None)
reportedJid.setProp("var","jid")
reportedJid.setProp("label","JID")
reportedJid.setProp("type","jid-single")
reportedUrl=reported.newChild(None,"field",None)
reportedUrl.setProp("var","url")
reportedUrl.setProp("label","URL")
reportedUrl.setProp("type","text-single")
*****
for d in a:
item=form.newChild(None, "item", None)
jidField=item.newChild(None, "field", None)
jidField.setProp("var", "jid")
jiddata = d[0]+"@"+self.name
jidField.newTextChild(None, "value", jiddata.encode('utf-8'))
urlField=item.newChild(None, "field", None)
urlField.setProp("var", "url")
urlField.newTextChild(None, "value", d[2].encode('utf-8'))
*****
self.stream.send(iq)
return 1