В одном из постов в блоге я рассказывал про новый класс в проекте «Google API в Delphi» для авторизации в API по протоколу OAuth 2.0.
По большому счёту модуль для OAuth создавался для того, чтобы использовать его в API, которые не поддерживают ClientLogin (в основном это новые API из Лаборатории). Но после известных событий в самом Google (см. «18 API Google псу под хвост…«) этот модуль как-то затерялся, забылся т.к. тратить время над API, которые в любой момент могут быть объявлены несостоявшимися как-то не хотелось. Сегодня я решил снова вернуться к теме использования OAuth в Google и написать небольшой компонент Delphi, которые, наряду с уже имеющимися компонентом GoogleLogin позволит авторизовываться в любых API Google вне зависимости от того находится ли этот API в лаборатории или это стабильная версия, например, как Google Docs API 2.0.
Чтобы не повторяться дважды и не рассказывать об устройстве OAUth 2.0 для проектов гугла, советую Вам прочитать предыдущий пост на эту тему, тем более, что демка для компонента будет таже самая.
Изменения в класса TOAuth
Итак, что изменилось в модуле по сравнению с предыдущим вариантом.
1. Класс TOAuth теперь стал компонентом Delphi. Компонент TOAuth можно установить на панель Delphi. Для этого необходимо скачать пакет по ссылке, предоставленной в конце поста.
2. В компоненте, помимо основной его функции- авторизации в сервисе и получении токена, дополнительно реализованы четыре метода для выполнения основных HTTP-запросов к ресурсам API:
TOAuth = class(TComponent) ... function GETCommand(URL: string; Params: TStrings): RawBytestring; function POSTCommand(URL: string; Params: TStrings; Body: TStream; Mime: string = DefaultMime): RawBytestring; function PUTCommand(URL: string; Body: TStream; Mime: string = DefaultMime) : RawBytestring; procedure DELETECommand(URL: string);
Как понятно из названий методов они предназначены для выполнения GET-, POST-, PUT- и DELETE-запросов.
3. Чтобы не заставлять всех скачивать и устанавливать вместе с компонентом Synapse компонент был переписан под библиотеку Indy.
4. Чтобы облегчить Вам использование компонента в проектах пришлось немного потрудиться над созданием простенькой документации к компоненту. Теперь, чтобы узнать для чего нужно то или иное свойство или метод компонента достаточно навести на него курсор мышки и получить необходимое описание:
Help Insight — сила =). Конечно по этой причине в модуле появилось достаточно много «лишнего» текста, но, думаю, что это не сильно помешает пользователям компонента.
Вот, пожалуй все изменения для класса OAuth. Теперь рассмотрим небольшую демку по работе с компонентом.
Пример использования компонента
Раз уж первоначальной идеей для модуля было использование его с Google Tasks API, то и рассмотрим пример получения токена для этого API. Итак, создаем новое приложение Delphi и на главную форму приложения бросаем следующие компоненты:
- TWebBrowser — для показа пользователю странички авторизации и получения ключа
- 3 TButton — для загрузки Web-страницы, получения токена и его обновления
- 2 Memo — для вывода сведений по токену и вывода обновленного значения токена.
ClientID и ClientSecret — идентификатор и секретный ключ клиента. Эти значения Вы получите при регистрации своего клиента в Google.procedure TForm3.Button1Click(Sender: TObject); begin WebBrowser1.Navigate(OAuth1.AccessURL); end;
Клик по кнопке получения токена:
procedure TForm3.Button2Click(Sender: TObject); begin OAuth1.ResponseCode:=edToken.Text;//запоминаем код Memo2.Lines.Clear; Memo1.Lines.Add('Access Token = '+OAuth1.GetAccessToken);//получаем токен Memo1.Lines.Add('Eexpires_in = '+OAuth1.Expires_in);//время жизни токена Memo1.Lines.Add('Refresh Token = '+OAuth1.Refresh_token);//ключ для обновления end;
И последний клик по кнопке обновления:
procedure TForm3.Button3Click(Sender: TObject); begin Memo2.Lines.Clear; Memo2.Lines.Add(OAuth1.RefreshToken) end;
В результате в запущенном приложении можно получить следующие значения:
После клика по кнопке получения кода доступа:

После получения токена:
Теперь, после того как получен токен, Вы можете используя методы компонента выполнять любые запросы к API — компонент сам подставит необходимые заголовки в запрос, отправит его и вернет ответ сервера.
Книжная полка
![]() |
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
![]() |
![]() |
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
![]() |





Два дня пытался скрестить unit GTaskAPI вкупе с OAuth, и при вызове ListList возвращается текст ошибки:
{
«error»: {
«errors»: [
{
«domain»: «global»,
«reason»: «authError»,
«message»: «Invalid Credentials»,
«locationType»: «header»,
«location»: «Authorization»
}
],
«code»: 401,
«message»: «Invalid Credentials»
}
}
Дело в том, что OAuth-ом регистрация проходит, токен получаю. Объект OAuth передаю (Task.OAuthClient := OAuth;), затем вызываю ShowMessage(Task.ListsList()); — результат — текст вышеприведенной ошибки :(
Попрошу вас Влад добавить меня в группу delphicelendar ибо есть непреодолимое желание реализовать работу GTaskAPI через ClientLogin. Спасибо.
[…] на будущее и дописать компонент для работы с Google OAuth 2.0. Всё-таки как бы ни хотелось использовать только […]
[…] дел. Для авторизации в API Google Вы можете использовать модуль для OAuth, или же, если у Вас Delphi XE5 и выше — библиотеку REST Client […]
[…] дел. Для авторизации в API Google Вы можете использовать модуль для OAuth, или же, если у Вас Delphi XE5 и выше — библиотеку REST Client […]
Как его на 7 заставить работать?
никак
Так и не нашел ссылку для скачивания компоненты.