powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / google api
8 сообщений из 8, страница 1 из 1
google api
    #39884431
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос наверное не в эту ветку форума..
в общем весь день пытаюсь авторизоваться в google колендаре..
не могу понять коким парраметрам передовать client ID и client secret..
по ходу, что бы пользоватся их справкой нужно сломать голову))

Код: pascal
1.
2.
3.
4.
5.
 url:='https://www.googleapis.com/auth/calendar';
 http:=createoleobject('WinHttp.WinHttpRequest.5.1');
 http.open('GET', url, true); 
 http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 http.send(' ');



http.send(' ??? =client ID&???=client secret' );
может кто уже с этим сталкивался?
...
Рейтинг: 0 / 0
google api
    #39884445
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVP,

Сделано в FastScript:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var  url:string ='https://www.googleapis.com/auth/calendar';
var HTTP :variant;
begin
 http:=createoleobject('WinHttp.WinHttpRequest.5.1');
 http.open('GET', url, 0); 
 http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 http.send('');
 showmessage(vartostr(http.status)+',text: '+vartostr(http.statustext));
end.


Получим статус 200 Ok.

Если http.open('GET', url, true); то это асинхронный вызов, ответ не получим сразу после send. ( документация )

Получим исключение:
OLE error 80020009: status: Ошибка
Source :: WinHttp.WinHttpRequest
Description :: Данные, необходимые для завершения этой операции еще не доступны.

Если Send(' ') (пробел то есть), то получаем 400 Bad request
Я вообще Send() пишу. Посылать что-то в параметре вообще имеет смысл в методе POST, наверное.

Собственно, полученный результат: showmessage(http.responsetext);

Ну а дальше надо читать доку к calendar, видимо.
...
Рейтинг: 0 / 0
google api
    #39884455
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov,
с этим проблем нет

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
 begin
 url:='https://www.googleapis.com/auth/calendar';
 http:=createoleobject('WinHttp.WinHttpRequest.5.1');
 http.open('GET', url, true); 
 http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 http.send(' ');
 Timer:=TTimer.Create(Form1);   
 Timer.Interval:=1000;          
 Timer.Enabled:=True;           
 Timer.OnTimer:=@cGoogle;       
 end;

procedure cGoogle;
begin
  try
    if http.Status() = 200 then
      begin
       Form1.Memo1.Text:=http.responsetext;
       end;
       except
       Form1.Memo1.Text:='pusto';
    end;
end;
...
Рейтинг: 0 / 0
google api
    #39884468
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVP,
В Честном Знаке в Маркировке лекарств делаю так:

во-первых, надо использовть метод POST
Код: pascal
1.
    WinHttp.Open('POST','http://api.sb.mdlp.crpt.ru/api/v1/auth',0);


а во-вторых, послать строку
Код: pascal
1.
2.
    strvalue := '{"client_id":"'+client_id+'","client_secret":"'+CLIENT_SECRET+'","user_id":"'+USER_ID+'","auth_type":"SIGNED_CODE"}';
    WinHttp.Send(strvalue);


В ответ через WinHttp.ResponseText(); получаем код доступа, который подписываем, посылаем обратно через post, завернув в соответствующий JSON, и получаем токен, при указании которого в заголовке уже работаем спокойно с ихним api в течение получаса, пока он действует. У них есть подробное описание этого процесса.

Первая же ссылка подсказывает, что здесь тоже очень всё похоже: регистрируем "проект" и при логине указываем его данные. Остается найти спецификации на формирование этого посылаемого JSON.
...
Рейтинг: 0 / 0
google api
    #39884472
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И почему вот здесь http.send(' ??? =client ID&???=client secret' ); параметры с их значениями местами перепутаны? И пробелы в названиях параметров. Или это было где-то в документации так описано?
...
Рейтинг: 0 / 0
google api
    #39884483
VladimirVVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov,

а что за "user_id":"'+USER_ID+'" - в описании google такого нет

и для авторизции используется https://www.googleapis.com/auth/calendar так у них в описании сказано https://developers.google.com/calendar/auth..

а по вашей ссылке - это описание подключение вебсервера
...
Рейтинг: 0 / 0
google api
    #39884484
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет-нет, USER_ID - это не про гугл. Я привел пример подключения к ЧЗ. Может, поможет. Там я тоже довольно долго возился совсем недавно, пока пошло. Ошибки оказались буквально в мелочах.
...
Рейтинг: 0 / 0
google api
    #39884650
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirVVPс этим проблем нет
...
таймер тут тоже не спасет: если запросить status, не дождавшись ответа от сервера, то будет ошибка:

OLE error 80020009: Нельзя вызвать этот метод до вызова метода Send

Надо дождаться ответа, либо прекратить ожидание, если висит жестко.

Как-то так примерно с асинхронным вызовом:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
      WinHttp.Open('GET','адрес',1);
      WinHttp.setRequestHeader(...);
      WinHttp.Send(); 
      while not winhttp.waitforresponse(1) do 
      begin
        application.processmessages;
        if ХВАТИТ_ЖДАТЬ then 
        begin
          winhttp.abort;
          raise exception.create('Запрос остановлен');
        end; 
      end;
      showmessage('preferences status: '+vartostr(winhttp.status)+',text: '+vartostr(winhttp.statustext)+', response: '+winhttp.responsetext);

...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / google api
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]