Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
1

Авторизация в Yandex, API

28.06.2017, 23:35. Просмотров 4276. Ответов 4
Метки нет (Все метки)


Доброй ночи уважаемые программисты!

Уже который день бьюсь головой об стол, не могу авторизоваться в Yandex средствами delphi (RX)
собственно задача стоит загрузки файла на yandex диск .
curl не предлагать, с ним я разобрался, да и не подходит его реализация, достаточно медленный.

Буду работать в потоках.

Думаю подойдет даже конкретная ссылка на конкретный API для Desctop App.

ТО ли я такой тупой толи разработчики Яндекса идиоты ))).
Пробовал вот это
HTML5
1
2
3
4
5
6
7
8
https://oauth.yandex.ru/authorize?
   response_type=code
 & client_id=<идентификатор приложения>
[& device_id=<идентификатор устройства>]
[& device_name=<имя устройства>]
[& login_hint=<имя пользователя или электронный адрес>]
[& force_confirm=yes]
[& state=<произвольная строка>]
с помощью idHttp. В ответ страница авторизации

Добавлено через 1 минуту
Я так подозреваю что этот API
HTML5
1
2
3
4
5
6
7
8
https://oauth.yandex.ru/authorize?
   response_type=code
 & client_id=<идентификатор приложения>
[& device_id=<идентификатор устройства>]
[& device_name=<имя устройства>]
[& login_hint=<имя пользователя или электронный адрес>]
[& force_confirm=yes]
[& state=<произвольная строка>]
Для Web Приложений...

Дайте курс!!!!

Добавлено через 3 минуты
Пробовал WebDav, скачать могу, информацию о файле узнать тоже могу и директорию могу создать, а загрузить не выходит.
Вот и подозреваю что нужна авторизация. Хотя...

Содрал на каком то форуме
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Var
 s, r: TStringStream;
 u: UTF8String;
 
 fs : TFileStream;
 byteArray:THashSHA2;
 
 Token : string;
begin
  Token := EncodeBase64(Edit1.Text + ':' + Edit2.Text);
  u := '<propertyupdate xmlns="DAV:">' + sLineBreak +
  '<set>'  + sLineBreak +
    '<prop>'  + sLineBreak +
      '<public_url xmlns="urn:yandex:disk:meta">true</public_url>'  + sLineBreak +
    '</prop>'  + sLineBreak +
  '</set>'  + sLineBreak +
'</propertyupdate>';
 
  s := TStringStream.Create(u);
 
  s.Seek(0, 0);
 
  r := TStringStream.Create('');
  try
    IdWebDAV.Request.Clear;
    IdWebDAV.Request.CharSet := 'UTF-8';
    IdWebDAV.Request.Host := 'webdav.yandex.ru';
    IdWebDAV.Request.Accept := 'Accept: */*';
    IdWebDAV.Request.ContentType := 'application/binary';
    IdWebDAV.Request.CustomHeaders.Add('Authorization: Basic ' + Token);
    IdLogFile1.Active := True;
    //IdWebDAV.DAVPropPatch('https://webdav.yandex.ru/cms/ry0554VXRrI.jpg', s, r);
 
    fs := TFileStream.Create('ry0554VXRrI.jpg', fmOpenRead);
    //IdWebDAV.Request.Method := 'PUT /CURL_DIRS/ry0554VXRrI.jpg HTTP/1.1';
    IdWebDAV.Request.ContentLength := fs.Size;
   // IdWebDAV.Request.ETag := MD5DigestToStr(MD5Stream(fs));
    fs.Position := 0;
    IdWebDAV.DAVPut('https://webdav.yandex.ru/',fs, 'a7a04cc365d34c24b4a755bc8ecac856');
 
    fs.Position := 0;
    FS.Free;
    r.Position := 0;
    Memo1.Lines.Text := UTF8Decode(r.DataString);
  finally
    s.Free;
    r.Free;
  end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2017, 23:35
Ответы с готовыми решениями:

Капча Вконтакте API. (прямая авторизация)
Делаю приложение на Delphi и всё работает кроме одного - капча. Когда вылазит капча, я делаю...

Yandex api.directory.yandex.net создание почтового ящика
Добрый день. Пишу скрипт для создания почтовых ящиков на Яндекс.Коннект с использованием API...

Yandex API
Добрый день форумчанам! Просьба откликнуться имеющим опыт в написании Яндекс API приложений. Ну...

API Yandex переводчик
Учусь работать с JSON и для практики решил написать переводчик на основе API Яндекс переводчика. ...

__________________
Помогаю в написании студенческих работ здесь.
4
4843 / 3822 / 1275
Регистрация: 14.04.2014
Сообщений: 17,665
Записей в блоге: 18
29.06.2017, 04:29 2
тут же все по-русски
https://tech.yandex.ru/disk/rest/
и смысл процедуры авторизации и все остальное...
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
29.06.2017, 14:02  [ТС] 3
Вот в том то и дело, много прогуливал в школе...

REST API Диска
Я так понимаю это для моей задачи? <---- глупость спросил...

Но когда я делаю запрос мне в ответ сраничка целиком, а не ответ JSON.
То есть мне из веб морды доставать данные?


Приложение направляет пользователя на страницу Яндекс.OAuth, где он может разрешить доступ к своим данным.

У меня же не веб приложение, куда он меня направляет???
То есть нужно как то сделать это переход?
Реально завис...

С ВК было проще... Там тоже авторизация OAuth, хотя у меня к ним тоже есть вопросы...

Вот интересно. Значит я могу скачать файл, создать директорию и даже удалить, а вот загрузить не выходит...
Помогите...

К черту авторизацию, оставлю на худшие времена...

Почему недостаточно вот этого для загрузки?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
try
    IdWebDAV.Request.Clear;
    IdWebDAV.Request.CharSet := 'UTF-8';
    IdWebDAV.Request.Host := 'webdav.yandex.ru';
    IdWebDAV.Request.Accept := 'Accept: */*';
    IdWebDAV.Request.ContentType := 'application/binary';
    IdWebDAV.Request.CustomHeaders.Add('Authorization: Basic ' + Token);
    IdLogFile1.Active := True;
    //IdWebDAV.DAVPropPatch('https://webdav.yandex.ru/cms/ry0554VXRrI.jpg', s, r);
 
    fs := TFileStream.Create('ry0554VXRrI.jpg', fmOpenRead);
    //IdWebDAV.Request.Method := 'PUT /CURL_DIRS/ry0554VXRrI.jpg HTTP/1.1';
    IdWebDAV.Request.ContentLength := fs.Size;
   // IdWebDAV.Request.ETag := MD5DigestToStr(MD5Stream(fs));
    fs.Position := 0;
    IdWebDAV.DAVPut('https://webdav.yandex.ru/',fs, 'a7a04cc365d34c24b4a755bc8ecac856');
 
    fs.Position := 0;
    FS.Free;
    r.Position := 0;
    Memo1.Lines.Text := UTF8Decode(r.DataString);
  finally
    s.Free;
    r.Free;
  end;


Token = md5(vasy:vasy);
здесь же IdWebDAV.Request.CustomHeaders.Add('Authorization: Basic ' + Token);

Добавлено через 6 минут
curl может загрузить и скачать файл, почему я не могу этого сделать. В интернете нет четкого примера на эту тему...
Зуб даю.
0
4843 / 3822 / 1275
Регистрация: 14.04.2014
Сообщений: 17,665
Записей в блоге: 18
29.06.2017, 15:18 4
это обычные запросы http без всяких дав
они исполняются с помощью TidHTTP или THttpClient для новых версий делфи
там на сайте есть полигон, где можно составить запрос и получить ответ. не в виде страницы, а в виде JSON
получите токен, да гоняйте-отлаживайте запросы. потом в том же порядке делайте это в делфи
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
29.06.2017, 16:41  [ТС] 5
Спасибо! Покоя мне не давал WebDav.
Хотелось бы его использовать... Он же тоже на основе http.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2017, 16:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Yandex REST API
Здравствуйте! Разбираюсь с Yandex REST API. Я смог разобраться, как работать через get-запросы,...

Java работа с Yandex API
Я отсылаю запрос https://cloud-api.yandex.net:443/v1/disk/resources/download?resources?path=%2F...

Python3 api yandex maps
С чего начать? Кто-нибудь пользовался? Цель собрать предприятия по запросу

JSON yandex translate API (перевод ru-en)
Приветствую! Будьте добры подсказать в чем может быть причина, по которой с русского на английский...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.