Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Как программно отправить сообщение на стену Вконтакте

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 04.04.2012, 01:48   #1
 Разведчик
Аватар для Nomad1
 
Nomad1 скоро будет известенNomad1 скоро будет известенNomad1 скоро будет известен
Регистрация: 23.12.2011
Сообщений: 0
Популярность: 206
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
Unhappy Как программно отправить сообщение на стену Вконтакте

Добрый день, уважаемые!

Пытаюсь с помощью нижеприведенного кода, сделать добавления записей на стену в контакте программным путем! Программа компилируется, но работает неправильно.

Код:
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 + "&note_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();

            }
У кого сейчас есть свободное время и просто желание помочь. Подскажите, где - что неправильно и в каком направлении копать. Если кодом поможете, то будет просто превосходно! Очень надо разобраться! Рассчитываю на вашу помощь!!!
  Ответить с цитированием
Старый 04.04.2012, 04:12   #2
 Разведчик
Аватар для ProX_Alex
 
ProX_Alex никому не известный тип
Регистрация: 08.12.2011
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

Nomad1,
держи. на скрине указано какой текстбокс и баттоны за что отвечают,

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;
using System.Web.Util;
using System.Web;


namespace PostWall
{
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
        }



        delegate void dg();
        private void button1_Click(object sender, EventArgs e) // кнопка входа
        {
           
        }

        string sid; // кука авторизации
        private void avtoriz() // авторизация
        {
            Invoke(new dg(avtor));


            
        }

        void avtor()
        { 
            string recv = this.post("http://login.vk.com/", "act=login&q=1&al_frame=1&expire=&captcha_sid=&captcha_key=&from_host=vkontakte.ru&email=" + this.textBox1.Text + "&pass=" + this.textBox2.Text, "");
            if (recv.IndexOf("parent.onLoginDone") != -1)
            {
                
                recv = recv.Remove(0, recv.IndexOf("setCookieEx('sid',") + 20);
                recv = recv.Substring(0, recv.IndexOf("'"));
                sid = "remixsid=" + recv + ";";
                MessageBox.Show("Успешно авторизовались!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //return true;
                panel1.Enabled = false;
                panel2.Enabled = true;

                
            }
            else
            {
                MessageBox.Show("Неверный логин/пароль", "Error!!!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //return false;
            }
        }

        private string post(string URL, string Post, string kuki) // метод пост запроса
        {
            string html = string.Empty; HttpWebResponse response = null;
            try
            {
                String secondStepForm = Post;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
                request.UserAgent = "Opera/9.80";
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.Headers.Add(HttpRequestHeader.Cookie, kuki);
                byte[] EncodedPostParams = Encoding.UTF8.GetBytes(secondStepForm);
                request.ContentLength = EncodedPostParams.Length;
                request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length);
                request.GetRequestStream().Close();
                response = (HttpWebResponse)request.GetResponse();
                html = new StreamReader(response.GetResponseStream(), Encoding.Default).ReadToEnd();
            }
            catch { } return html;
        }


        string[] lines;
        private void Form1_Load(object sender, EventArgs e) // загрузка настроек
        {
            
            try
            {
                lines = File.ReadAllLines("settings.dat");
            }
            catch
            {
                lines = new string[2];
            }
            textBox1.Text = lines[0];
            textBox2.Text = lines[1];

            panel2.Enabled = false;
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                Thread th = new Thread(new ThreadStart(avtoriz));
                
                th.IsBackground = true;
                th.Start();
                /*
                textBox1.Enabled = false;
                textBox2.Enabled = false;
                button1.Enabled = false;
                */

                FileStream FS = new FileStream("settings.dat", FileMode.OpenOrCreate);
                StreamWriter SW = new StreamWriter(FS);
                SW.WriteLine(textBox1.Text + "\n" + textBox2.Text);
                SW.Close();


            }
            else { MessageBox.Show("Введите логин/пароль", "Error!!!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
        }

        void PostWall(string id)
        {
            string html = post("http://vk.com/id" + id , "", this.sid);
            string hash;
            hash = html.Remove(0, html.IndexOf("\"post_hash\":") + 13);
            hash = hash.Substring(0, hash.IndexOf("\""));

            post("http://vk.com/al_wall.php", "act=post&al=1&facebook_export=&friends_only=&hash=" + hash + "&message=" + HttpUtility.HtmlEncode(textBox3.Text) + "&note_title=&official=&signed=&status_export=&to_id=" + id + "&type=all", this.sid);
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            PostWall(textBox4.Text);
            
            
        }
        

    }
}
[Ссылки могут видеть только зарегистрированные пользователи. ]

Последний раз редактировалось ProX_Alex; 04.04.2012 в 04:17.
  Ответить с цитированием
Старый 05.04.2012, 22:27   #3
 Разведчик
Аватар для Nomad1
 
Nomad1 скоро будет известенNomad1 скоро будет известенNomad1 скоро будет известен
Регистрация: 23.12.2011
Сообщений: 0
Популярность: 206
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

ProX_Alex, Очень выручили. Спасибо!!! Но осмелюсь еще раз вас побеспокоить. Как сделать чтобы постинг производился не на стену пользователя, а в группы, которые вносятся в ListBox ? т.е. добавляем, к примеру, 5 групп в listBox и программа постит в эти группы одно и тоже сообщение.

Добавлено через 2 часа 49 минут
Есть еще один момент. Hash выбивает ошибку, если вводить не числовой ID страницы, а буквенный.

Последний раз редактировалось Nomad1; 06.04.2012 в 01:17. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 06.04.2012, 21:43   #4
 Разведчик
Аватар для ProX_Alex
 
ProX_Alex никому не известный тип
Регистрация: 08.12.2011
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

Выбивает ошибку потому что при постинге на стену, нужно указывать айди, а не буквенную "замену". Буквы это не айди.
По поводу групп, почти тоже самое, поснифай трафик, посмотри что отправляется и подставь в уже готовый код
  Ответить с цитированием
Старый 07.04.2012, 04:25   #5
 Разведчик
Аватар для Nomad1
 
Nomad1 скоро будет известенNomad1 скоро будет известенNomad1 скоро будет известен
Регистрация: 23.12.2011
Сообщений: 0
Популярность: 206
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

Цитата:
Сообщение от ProX_AlexПосмотреть сообщение
Выбивает ошибку потому что при постинге на стену, нужно указывать айди, а не буквенную "замену". Буквы это не айди.
По поводу групп, почти тоже самое, поснифай трафик, посмотри что отправляется и подставь в уже готовый код

С отправкой сообщения на стену группы разобрался. Правда помучился, пока норм сниффер нашел.

вот как выглядит запрос для отправки месседже на стену группы
Код:
 post("http://vk.com/al_wall.php", "act=post&al=1&facebook_export=&friends_only=&hash=" + hash + "&message=" + HttpUtility.HtmlEncode(richTextBox1.Text) + "&note_title=&official=&signed=&status_export=&to_id=-" + id + "&type=own", this.sid);
ну и понятное дело в адрессе дописываем вместо id - club.
Код:
string html = post("http://vk.com/club" + id, "", this.sid);
а можно как нибудь определять Id, если вводится буквенная замена ? И можно ли как-то сделать отправку сообщений сразу в несколько групп?

Последний раз редактировалось Nomad1; 07.04.2012 в 04:35. Причина: ошибка
  Ответить с цитированием
Старый 07.04.2012, 05:15   #6
 Разведчик
Аватар для ProX_Alex
 
ProX_Alex никому не известный тип
Регистрация: 08.12.2011
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

Цитата:
Сообщение от Nomad1Посмотреть сообщение
а можно как нибудь определять Id, если вводится буквенная замена ?

заходишь на его страницу, и в адресе его фотографии есть его айди.

сразу в несколько групп пости сообщения прогоняя по циклу айдишники групп
  Ответить с цитированием
Старый 07.04.2012, 05:47   #7
 Разведчик
Аватар для Nomad1
 
Nomad1 скоро будет известенNomad1 скоро будет известенNomad1 скоро будет известен
Регистрация: 23.12.2011
Сообщений: 0
Популярность: 206
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

если не трудно, то подскажите как это в коде выглядит. сам буду долго разбираться.
  Ответить с цитированием
Старый 08.04.2012, 17:02   #8
 Разведчик
Аватар для Nomad1
 
Nomad1 скоро будет известенNomad1 скоро будет известенNomad1 скоро будет известен
Регистрация: 23.12.2011
Сообщений: 0
Популярность: 206
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

Цитата:
Сообщение от ProX_AlexПосмотреть сообщение
сразу в несколько групп пости сообщения прогоняя по циклу айдишники групп

Что-то я ступил. Думал, почему-то, что тут сложнее. Вот так сделал цикл.

Код:
for (int i = 0; i < listBox1.Items.Count; i++)
            {
                PostWall(listBox1.Items[i].ToString());     
            }

Последний раз редактировалось Nomad1; 09.04.2012 в 03:56.
  Ответить с цитированием
Старый 08.04.2012, 18:46   #9
 Разведчик
Аватар для ProX_Alex
 
ProX_Alex никому не известный тип
Регистрация: 08.12.2011
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

Ну вот, сам разобрался, зато теперь понимать будешь.
  Ответить с цитированием
Старый 09.04.2012, 03:24   #10
 Разведчик
Аватар для Nomad1
 
Nomad1 скоро будет известенNomad1 скоро будет известенNomad1 скоро будет известен
Регистрация: 23.12.2011
Сообщений: 0
Популярность: 206
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

Не подскажите теперь по подробней, как быть с буквенной заменой и в правильном ли направлении двигаюсь ? Значит, приблизительно так... ставим условие, парсим страницу с фотографией, вытягиваем ID, заменяем его на введенную букв. замену и дальше используется уже имеющийся код. На верном пути?
  Ответить с цитированием
Старый 09.04.2012, 06:02   #11
 Разведчик
Аватар для ProX_Alex
 
ProX_Alex никому не известный тип
Регистрация: 08.12.2011
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

да. Имея цифровой айди, используем уже имеющийся код, и постим сообщение на стену.
  Ответить с цитированием
Старый 13.03.2014, 10:59   #12
 Разведчик
Аватар для Vlad7771998
 
Vlad7771998 никому не известный тип
Регистрация: 08.03.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как программно отправить сообщение на стену Вконтакте

А класс HttpUtility написан вами?
  Ответить с цитированием
Старый 04.02.2015, 19:54   #13
 Разведчик
Аватар для bolikgeko
 
bolikgeko никому не известный тип
Регистрация: 04.02.2015
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию 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
и все заработало...
Ну в смысле без ошибок и исключений и не более

kuki = kuki.Replace('\n', ' ');

request.Headers.Add(HttpRequestHeader.Cookie, kuki);

Последний раз редактировалось bolikgeko; 04.02.2015 в 21:01. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получаем IP программно. .:InSiDe:. C# 8 22.02.2012 20:27
[Помогите!] Хочу научиться включать PET программно??? Twister526 Вопросы и ответы, обсуждения 3 16.12.2011 23:08
[Помогите!] Как программно остановить выполнение программы. *Хalyava* Вопросы и ответы, обсуждения 2 28.10.2011 13:55

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 12:43.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net