Как программно отправить сообщение на стену Вконтакте
Добрый день, уважаемые!
Пытаюсь с помощью нижеприведенного кода, сделать добавления записей на стену в контакте программным путем! Программа компилируется, но работает неправильно.
Код:
public partial class Form2 : Form
{
CookieContainer cc = new CookieContainer();
Cookie cook;
public Form2(Cookie c)
{
InitializeComponent();
cook = c;
}
private void button1_Click(object sender, EventArgs e)
{
HttpWebRequest gethash = (HttpWebRequest)System.Net.WebRequest.Create("http://vk.com/id" + textBox1.Text);
string s = "hash";
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create("http://vk.com/al_wall.php");
request1.UserAgent = "Opera/9.80";
request1.ContentType = "application/x-www-form-urlencoded"; request1.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(s); request1.GetRequestStream().Write(bytes, 0, bytes.Length);
HttpWebResponse response = (HttpWebResponse)request1.GetResponse();
string hash = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
cc.Add(cook);
// Формируем строку с параметрами
String secondStepForm = "act=post&al=1&facebook_export=&friends_only=&hash=" + hash + "&message=" + richTextBox1.Text + "¬e_title=&official=&signed=&status_export=&to_id=" + textBox1.Text + "&type=own";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://vk.com/al_wall.php");
request.CookieContainer = cc;
// Настраиваем параметры запроса
request.UserAgent = "Opera/9.80";
request.Method = "POST";
// Указываем тип отправляемых данных
request.ContentType = "application/x-www-form-urlencoded";
// Преобразуем данные к соответствующую кодировку
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
}
Вот код, который я использую для авторизации на сайте в контакте.
Код:
public partial class Form1 : Form
{
string sid;
Cookie cook;
}
private void button1_Click(object sender, EventArgs e)
{
//создаем запрос
HttpWebRequest wrGETURL = (HttpWebRequest)System.Net.WebRequest.Create("http://vk.com/login.php?m=1&email=" + textBox1.Text + "&pass=" + textBox2.Text);
//выставляем значения Headers
//Запрещаем редирект
wrGETURL.AllowAutoRedirect = false;
//Выставляем таймаут
wrGETURL.Timeout = 100000;
//получаем Headers,пришедшие в ответе
string headers = wrGETURL.GetResponse().Headers.ToString();
//получаем весь ответ
HttpWebResponse myHttpWebResponse = (HttpWebResponse)wrGETURL.GetResponse();
//записываем ответ в поток
StreamReader myStreamReadermy = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));
//запихиваем ответ в строку
string page = myStreamReadermy.ReadToEnd();
//это регулярное выражение,которое выдирает из переменной headers(а ее мы получили выше) значение sid
Regex sidregex = new Regex("sid=([a-z0-9]+); exp");
Match ssid = sidregex.Match(headers);
sid = ssid.Groups[1].Value;
//инициализируем куки
cook = new Cookie("remixsid", sid);
//тоже самое,куки пишем
cook.Domain = "vk.com";
//проверяем,получили ли мы нужную переменную в куки
if (String.IsNullOrEmpty(sid))
MessageBox.Show("Неправильный Логин или Пароль");
else
//Form1 f1 = new Form1();
// f1.Close();
{
Form2 f2 = new Form2(cook);
f2.Show();
}
У кого сейчас есть свободное время и просто желание помочь. Подскажите, где - что неправильно и в каком направлении копать. Если кодом поможете, то будет просто превосходно! Очень надо разобраться! Рассчитываю на вашу помощь!!!
Re: Как программно отправить сообщение на стену Вконтакте
ProX_Alex, Очень выручили. Спасибо!!! Но осмелюсь еще раз вас побеспокоить. Как сделать чтобы постинг производился не на стену пользователя, а в группы, которые вносятся в ListBox ? т.е. добавляем, к примеру, 5 групп в listBox и программа постит в эти группы одно и тоже сообщение.
Добавлено через 2 часа 49 минут
Есть еще один момент. Hash выбивает ошибку, если вводить не числовой ID страницы, а буквенный.
Последний раз редактировалось Nomad1; 06.04.2012 в 01:17.
Причина: Добавлено сообщение
Re: Как программно отправить сообщение на стену Вконтакте
Выбивает ошибку потому что при постинге на стену, нужно указывать айди, а не буквенную "замену". Буквы это не айди.
По поводу групп, почти тоже самое, поснифай трафик, посмотри что отправляется и подставь в уже готовый код
Re: Как программно отправить сообщение на стену Вконтакте
Цитата:
Сообщение от ProX_Alex
Выбивает ошибку потому что при постинге на стену, нужно указывать айди, а не буквенную "замену". Буквы это не айди.
По поводу групп, почти тоже самое, поснифай трафик, посмотри что отправляется и подставь в уже готовый код
С отправкой сообщения на стену группы разобрался. Правда помучился, пока норм сниффер нашел.
вот как выглядит запрос для отправки месседже на стену группы
Re: Как программно отправить сообщение на стену Вконтакте
Не подскажите теперь по подробней, как быть с буквенной заменой и в правильном ли направлении двигаюсь ? Значит, приблизительно так... ставим условие, парсим страницу с фотографией, вытягиваем ID, заменяем его на введенную букв. замену и дальше используется уже имеющийся код. На верном пути?
Re: Как программно отправить сообщение на стену Вконтакте
HttpUtility.HtmlEncode(textBox3.Text)
Цитата:
Сообщение от Vlad7771998
А класс HttpUtility написан вами?
Если я правильно понял, то можно заменить вот на это
System.Net.WebUtility.HtmlEncode(textBox3.Text)
Добавлено через 3 минуты
У меня затык вот на этой строчке
request.Headers.Add(HttpRequestHeader.Cookie, kuki);
Авторизацию проходит норм, в вот при отправке сообщения... Пролетает и соответственно
return html; = ""
Добавлено через 1 час 7 минут
вот таким образом вырезал \n
и все заработало...
Ну в смысле без ошибок и исключений и не более