Использование методов API OK социальной сети Одноклассники в приложениях Delphi

Разобравшись с авторизацией, меня ждали не менее неожиданные открытия при работе с API Одноклассников. При наличии информационной засухи по использованию методов API этой соцсети, пришлось применять и метод ненаучного тыка. Разберу в этой статье как использовать метод group.getMembers, который запрашивает идентификаторы подписчиков группы. На момент написания статьи информация по данному методу от авторов находится здесь. Собственно и здесь дело лишь в составлении правильной строки запроса.

Секция Uses у меня выглядит так.

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms,
Dialogs, StdCtrls,synacode,httpsend,ssl_openssl, OleCtrls,  Menus,
ComCtrls, ExtCtrls, Buttons, ActiveX,ClipBrd,md5;

Я использую synapse, на мой взгляд удобную библиотеку для работы с сетью. Для преобразования MD5 использую отдельный модуль (идет в приложении к статье). Код будет работать, когда Вы уже авторизовались и переменные application_key и session_secret_key получены. В дальнейшем они участвуют в формировании подписи.

На форме есть метка Label1 и компонент Memo1.  uid=51969616576732 — взял для примера идентификатор какой-то группы. Обработчик кнопки такой.

procedure TForm1.Button1Click(Sender: TObject);
var
stream: TStringStream;
httpsend: THTTPSend;
data:tstringlist;
i,j,rs:integer;
stroka:string;
begin
//1. Формируем строку 
stroka:='application_key='+application_key+'format=jsonmethod=group.getMembersuid=51969616576732'+session_secret_key;
stroka:=MD5DigestToStr(MD5String(stroka)); // делаем подпись, шифруя MD5
stream:=TStringStream.Create(''); // 2. Формируем запрос
httpsend:=THTTPSend.Create;
httpsend.Document.Clear;
httpsend.Headers.Clear;
httpsend.HTTPMethod('GET','https://api.ok.ru/fb.do?method=group.getMembers&uid=51969616576732&format=json&access_token='+access_token+'&sig='+stroka+'&application_key='+application_key); //  
httpsend.Document.SaveToStream(stream);
Memo1.lines.LoadFromStream(httpsend.Document); // 3. Ответ сервера закидывает в Мемо
rs:=httpsend.ResultCode; // Код ответа сервера 
Label1.Caption:=IntTostr(rs); // отображаем его в метке
stream.Free;
httpsend.Free;
end;

В строке задействован  application_key  — секретный ключ приложения. Если ошибок нет, то сервер вернет примерно такое:

form1

Если пробовать применять метод без авторизации, то сервер ругнётся вот так:

{«error_code»:100,»error_msg»:»PARAM : Missed required parameter: access_token»,»error_data»:null}

Неправильное шифрование MD5 приведет к тому, что подпись на стороне сервера не совпадет с подписью, составленную вами и сервер ответит такой фразой:

{«error_code»:104,»error_msg»:»PARAM_SIGNATURE : Invalid signature 5DB579045B0BCFAA3362CF8EAB7F511A, calculated by string application_key=CBAIOJIMESABABABAformat=jsonmethod=group.getMembersuid=51969616576732********SECRET KEY*******»,»error_data»:null}

На этом подводные камни заканчиваются. В любом случае проверять запросы можно на странице описания методов apiok.ru, для этого на каждом этапе нужно заполнять поля  и нажимать оранжевые кнопки. Ниже появится расчет и результат.

konstruktor

Приложение
 
Библиотека Synapse (1.0 Мб)
 
Модуль Md5.pas (3.5 Кб)

Вам понравиться

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *