рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдореИрдВ рдХреИрд╕реЗ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,
FUSE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Yandex.Disk рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦреЗрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рд╕реБрдВрджрд░ рдЬреАрдпреВрдЖрдИ рд╣реЛрдЧрд╛ред
рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?
рдХрд╛рд░реНрдпрдХреНрд░рдо рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
- рд╕реА ++
- Qt (4.x)
- рдХрд░реНрд▓
- libxml
- рдлреНрдпреВрдЬ (рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдбреЛрдХрди )
- Yandex.Disk рдПрдкреАрдЖрдИ
рд╕рдм рдХреБрдЫ рдкрдмреНрд▓рд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕рдм рдЦреЛрдЬрдиреЗ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЬреИрд╕рд╛ рдХрд┐ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рджреЛрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рде рд╣реА, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реЛред рдХреБрдЫ рдЗрд╕ рддрд░рд╣: VKontakte, Google.Docs, рдЖрджрд┐ред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрдбрд╝реЗ рдмреНрд▓реЙрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:
- рдпреВрдЖрдИ
- FUSE рдпрд╛ рдбреЛрдХрди (рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЪреБрдиреЗрдВ)
- рд╕реНрдерд╛рдиреАрдп рдбреНрд░рд╛рдЗрд╡рд░
- рд░рд┐рдореЛрдЯ рдбреНрд░рд╛рдЗрд╡рд░
- рдпреЛрдЬрдХ
- рдФрд░ рдЬреЛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╕рдм рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдЧрд╛, рдЙрд╕реЗ рдХреЙрдорди рдХрд╣реЗрдВрдЧреЗ
рдореБрдЦреНрдп рдмреНрд▓реЙрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрд░реЗрдЦ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рдпреВрдЖрдИ
рдпрд╣рд╛рдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдХреНрдпреВрдЯреАред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рдВрд╡рд╛рдж рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдлреНрдпреВрдЬ
рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЙрди рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рдФрд░ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдлреЛрдЯреЛ рд╕реЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд┐рдореНрдк рдореЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдлрд┐рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реАрдзреЗ Gimp рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Yandex.Disk рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдЖ рдЬрд╛рдПрдВрдЧреЗред FUSE рд╣рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд╕реНрд╡реАрд░ рдмрджрд▓ рдЧрдИ рд╣реИ рдФрд░ рд╣рдо рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рднреЗрдЬ рдкрд╛рдПрдВрдЧреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди FUSE рд╡рд┐рдХрд▓реНрдк рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдореМрдд рдХреА рдиреАрд▓реА рд╕реНрдХреНрд░реАрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдпрджрд┐ рдбреЛрдХрди рдХреА рдХреЙрд▓ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕реНрдерд╛рдиреАрдп рдбреНрд░рд╛рдЗрд╡рд░
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреВрдЬрд░ рд╕реНрдкреЗрд╕ рдореЗрдВ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ FUSE рдпрд╛ рдбреЛрдХрди рд╣реИрдВред рдЗрд╕ рд░реИрдкрд░ рдХрд╛ рдХрд╛рдо рдЦреБрдж рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрдорди рдкрд╛рд░реНрдЯ рдХреЛ рдлреЙрд░рд╡рд░реНрдб рдХрд░рдирд╛ рд╣реИред рд╣рдореЗрдВ рдПрдХ рд░реИрдкрд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдмреИрдХреЗрдВрдб рдХреЛ рдлреЗрд╕ рдСрдл рдбреЛрдХрди рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрдмрдХрд┐ рдмрд╛рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреБрдЫ рднреА рди рдмрджрд▓реЗред рдлрд╝реНрдпреВрдЬрд╝ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЙрд▓ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
static int fuseGetAttr(const char *path, struct stat *statbuf); static int fuseReadLink(const char *path, char *link, size_t size); static int fuseMknod(const char *path, mode_t mode, dev_t dev); static int fuseMkdir(const char *path, mode_t mode); static int fuseUnlink(const char *path); static int fuseRmdir(const char *path); static int fuseSymlink(const char *path, const char *link); static int fuseRename(const char *path, const char *newpath); static int fuseLink(const char *path, const char *newpath); static int fuseChmod(const char *path, mode_t mode); static int fuseChown(const char *path, uid_t uid, gid_t gid); static int fuseTruncate(const char *path, off_t newSize); static int fuseUtime(const char *path, struct utimbuf *ubuf); static int fuseOpen(const char *path, struct fuse_file_info *fileInfo); static int fuseRead(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fileInfo); static int fuseWrite(const char *path, const char *buf, size_t size, off_t offset, struct fuse_file_info *fileInfo); static int fuseStatfs(const char *path, struct statvfs *statInfo); static int fuseFlush(const char *path, struct fuse_file_info *fileInfo); static int fuseRelease(const char *path, struct fuse_file_info *fileInfo); static int fuseFsync(const char *path, int datasync, struct fuse_file_info *fi); static int fuseSetxAttr(const char *path, const char *name, const char *value, size_t size, int flags); static int fuseGetxAttr(const char *path, const char *name, char *value, size_t size); static int fuseListxAttr(const char *path, char *list, size_t size); static int fuseRemovexAttr(const char *path, const char *name); static int fuseOpenDir(const char *path, struct fuse_file_info *fileInfo); static int fuseReadDir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fileInfo); static int fuseReleaseDir(const char *path, struct fuse_file_info *fileInfo); static int fuseFsyncDir(const char *path, int datasync, struct fuse_file_info *fileInfo); static void* fuseInit(struct fuse_conn_info *conn); static int fuseUtimens(const char *path, const struct timespec ts[2]);
рдореИрдВ рдпрд╣рд╛рдВ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ
linux_lvfs_driver.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдирд╛рд▓реЙрдЧ
рдпрд╣рд╛рдБ рдирд┐рд╣рд┐рдд
рд╣реИрд░рд┐рдореЛрдЯ рдбреНрд░рд╛рдЗрд╡рд░
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рднрд┐рдиреНрди рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдереАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Qt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрдХ рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рднреА рдХреЛрдИ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрджрд┐ рдЖрдк рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рдЬрд╛рдПрдЧреАред
рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рд░рд┐рдореЛрдЯ рдбреНрд░рд╛рдЗрд╡рд░ рдХреБрдЫ рдЕрдореВрд░реНрдд рдкреНрд▓рдЧ-рдЗрди рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдореВрд░реНрдд рд╣реИред рд░рд┐рдореЛрдЯ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░реЗрдЧрд╛ рдЬреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпреЛрдЬрдХ
рдХрдиреЗрдХреНрдЯрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдФрд░ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рдХрд╛рд░реНрдп рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рдо рдХрд╛ рд╕рд╛рд░ рд╣реИред рдпрд╣ Yandex.Disk API, Yandex.Photo рдпрд╛ VKontakte рд╣реЛред рдпрд╣рд╛рдБ Yandex.Disk рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рд╣реИ:
class YaDiskHTTPConnector : public QObject { Q_OBJECT public: YaDiskHTTPConnector(); ~YaDiskHTTPConnector(); void setSettings(const QString& login , const QString& password , const QString& proxy , const QString& proxyLoginPwd , bool isOAuth , const QString& token); RESULT getTreeElements(const QString& path, QString& response); RESULT downloadFile(const QString& url, const QString& path); RESULT downloadFiles(const QList <QString>& urlList, const QList <QString>& pathList); RESULT uploadFile(const QString& path, const QString& title, const QString& parentId, QString& response); RESULT deleteFile(const QString& path, QString& response); RESULT createDirectory(const QString& title, const QString& parentId, QString& response); RESULT moveElement(const QString& id, const QString& oldParentId, const QString& newParentId, ElementType type, QString& response); RESULT renameElement(const QString& id, ElementType type, const QString& newTitle, QString& response); void setToken(const QString& token); private: static size_t writeStr(void *ptr, size_t size, size_t count, void *response); static size_t fwrite_b(void *ptr, size_t size, size_t count, void *path); static size_t readStr(void *ptr, size_t size, size_t nmemb, void *stream); static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream); int execQuery(const QString &url, const QString &header, const QString &postFields, QString* response); private: struct sPutData { const char* m_data; size_t m_len; }; private: QString m_login; QString m_password; QString m_proxy; QString m_proxyLoginPwd; bool m_isOAuth; QString m_token; QString m_requestId; QString m_key; QMutex m_connectorMutex; };
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рдПрдХ рд╕рдорд╛рди рд░реВрдк рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░реНрд╕ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
- Yandex.Disk
- Yandex.Fotki
- рдлреЗрд╕рдмреБрдХ (рдлреЛрдЯреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо)
- Vkontakte (рдлреЛрдЯреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо)
- Google.Docs
Yandex.Disk рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╕рд┐рджреНрдз CURL рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрд╡рд╛ рдореЗрдВ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЦреИрд░ рдпрд╣ рд╕рдм рд╣реИ
рдЗрди рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░, рд╣рдо рдЕрдкрдиреЗ рд╕рд░рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рджреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рддрд╣рдд рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
PS рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП
рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╕реЗ рд▓рд┐рдВрдХред рдЕрдм рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рди рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдкреЛрд╕реНрдЯ рдХрд░реВрдБрдЧрд╛ред