Автор Тема: [yadisk] Яндекс.Диск UDF  (Прочитано 17196 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 460
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
[yadisk] Яндекс.Диск UDF
« Создано: Март 29, 2015, 17:50:21 »
AutoIt: 3.3.12.0
Версия: 1.0

Категория:  Автоматизация, Интернет,API, yandex disk, Яндекс диск.

Описание: Яндекс.Диск UDF позволяет управлять ресурсами Диска (файлами и папками) посредством HTTP-запросов REST API.

API Диска предназначен для приложений, которые работают с файлами пользователей Яндекс.Диска или хранят на Диске собственные файлы и настройки.

На данный момент UDF позволяет:
    загружать файлы на Диск и скачивать их;
    создавать новые папки;
    копировать, перемещать и удалять ресурсы.

Если еще нету диска, то регистрируйся здесь. По этой ссылке дадут лишний гигабайт!

Прежде всего вам необходим OAuth-токен, выданный вашему приложению для доступа к Диску определенного пользователю. Токен нужно передать в функцию _yadisk_set_access_token в самом начале.

Как получить OAuth-токен :
(нажмите для показа/скрытия)

Все методы API смотрите здесь: https://tech.yandex.ru/disk/doc/dg/concepts/about-docpage/
В UDF реализованы часть из них. Остальные делаются по аналогии либо под заказ.

Примечание: Библиотеке требуется WinHTTP.au3 Найти и скачать ее можно здесь http://www.autoitscript.com/forum/topic/84133-winhttp-functions/

Код/Пример:
(нажмите для показа/скрытия)

Файл: yadisk.au3


История версий:
(нажмите для показа/скрытия)

Автор(ы): inververs

Русское сообщество AutoIt

[yadisk] Яндекс.Диск UDF
« Отправлен: Март 29, 2015, 17:50:21 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2694
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [yadisk] Яндекс.Диск UDF
« Ответ #1, Отправлен: Март 29, 2015, 21:36:56 »
UDF пока не проверял (лень регистрироваться), но идея определенно стоящая. От меня +1.


Думай, прежде чем говорить.

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1366
  • Репутация: 171
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #2, Отправлен: Март 30, 2015, 08:53:33 »
(лень регистрироваться)
Зарегистрируйся, это просто! После регистрации +10 гб дадут бесплатно и ещё 1 гб в подарок (и того 11 гб)...

Оффлайн BSerj [?]

  • Новичок
  • *
  • Сообщений: 3
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #3, Отправлен: Май 11, 2015, 00:00:24 »
Спасибо, пригодится! Особенно учитывая, что я регистрировался в то время, когда яндекс расщедрился на 200 гигов :)

От себя могу добавить несколько функций:
1. Получение информации о содержимом каталога. Возвращает в виде массива список файлов и папок выбранного каталога:

(нажмите для показа/скрытия)



Добавлено: Май 11, 2015, 20:20:06

2. Запрос количества доступного/занятого пространства яндекс.диска:

(нажмите для показа/скрытия)

3. Управление общим доступом к файлам и каталогам яндекс.диска

(нажмите для показа/скрытия)
« Последнее редактирование: Май 12, 2015, 13:17:34 от BSerj »

Русское сообщество AutoIt

Re: [yadisk] Яндекс.Диск UDF
« Ответ #3 Отправлен: Май 11, 2015, 00:00:24 »

Оффлайн dilon [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [yadisk] Яндекс.Диск UDF
« Ответ #4, Отправлен: Июль 29, 2015, 15:52:29 »
inververs, Спасибо за труды и разжеванные инструкции. Только я не пойму: почему у меня не получается скачать файлы с Я.Диска? Загрузить, создать папки могу, а скачать - нет. Никакой ошибки при этом не выдает.

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135

  • Автор темы
  • Репутация: 460
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #5, Отправлен: Июль 29, 2015, 16:39:07 »
Файл большой? Мелкие скачивает? Путь к файлу правильный? Покажите код(без токена)

Оффлайн dilon [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [yadisk] Яндекс.Диск UDF
« Ответ #6, Отправлен: Июль 30, 2015, 11:48:38 »
На вашем примере:
Код: AutoIt [Выделить]
#include 'yadisk.au3'
_yadisk_set_access_token('fb8b2ca58d4942878dfc5ce0ff9c4d42')
_yadisk_download_file('/autoit/test/ydisk_example.txt')
 


После выполнения скрипта файл должен быть скачан в папку, откуда запускался скрипт?
Если да - то у меня его нет :)

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135

  • Автор темы
  • Репутация: 460
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #7, Отправлен: Июль 30, 2015, 15:00:29 »
dilon  [?]
Цитировать
После выполнения скрипта файл должен быть скачан в папку, откуда запускался скрипт?
Нет не должен. У меня сделано так, что файл скачивается в переменную, как binary, поэтому функция и завется download, a не save..
Смотрите пример, там содержимое файла выводится в MsgBox.
Что бы сохранить файл на диск есть функции
Код: AutoIt [Выделить]

Русское сообщество AutoIt

Re: [yadisk] Яндекс.Диск UDF
« Ответ #7 Отправлен: Июль 30, 2015, 15:00:29 »

Оффлайн dilon [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [yadisk] Яндекс.Диск UDF
« Ответ #8, Отправлен: Июль 30, 2015, 17:37:12 »
Код: AutoIt [Выделить]
#include 'yadisk.au3'
#include <FileConstants.au3>
_yadisk_set_access_token('fb8b2ca58d4942878dfc5ce0ff9c4d42')
$binary = _yadisk_download_file('/autoit/test/ydisk_example.txt')
FileWrite("ydisk_example.txt", $binary)
 


Так получилось :)
С файлами понятно, а папку целиком как можно скачать? Ведь FileWrite уже не подойдет...

Оффлайн neobychno [?]

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #9, Отправлен: Июль 31, 2015, 08:33:47 »
Пробую загрузить архив, сообщает что всё загружено. На яндекс диске появляется только размер отличный от оригинального и если уже этот файл слить то архив повреждён.
Тестовый пример с txt файлом отлично работает. Покапался в yadisk.au3. Там при загрузка файла используется команда FileRead. Для формирования самого запроса ещё определяется длина файла, вот он эту длину неправильно считывает. Подскажите как правильно загрузить архивы чтобы файл был корректного размера и содержания?
Код: AutoIt [Выделить]
Func _yadisk_upload_file($s_local_path, $s_yadisk_path)
    If Not FileExists($s_local_path) Then
        Return SetError(4, 0, False)
    EndIf

    __yadisk_open()
    If @error Then Return SetError(@error, @extended, False)

    Local $file_tag = __yadisk_tag($s_local_path)
    Local $file_sha = __yadisk_sha($s_local_path)
    Local $content_type = __WinHttpMIMEType($s_local_path)
    Local $data = FileRead($s_local_path)
    Local $content_length = StringLen($data)

    Local $head = _
            __yadisk_default_head() & _
            'Etag: ' & $file_tag & @CRLF & _
            'Sha256: ' & $file_sha & @CRLF & _
            'Expect: 100-continue' & @CRLF & _
            'Content-Type: ' & $content_type & @CRLF & _
            'Content-Length: ' & $content_length & @CRLF

    ConsoleWrite($head) ;### Debug Console

    Local $a_response = _WinHttpSimpleSSLRequest($__g_yadisk_http_connect, "PUT", $s_yadisk_path, Default, $data, $head, True, 1)
    If @error Then Return SetError(3, @error, False)

    If StringInStr($a_response[0], 'Created') Then
        Return True
    EndIf

    __yadisk_debug_response('_yadisk_upload_file(' & $s_local_path & ', ' & $s_yadisk_path & ')', $a_response)

    Return SetError(5, 0, $a_response[0] & $a_response[1])
EndFunc   ;==>_yadisk_upload_file


Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1366
  • Репутация: 171
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #10, Отправлен: Июль 31, 2015, 08:47:10 »
На замену FileRead:
Код: AutoIt [Выделить]
    Local $h_BinFile = FileOpen($s_local_path, 16)
    Local $data = FileRead($h_BinFile)
    FileClose($h_BinFile)
    ;~ Local $content_length = FileGetSize($s_local_path)
    Local $content_length = BinaryLen($data)
 



Добавлено: Июль 31, 2015, 08:48:52
Этот код надо вставить после этой строки:
Код: AutoIt [Выделить]
    Local $content_type = __WinHttpMIMEType($s_local_path)

Вместо этой:
Код: AutoIt [Выделить]
    Local $data = FileRead($s_local_path)
 


Оффлайн neobychno [?]

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #11, Отправлен: Июль 31, 2015, 09:05:15 »
Спасибо, приведённый код работает.

Оффлайн kopeheb [?]

  • Новичок
  • *
  • Сообщений: 17
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #12, Отправлен: Сентябрь 16, 2015, 23:10:43 »
чтот изменилось на Яндекс-диск?
у меня вот что выдает:
(нажмите для показа/скрытия)
а из примера автора:
(нажмите для показа/скрытия)
« Последнее редактирование: Сентябрь 16, 2015, 23:45:21 от kopeheb »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7809
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [yadisk] Яндекс.Диск UDF
« Ответ #13, Отправлен: Сентябрь 17, 2015, 00:35:10 »
kopeheb  [?]
Цитировать
из примера автора
А если почитать внимательно первое сообщение?


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн kopeheb [?]

  • Новичок
  • *
  • Сообщений: 17
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [yadisk] Яндекс.Диск UDF
« Ответ #14, Отправлен: Сентябрь 17, 2015, 00:48:42 »
доброй ночи CreatoR
Цитировать
А если почитать внимательно первое сообщение?
как раз разбираюсь
и я так понял, что не так все просто, что пример автора просто пример, а yadisk.au3 не универсален?
 :(
все, нашел чего не доставало, соррь  :-\ :-[
« Последнее редактирование: Сентябрь 17, 2015, 01:14:32 от kopeheb »

Русское сообщество AutoIt

Re: [yadisk] Яндекс.Диск UDF
« Ответ #14 Отправлен: Сентябрь 17, 2015, 00:48:42 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
4018 Просмотров
Последний ответ Сентябрь 30, 2011, 10:48:58
от Yashied
8 Ответов
3268 Просмотров
Последний ответ Октябрь 03, 2012, 09:26:08
от Sln
13 Ответов
5762 Просмотров
Последний ответ Декабрь 03, 2014, 14:12:45
от madmasles
0 Ответов
1228 Просмотров
Последний ответ Апрель 26, 2015, 15:19:08
от madmasles
5 Ответов
1599 Просмотров
Последний ответ Январь 17, 2016, 00:49:20
от Alofa
1 Ответов
778 Просмотров
Последний ответ Март 19, 2016, 11:09:57
от alex33
17 Ответов
3023 Просмотров
Последний ответ Сентябрь 30, 2016, 20:59:53
от ini
0 Ответов
759 Просмотров
Последний ответ Декабрь 18, 2016, 12:45:25
от mef-t
2 Ответов
281 Просмотров
Последний ответ Апрель 26, 2017, 06:42:40
от Skif_off
4 Ответов
532 Просмотров
Последний ответ Июнь 20, 2017, 15:54:08
от Garrett