Использование методов 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 — секретный ключ приложения. Если ошибок нет, то сервер вернет примерно такое:
Если пробовать применять метод без авторизации, то сервер ругнётся вот так:
{«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, для этого на каждом этапе нужно заполнять поля и нажимать оранжевые кнопки. Ниже появится расчет и результат.