Здравствуйте, в этой статье я хотел бы поговорить про API VK в Delphi, давненько я не писал об этом, на этот раз я продолжаю работать со стеной пользователя, с которой нам придется работать еще как минимум 1-2 статьи. В этой статье посмотрим как можно отправлять сообщения на стену пользователя, да конечно если вы хотите, чтобы Вы могли отправлять сообщения на стену Вашего друга, то у него должно быть данное приложение и даны ему права не меньше 8192, да именно столько требует ВК для работы с сообщениями со стены. Ну что теперь давайте поговорим о самом методе, который посылает на стену пользователя сообщения, по умолчанию текущий пользователь, запомните это, то есть Вы. Итак метод
- wall.post
И отвечает за посылку сообщений на стену пользователей. Теперь рассмотрим немного параметры данного метода
- api_id - идентификатор приложения
- sig - подпись безопасности
- v - версия API. Текущая 3.0, а в документации ВК API написана 2.0, будьте внимательны
- owner_id - идентификатор пользователя, которому необходимо отправлять сообщение. По умолчанию текущий пользователь
- message - сообщение, отправляемое пользователю
- test_mode - если равен 1, то разрешает тестовые запросы к данным приложения
В результате этого будет возвращен результат в формате, который выберите Вы (XML или JSON), с идентификатором сообщения, которое Вы послали на стену пользователю. Да забыл сказать, что первые 3 параметра и параметр message являются обязательными. Что тут необходимо предусмотреть — это, чтобы Ваше сообщение было послано в нужной кодировке и чтобы на стене не отображались потом разные иероглифы, для этого я использую AnsiToUtf8. Также не забывайте в алфавитном порядке составлять подпись безопасности и конечно использовать версию API - 3.0. Ну я на вкладку «Стена» добавил пару TEdit и TButton и написал код, который отправляет на стену сообщения
procedure TForm1.Button16Click(Sender: TObject);
var
sig:string;
i:integer;
begin
try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmessage='+AnsiToUtf8(Edit6.Text)+'method=wall.postowner_id='+Edit5.Text+'v=3.0'+Pchar(LabelSecret.Caption);
sig:=md5(sig);
PostVK.Clear;
PostVK.Add('api_id=1918788');
PostVK.Add('sig='+sig);
PostVK.Add('v=3.0');
PostVK.Add('method=wall.post');
PostVK.Add('format=XML');
PostVK.Add('message='+AnsiToUtf8(Edit6.Text));
PostVK.Add('owner_id='+Edit5.Text);
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('http://api.vkontakte.ru/api.php',PostVK);
if pos('error_code',logVK)=0 then
begin
Showmessage('Message send');
end
else
begin
ShowMessage('Not message send');
end;
PostVK.Free;
except
on e:Exception do
PostVK.Free;
end;
end;
Ну что в следующих статьях продолжим разговаривать про методы, которые позволяют работать со стеной пользователя в ВК, а также был предложен вариант парсинга XML или JSON в удобной структуре, то есть, чтобы можно было как-то очень легко обращаться к полям XML-ответа с сервера, я над этим подумаю и наверное, что-то подобное придумаю, а также что-то я давно забросил свой модуль, надо наращивать позиции, а то тут уже довольно много прошли, а модуль как-то не обновляется.
Да, хочу также сказать о приятном, что многие хотят иметь свое жилье за границей, в теплой стране и так далее — потому что можно приезжать, отдыхать в свое удовольствие. Можно, например, просто арендовать квартиры, участки. Очень хороший город для отдыха — Одесса. Да, кстати снять жилье в Одессе не так уж и дорого, а самое главное, что можно выбрать квартиру под свой вкус, с нужной для Вас обстановкой. |
Полный исходник проекта можно скачать тут
Автор статьи - Andrey53
Похожие записи
Метки: API, Idhttp, VK API, vkontakte, vkontakte API, вконтакте API
Попытался авторизироваться, безрезультатно. Попробовал исходник — он так же не авторизируется. Падает на пост запросе с ошибкой HTTP/1.1 302 found (видимо т.к. происходит редирект). Если в свойсте idHTTP указать HandleRedirects как True, то ошибка исчезает, но полученные похоже уже совсем не то что нужно. В чем собака?
Незнаю, сегодня попробывал свой исходник работает на ура, все получает, все отправляет, Насчет редиректа Вы правы, в исходниках был выставлен он, возможно когда Вы пытались авторитизироваться лежал сервер ВК, в последнее время он частенько глючит, может именно сервер АПИ лежал, может ВЫ не добавили приложение на свою страницу и не дали ему нужные права, но у меня сегодня мой исходник работает
А есть возможность отправлять сообщения на стену групп?
procedure TForm1.Button1Click(Sender: TObject);
var t,d,s:string;
data:tstringlist;
begin
IdHTTP1.AllowCookies:=true;
IdHTTP1.HandleRedirects:=true;
if Pos(», t)0 then memo1.Lines.add(‘Íå âîøëè’) else memo1.lines.add(‘âîøëè’);
d:=copy(t,pos(‘»max_post_len»:280,»post_hash»‘,t),60);
data:=tstringlist.create;
data.Add(‘act=post’);
data.add(‘al=1′);
data.add(‘hash=3412816de5541e83ba’);
data.add(‘message=5678877′);
data.add(‘to_id=83955121′);
data.add(‘type=all’);
s:=idhttp1.Post(‘http://vkontakte.ru/al_wall.php’,data);
data.free;
memo1.Lines.add(s);
ShellExecute(0,’Open’,’http://vkontakte.ru/al_wall.php?act=post&al=1&hash=3412816de5541e83ba&message=233336666663&to_id=83955121&type=all’,nil,»,SW_SHOWNORMAL);
end;
end.
Я вот так написал код, но он не работает почему-то, ваш вариант тоже не работает.
в чем именно он не работает, какая ошибка? вконтакте для приложения все ли права выставлены?
Извените,я никакие права не выставлял, не заю где это там ставить, расскажите, пожалуйста.
на первой вкладке проекта есть кнопку Дать права, вот и на жимайте или вручную в настройках приложения дайте права
Как права вашему приложению дать я понял, а если я сам написал программу, как мне ей получить права вконтакте?
точно так как и в моем приложении, посмотрите ссылку в моем приложении, только вставьте свой идентификатор приложения, или в настройках приложения вконтакте
Автор удалите пост! Он давно не акруален
он не актуален и все об этом знают