аватар question@mail.ru · 01.01.1970 03:00

Послать сообщение в skype чат используя python

Необходимо написать программу на Python для отправления сообщений в чат Skype. Skype4Py не подходит из-за того, что стоит 64-битный Python.

Существуют ли какие-либо альтернативы для работы со Skype, помимо Skype4Py, и есть ли Skype API для отправки сообщений?

аватар answer@mail.ru · 01.01.1970 03:00

может послать сообщение, используя :

POST /v2/conversations/8:alice/activities HTTP/1.1Host: apis.skype.comAuthorization: Bearer <redacted oauth2 token>{  ""message"": {""content"" : ""Hi! (wave)""}}

например чтобы послать message строку skypeid пользователю на Питоне:

#!/usr/bin/env python2import jsonfrom urllib2 import urlopen, Requestdef send_message(message, skypeid, token, host='apis.skype.com'):    url = 'https://{host}/v2/conversations/8:{skypeid}/activities'.format(**vars())    headers = dict(Authorization='Bearer ' + token)    data = json.dumps(dict(message=dict(content=message))).encode()    urlopen(Request(url, data, headers)).close()

где token можно получить с помощью другого http POST запроса:

from urllib import urlencodedef get_access_token(client_id, client_secret):    # from messaging/auth-service.js in skype-sdk    # NOTE: unlike the documented way in /skype/bots/docs/;    #  this approach works for me    url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'    data = urlencode(dict(client_id=client_id,                          scope='https://graph.microsoft.com/.default',                          grant_type='client_credentials',                          client_secret=client_secret)).encode()    retu json.loads(urlopen(url, data).read().decode())['access_token']

access_token можно кэшировать expires_in секунд.

Чтобы получить client_id, client_secret необходимо .

Затем сам , чтобы получить ссылку, по которой можно добавить бота в Skype-контакты (до публикации бота, по этой ссылке его можно найти).

Чтобы получить ответные сообщения нужно указать при создании Skype бота https webhook. Для теста, можно использовать, который напечает url, который можно как публичный webhook указать. При этом достаточно локально http (не https) сервер запустить, который json может принимать, на указанном 8000 порту, например:

#!/usr/bin/env python3from aiohttp import web  # $ pip install aiohttpasync def handle(request):    messages = await request.json()    for message in messages:        print(message)    retu web.HTTPCreated()  # 201app = web.Application()app.router.add_route('POST', '/v1/chat', handle)web.run_app(app, host='localhost', port=8000, ssl_context=None)

В тему статья на Хабрахабр: .

Последние

Похожие