python - Using sleekxmpp to send Google Talk Chats using OAuth2.0 -
i'm new python , need authenticating chatbot via oauth2. have google talk chatbot setup using sleekxmpp python. comes builtin plugin called 'google' don't know how use.
1) have setup service account on googles developer console gave me json key , request access token scoped gtalk via oauth2client.
def oauthping(): json_key = json.load(open(credentialspath)) jid = json_key['client_email'] scope = ['https://www.googleapis.com/auth/googletalk'] accesstoken = signedjwtassertioncredentials(json_key['client_email'], json_key['private_key'], scope) return accesstoken, jid 2) send chat:
def sendping(toperson, topersonmessage, accesstoken, jid): if sys.version_info < (3, 0): reload(sys) sys.setdefaultencoding('utf8') else: raw_input = input xmpp = sendmsgbot.sendmsgbot(jid, toperson, unicode(topersonmessage)) xmpp.credentials['access_token'] = accesstoken xmpp.register_plugin('xep_0030') # service discovery xmpp.register_plugin('xep_0004') # date form xmpp.register_plugin('google') # oauth2 xmpp.register_plugin('xep_0199') # xmpp ping # connect xmpp server , start processing xmpp stanzas. if xmpp.connect(('talk.google.com', 5222)): xmpp.process(block=true) else: print("unable connect google talk") 3) sendmsgbot class:
class sendmsgbot(sleekxmpp.clientxmpp): """ basic sleekxmpp bot log in, send message, , log out. """ def __init__(self, jid, recipient, message): sleekxmpp.clientxmpp.__init__(self, jid, 'ignore') # message wish send, , jid # receive it. self.recipient = recipient self.msg = message # session_start event triggered when # bot establishes connection server # , xml streams ready use. want # listen event we can initialize # our roster. self.add_event_handler("session_start", self.start) def start(self, event): """ process session_start event. typical actions session_start event requesting roster , broadcasting initial presence stanza. """ self.send_presence() self.get_roster() self.send_message(mto=self.recipient, mbody=self.msg, mtype='chat') # using wait=true ensures send queue # emptied before ending session. self.disconnect(wait=true) any appreciated. thanks.
Comments
Post a Comment