Здравствуйте, в этой статье хотел бы рассказать как я менял статус, смотрел последний измененный статус, а также историю изменения статусов. Вообще у меня почему на этом этапе сразу же возникли проблемы при отправке запроса на сервер, я почему-то не понял почему не хочет. Оказывается, что у меня права на доступ моего приложения к моей страничке стояли с меньшей битовой маской, чем 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('http://api.vkontakte.ru/api.php',PostVK);
    ShowMessage(Pars(logVK,','',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('http://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('http://api.vkontakte.ru/api.php',PostVK);
    i:=1;
    while i<=length(logVK) do
     begin
      if pos('',logVK)<>0 then
       begin
        ListBox2.Items.Add(Utf8ToAnsi(Pars(logVK,','',0)));
        Delete(logVK,1,pos('',logVK));
        i:=0;
       end;
      inc(i);
     end;
    PostVK.Free;
   except
    on e:Exception do
     PostVK.Free;
   end;
end;

То есть здесь я в цикле добавляю в TListBox статусы, которые я ставил себе на страницу когда либо, также Вы можете получить когда эти статусы создавались, это заключается в теги time. Далее поговорим еще с более интересными, расширенными методами ВК API, а также будем обновлять наш модуль

А еще хочу сказать что прикольные статусы в контакте помогут Вам и Вашим друзьям поднять настроение и развеселить.

Полные исходники проекта VK API качаем тут

Автор статьи - Andrey53

Метки: , , , ,




К записи “Проект VK API в Delphi. Работа с статусами” оставлено комментариев: 4.

  1. whisper:

    http://api.vkontakte.ru/api.ph.....7d0849ebb0 6aa9bbc1dfa4b4e1e99a07355676c&text=mystatus — вот так выглядит запрос

    вот sig: mid + «api_id=» + aplid + «format=XMLmethod=status.setv=3.0″ + secret;

    вот что выдает в итоге:


    3
    Unknown method passed

    В чем проблема кто знает?

  2. whisper:

    http://api.vkontakte.ru/api.ph.....t=mystatus

  3. SanLLIer:

    проблемы с установкой русского статуса. Если пытаться установить статус на английском языке, то все норм, если на русском — Incorrect signature. В чем косяк?

  4. SanLLIer:

    предполагаю, что косяк в кодировке, но как избежать?

Оставить комментарий

Вы можете использовать следующие теги:

*