Здравствуйте, в этой статье хотел бы рассказать как я менял статус, смотрел последний измененный статус, а также историю изменения статусов. Вообще у меня почему на этом этапе сразу же возникли проблемы при отправке запроса на сервер, я почему-то не понял почему не хочет. Оказывается, что у меня права на доступ моего приложения к моей страничке стояли с меньшей битовой маской, чем 1024. Теперь Вы понимаете, что для работы с статусами пользователя необходимо, чтобы битовая маска прав доступа для данного приложения была не меньше 1024. Давайте пройдемся немного по методам API ВК, начнем с того, как нам получить статус пользователя, для этого существует метод
- activity.get
Параметры при этом методе можно сказать как таковых нету, только один необязательный параметр это — uid - идентификатор пользователя, которого статус необходимо получить, по умолчанию текущий идентификатор. Ответ приходит следующим образом
- time
- activity
- id
time - видимо когда был установлен статус, activity - текст статуса, id - идентификатор пользователя, для которого мы смотрим статус.
Далее все как положено отправляем теже данные, что и для других запросов. Для получения статусу пользователя я написал следующий код
procedure TForm1.Button7Click(Sender: TObject);
var
sig:string;
begin
Try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=activity.getv=3.0'+Pchar(LabelSecret.Caption);
sig:=md5(sig);
PostVK.Add('api_id=1918788');
PostVK.Add('method=activity.get');
PostVK.Add('format=XML');
PostVK.Add('v=3.0');
PostVK.Add('sig='+sig);
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
ShowMessage(Pars(logVK,'<activity','</activity>',0));
PostVK.Free;
except
on e:Exception do
PostVK.Free;
end;
end;
Да не забываем, что нам необходимо для начало авторитизироваться, получить данные сессии, а затем сформировать секретный код. И конечно же Вы не сможете посмотреть статус Вашего друга, если у Вашего друга для данного приложения не стоит битовая маска доступа к его странице не менее 1024.
Теперь поговорим о методе API, который позволит нам установить нужный нам статус, для этого ВК API предоставляет нам такой замечательный метод как
- activity.set
У него параметров не так уж и много, а всего один, но тут правда уже этот параметр обязательный, в предыдущем методе, единственный параметр был необязательный, а тут да, ну естественно, нам же надо установить какое-то значение в статус вот он и обязательный, этот и есть наш параметр — text. Давайте попробуем установить новый статус, далее на TButton событие OnClick я написал следующий код
procedure TForm1.Button8Click(Sender: TObject);
var
sig:string;
PostVK:TStringList;
begin
Try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=activity.settext=test statusv=3.0'+Pchar(LabelSecret.Caption);
sig:=md5(sig);
PostVK.Add('api_id=1918788');
PostVK.Add('method=activity.set');
PostVK.Add('format=XML');
PostVK.Add('v=3.0');
PostVK.Add('sig='+sig);
PostVK.Add('sid='+Pchar(LabelSid.Caption));
PostVK.Add('text=test status');
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
if pos('error_code',logVK)=0 then
ShowMessage('Status Set Ok')
else
ShowMessage('Not status Set');
PostVK.Free;
except
on e:Exception do
PostVK.Free;
end;
end;
Что здесь может быть проблемой, то что Вы можете написать в sig, когда Вы формируете эту переменную, text=test status, после v=3.0 — это будет ошибкой. Другим боком статус не установится.
Ну и наконец давайте перейдем к тому, как можно получить историю, установленный статусов, для этого ВК API предоставляет метод
- activity.getHistory
У которого можно сказать нету параметров, только один необязательный — это uid - идентификатор пользователя, для которого смотреть историю изменений статусов, по умолчанию текущий пользователь, то есть МЫ.
Для получения истории статуса я написал следующий код
procedure TForm1.Button9Click(Sender: TObject);
var
sig:string;
i:integer;
PostVK:TStringList;
begin
Try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=activity.getHistoryv=3.0'+Pchar(LabelSecret.Caption);
sig:=md5(sig);
PostVK.Add('api_id=1918788');
PostVK.Add('method=activity.getHistory');
PostVK.Add('format=XML');
PostVK.Add('v=3.0');
PostVK.Add('sig='+sig);
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
i:=1;
while i<=length(logVK) do
begin
if pos('</text>',logVK)<>0 then
begin
ListBox2.Items.Add(Utf8ToAnsi(Pars(logVK,'<text','</text>',0)));
Delete(logVK,1,pos('</text>',logVK));
i:=0;
end;
inc(i);
end;
PostVK.Free;
except
on e:Exception do
PostVK.Free;
end;
end;
То есть здесь я в цикле добавляю в TListBox статусы, которые я ставил себе на страницу когда либо, также Вы можете получить когда эти статусы создавались, это заключается в теги <created>time</created>. Далее поговорим еще с более интересными, расширенными методами ВК API, а также будем обновлять наш модуль