Unofficial cloud.mail.ru's python API
| Implemented? | Method | Path | Additional Info |
|---|---|---|---|
| (POST) | batch | ||
| (POST) | clone | ||
| (POST) | stock/save | ||
| X | (GET) | dispatcher | |
| (POST) | docs/token | ||
| X | (GET) | file | |
| X | (POST) | file/add | |
| X | (POST) | file/move | |
| X | (POST) | file/remove | |
| X | (POST) | file/rename | |
| X | (POST) | file/copy | |
| X | (POST) | file/publish | |
| X | (POST) | file/unpublish | |
| X | (GET) | file/history | |
| X | (GET) | folder | |
| X | (POST) | folder/add | |
| X | (POST) | folder/move | Alias for file/move |
| X | (POST) | folder/remove | Alias for file/remove |
| X | (POST) | folder/rename | Alias for file/rename |
| X | (POST) | folder/copy | Alias for file/copy |
| X | (POST) | folder/publish | Alias for file/publish |
| X | (POST) | folder/unpublish | Alias for file/unpublish |
| X | (GET) | folder/find | |
| X | (GET) | folder/invites | |
| (GET) | folder/shared/links | ||
| (GET) | folder/invites/info | ||
| (POST) | folder/invites/reject | ||
| (POST) | folder/mount | ||
| (GET) | folder/shared/incomi | ||
| (GET) | folder/shared/info | ||
| (POST) | folder/share | ||
| X | (GET) | folder/tree | |
| (POST) | folder/unmount | ||
| (POST) | folder/unshare | ||
| X | (POST) | folder/viruscan | |
| (GET) | mail/ab/contacts | ||
| (POST) | mail/ab/contacts/add | ||
| (GET) | status | ||
| X | (POST) | tokens/csrf | |
| X | (POST) | tokens/download | |
| (GET) | weblinks | ||
| 0 | (GET) | weblinks/subscribe | Server said me 'internal' |
| X | (GET) | user | |
| X | (POST) | user/agree-la | Seper-Mega-Ultra-Alfa-Giga useless |
| 0 | (POST) | user/edit | Method just for redrawing frontend |
| (POST) | user/unfreeze | ||
| (POST) | user/promo/active | ||
| (POST) | user/promo/ignore | ||
| (POST) | user/promo/invite | ||
| (POST) | user/promo/join | ||
| X | (GET) | user/space | |
| X | (POST) | zip | |
| X | (GET) | mail/ab/contacts | |
| (POST) | mail/ab/contacts/add | ||
| X | (GET) | billing/rates | |
| (POST) | billing/change | ||
| (POST) | billing/prolong | ||
| (POST) | billing/cancel | ||
| (POST) | billing/history | ||
| X | (GET) | trashbin | |
| X | (POST) | trashbin/restore | |
| X | (POST) | trashbin/empty | |
| X | (GET) | domain/folders | |
| (POST) | promo/validate | ||
| X | (POST) | notify/applink |
I decided implement the structure of the original API so for the file/add request you must call the method MailCloud_instance.api.file.add(...).
All realized methods are described in the table above.
>>> import cloud_mail_api
>>> cm = cloud_mail_api.CloudMail("email@email.com", "password")
>>> cm.auth() # This method can ask AuthCode by input() if df auth enabled, run in inputable env
True
>>> cm.print(cm.api.file.add("/Some/Local/Dir/file.txt", "/Some/Cloud/Dir/file_qwe.txt"))
{'email': 'email@email.com', 'body': '/Some/Cloud/Dir/file_qwe.txt', 'time': 1530208363765, 'status': 200}
For identification mail.ru use cookies. It would be a shame if every session you would have to authenticate again, so I implemented methods to load/save cookies to a json file.
>>> import cloud_mail_api
>>> cm_temp = cloud_mail_api.CloudMail("email@email.com", "password")
>>> cm_temp.auth()
True
>>> cm.save_cookies_to_file("/Some/Local/Dir/cookies.json")
<RequestsCookieJar[<Cookie GarageID=7d1958e70...>]
>>> del cm_temp
>>> cm = cloud_mail_api.CloudMail("email@email.com", "password")
>>> cm.load_cookies_from_file("/Some/Local/Dir/cookies.json")
<RequestsCookieJar[<Cookie GarageID=7d1958e70...>]
>>> cm.print(cm.api.file.add("/Some/Local/Dir/file.txt", "/Some/Cloud/Dir/file_qwe.txt"))
{'email': 'email@email.com', 'body': '/Some/Cloud/Dir/file_qwe.txt', 'time': 1530208363765, 'status': 200}
Also there is a method def update_cookies_from_dict(self, dict_={}, **kwargs) -> RequestsCookieJar that has a same effect as load_cookies_from_file