The documentation has been restructured and (hopefully) improved for new and existing users alike. It’s now organised into prose Guides for basic tasks, Reference API documentation, and additional Background material.
The previous Live login flow has been repaired, which will once again permit Skype-only accounts. However, SOAP authentication remains the default – if you need the Live login flow, use
SkypeConnection.liveLogin() (see also Manual control).
Skype made a change to their authentication flow that broke the method SkPy uses to login. At the same time, it was noted that an alternative flow exists (SOAP-based authentication) supporting two-factor authentication, though not supporting Skype usernames and passwords.
As of v0.10, SOAP authentication is used by default. You must provide a Microsoft account email address and password (or application-specific password if 2FA is enabled) in order to login; Skype-only accounts will not work with this flow.
Skype stopped sending contact presence events by default. If you need them, you can call
Skype.subscribePresence() before event polling starts to enable them again.
Skype made a breaking change to one of their APIs. If you’re seeing this:
ConnectionError: HTTPSConnectionPool(host='flagsapi.skype.com', port=443)
…then update to v0.9.1 which disables flag collection (
SkypeSettings.syncFlags()) by default.
The latest release (v0.9) pushes out a number of miscellaneous bug fixes that have accrued over the last few months.
It also adds a BSD 3-clause license, which will hopefully satisfy any downstream licensing requirements.
For received messages, this isn’t particularly useful as
SkypeMsg.content already contains the original message body. However, you can now create an instance of a
SkypeMsg subclass, then retrieve the content ready to send:
>>> SkypeLocationMsg(latitude=51.5074, longitude=-0.1277, ... address="5 Trafalgar Square, London", ... mapUrl="https://www.bing.com/mapspreview?cp=52.2448~-0.304923&lvl=8").html <location address="5 Trafalgar Square, London" latitude="51507400" longitude="-127700" pointOfInterest="" timeStamp="1478731167"><a href="https://www.bing.com/mapspreview?cp=52.2448~-0.304923&lvl=8">5 Trafalgar Square, London</a></location>
HTML is returned as a BeautifulSoup
bs4.Tag instance, so you can still easily modify the output before passing it to
Microsoft account auth is now the default and only authentication method;
msPwd have been removed in favour of
The Skype auth flow has now been superceded by the Microsoft account flow.
SkypeConnection has been updated to always do a Live login – if you’re on 0.5 or lower, just pass your Skype username and password as
You may now notice that
Skype.setPresence() now works, rather than throwing 400 errors! There was a missing call to configure a new endpoint, which has now been added.
Note that this doesn’t work when reading from a token file due to not storing the endpoint identifier. As a workaround, get a new endpoint by calling
Switched to the newer v2 APIs for contacts, in line with Skype for Web. This will soon provide access to groups and blocked contacts.
Microsoft account authentication has arrived! If you normally access your Skype account using your email address rather than a username, you can now pass
msPass arguments to the
Skype constructor, or use
Enum classes have been replaced with instances of
SkypeEnum, which removes the integer values (each item from the enum is itself an instance of
SkypeEnum). Enums support item access both by attribute name and by index.
The docs here show them as tuples with attributes.
Added support for some differing features in the registration token endpoint. If you can’t sign in on v0.1, try this instead.
Initial release! Installation options:
Basic support for guest accounts has been added, see
SkypeConnection.guestLogin(). This requires connecting manually as per yesterday’s change, for example:
>>> from skpy import Skype >>> sk = Skype(connect=False) >>> sk.conn.guestLogin("https://join.skype.com/...", "Foo") >>> sk Skype(userId='guest:foo_...', connected=True)
As part of this,
SkypeChats.urlToId() has been upgraded to use Skype’s v2 conversation API, and has been renamed to
SkypeChats.urlToIds() in light of the method now returning three identifiers (thread, long, and blob).
Authentication is now no longer required during initialisation of the
Skype class. Previously, an exception would be raised if neither a token nor a username/password were valid.
Renamed from SkyPy to SkPy, due to several existing projects with the same name. Imports need changing from
skpy (note also the change to lowercase). This means the project can now be added to PyPI too (which will hopefully happen soon).
SkypeChat.sendContact() now handles multiple contacts, so has been renamed to
SkypeContactMsg now provides a list of embedded contacts under its
editId, providing the client-generated identifier for a particular message. When transmitting an edit, the server’s event has a new identifier, but the client identifier remains the same – this produces a chain of messages with a matching client identifier, forming an edit history.
The helper method
exhaust() now returns an iterable, and no longer takes an
init parameter. Instead, an optional
transform can be specified.
SkypeContacts has replaced most of the user-related functions on the
Skype class. This still lives at
Skype.contacts and provides key lookups, so code using
Skype.contacts["id"] should remain unaffected.