Показаны сообщения с ярлыком Api. Показать все сообщения
Показаны сообщения с ярлыком Api. Показать все сообщения

понедельник, 3 сентября 2012 г.

[видеоурок] C# Авторизация ВКонтакте через Api / Работа с методами VkApi

Это ещё один на этом блоге видеотуториал, желательно смотреть все два видео, так как второе является продолжением первого и начинается второе с того места, где был закончен первый.
Исходник проекта, который создан и показан в видео:

Исходник проекта, который показан:
vk_Api_groups.rar   162 KB

среда, 4 июля 2012 г.

C# vk api Загрузка списка друзей

Выкладываю готовый исходник. Это может послужить примером работы библиотеки apicore, которая непосредственно взаимодействует с сайтом vk.com.

Первая часть статьи уже есть на этом блоге, где частично рассматривается работа с сервисом api контакта. ССЫЛКа

Здесь вы увидите пример работы именно с классом FriendsFactory.

Для работы необходимо делать импорт библиотек ApiCore и HttpDownloader.

Скачать их можно тут:
ApiCore.dll   54.0 KB
HttpDownloader.dll   11.5 KB


Исходники проекта лежат здесь:
GetFriends_VKAPI.rar   87.0 KB


Исходники функций:

        //Объявляем переменные
        private SessionInfo sessionInfo;
        private ApiManager manager;
        private bool isLoggedIn = false;
        private List<Friend> friendList;
        private FriendsFactory friendFactory;
        private Regex userIdCheck;

        public Form1()
        {
            InitializeComponent();
        }

        //Авторизация
        private void Reauth()
        {
            if (!this.isLoggedIn)
            {
                SessionManager sm = new SessionManager(1928531, Convert.ToInt32(ApiPerms.Audio | ApiPerms.ExtendedMessages | ApiPerms.ExtendedWall | ApiPerms.Friends | ApiPerms.Offers | ApiPerms.Photos | ApiPerms.Questions | ApiPerms.SendNotify | ApiPerms.SidebarLink | ApiPerms.UserNotes | ApiPerms.UserStatus | ApiPerms.Video | ApiPerms.WallPublisher | ApiPerms.Wiki));
                this.sessionInfo = sm.GetSession(SessionAuthType.WithBrowser);
                if (this.sessionInfo != null)
                {
                    this.isLoggedIn = true;
                }
            }

            if (this.isLoggedIn)
            {
                manager = new ApiManager(this.sessionInfo);
                manager.Timeout = 10000;
                this.listBox1.Enabled = true;
                this.friendFactory = new FriendsFactory(this.manager);
                this.userIdCheck = new Regex("([\\d])+$");
                this.GetFriendList();
            }
        }

        //Загрузка списка друзей и запись данных в виджет listBox
        private void GetFriendList()
        {
            try
            {
                this.listBox1.Items.Clear();
                this.friendList = this.friendFactory.Get(FriendNameCase.Nominative, null, null, null, new string[] { "uid", "first_name", "nickname", "last_name" });
                for (int i = 0; i < this.friendList.Count; i++)
                {
                    this.listBox1.Items.Add(this.friendList[i]);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error loading friend list:\n" + e.Message);
            }
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            //Вызов функций
            this.Reauth();
            this.GetFriendList();
        }

суббота, 23 июня 2012 г.

C# Twitter Бот Api

Готов представить приложение, которое работает с твитером и использует api. Взял готовую библиотеку Twitterizer для работы.
Данный бот использует контакт (vk.com) и будет требовать авторизацию, которая осуществляется также через api.
Бот умеет автоматически отправлять твиты. Берёт их из аккаунтов контакта. То есть тырит чьи то статусы =)

Для работы программы нужно получить ключи от api твитера, а именно зарегистрировать приложение. Как это сделать, описано тут.

Твиты будут приходить на тот аккаунт, на который зарегистрировали приложение.
Но надо заметить, что у твитера есть лимит 150 твитов в день.
Тут программа:   
twitBot.rar 189 KB

Тут исходники:
TwitBotSource.rar 566 KB

Юзайте...

Регистрация приложения на twitter

Если вы решили программным путём делать какие либо операции со своим акаунтом на twitter, то будет правильным решением использование api, которое предоставляется разработчиками твитера.

Как и в других крупных социальных сетях, чтобы работать с апи, надо своё приложение зарегистрировать.
Вот подробная инструкция:
  1. Для начала нужно убедиться, что ваш аккаунт подтверждён по email. Иначе нас вообще не пустят близко к регистрации приложения.
  2. Заходим на сайт https://dev.twitter.com, где делаем логин.
  3. Находим ссылку Create an app, или вот https://dev.twitter.com/apps/new
    Переходим по ней и заполняем данные.
  4. После этого нас должно перебросить на страницу управления приложением. Выглядеть должна примерно так:
  5. Переходим на вкладку setting, где устанавливаем значение Application Type
    на Read, Write and Access direct messages

    Не забывайте сохранять изменения.
  6. После этого возвращаемся на вкладку Details.

    Увидим поля, которые нам пригодятся в дальнейшей работе. Это ключи Consumer key и Consumer secret.





    Данные ключи скопируйте куда нибудь в текстовый файл.
  7.  Следом нажимаем на этой же странице кнопку Create my access token


    После этого мы можем увидеть наш токен, который используется для авторизации приложения, также как и Consumer key.

    Ключи Access token и Access token secret сохраните в тот же текстовый файл, где и остальные ключи.
На этом регистрация окончена. Как работать с Api, можно прочесть в документации твитера, некоторые примеры будут опубликованы в следующих статьях. Твитер, в отличии от других соц сетей предоставляет уже готовые библиотеки для работы, чего пока что не наблюдается у контакта и одноклассников. Поэтому в качестве вывода можно сказать, что с twitter работать намного удобнее =)

понедельник, 18 июня 2012 г.

C# работа с VK через API

Для создания приложения, которое при работе контактирует с контактом надо заметить, что есть множество вариантов. Можно импортировать готовую библиотеку vkAPI, или написать свой фрагмент кода, который осуществляет взаимодействие с сайтом vk.com. Написание своего будет разумны, если вы не доверяете создателю библиотеки и предполагаете, что она может иметь среди функций что то вредоносное. Также это можно делать уменьшения размера программы, но разница там в несколько килобайт...

Сразу скажу, что через http пытаться авторизовать в контакте бессмысленно и сложно. Это может подойти только для чекеров фэйков и подбора паролей. Но этим заниматься не советую.

Рассмотрим сначала способ без использования библиотек, чтобы понять суть и технологию работы. Делается это при помощи создания окна браузера, где проходит авторизация или проверка на авторизованность аккаунта. Следом сделаем запрос на получение нужных нам данных.

Выглядит это так:


        private Form main_form;
        private string access_token = null;
        private string user_id = null;

        const int AppID = 1;
        const string vkMethodURL = "https://api.vkontakte.ru/method/";

        public string AccessToken
        {
            get { return this.access_token; }
        }
        public string UserID
        {
            get { return this.user_id; }
        }

        public vkAPI(Form main_form)
        {
            this.main_form = main_form;
        }

        public bool isAuthorized()
        {
            if (access_token == null || user_id == null) return false;

            //дописать проверку на время действия access_token, чтобы не посылать всегда лишний запрос

            string profiles = vkMethodURL+"getProfiles?uid=1&access_token=" + access_token;

            System.Net.WebRequest reqGET = System.Net.WebRequest.Create(profiles);
            System.Net.WebResponse resp = reqGET.GetResponse();
            System.IO.Stream stream = resp.GetResponseStream();
            System.IO.StreamReader sr = new System.IO.StreamReader(stream);
            string s = sr.ReadToEnd();

            JObject o = JObject.Parse(s);
            JObject error = (JObject)o["error"];

            if (error == null) return true;
            else return false;
        }

        public bool Authorize()
        {
            if (isAuthorized()) return true;

            AuthForm authform = new AuthForm();
            WebBrowser browser = (WebBrowser)authform.Controls["webBrowser"];
            browser.Navigated += new WebBrowserNavigatedEventHandler(Authorize_proceed);
            browser.Navigate("http://api.vkontakte.ru/oauth/authorize?client_id="+AppID.ToString()+
                "&scope=photos&redirect_uri="+
                "http://api.vkontakte.ru/blank.html&display=popup&response_type=token&hash=0");
            authform.ShowDialog();

            if (access_token == null || user_id == null)
            {
                MessageBox.Show("Авторизация не пройдена!\r\nДля работы программы вы должны авторизироваться!\r\nЗапрос авторизации появится автоматически.","Внимание!",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                return false;
            }
            else return true;
        }

        private void Authorize_proceed(object sender, WebBrowserNavigatedEventArgs e)
        {
            string[] parts = e.Url.AbsoluteUri.Split('#');
            WebBrowser browser = (WebBrowser)sender;
            AuthForm authform = (AuthForm)browser.Parent;

            if (parts[0] == "http://api.vkontakte.ru/blank.html")
            {
                if (parts[1].Substring(0, 5) == "error") authform.Close();

                else if (parts[1].Substring(0, 12) == "access_token")
                {
                    //MessageBox.Show("Complete!");
                    parts = parts[1].Split('&');

                    access_token = parts[0].Split('=')[1];
                    user_id = parts[2].Split('=')[1];
                    authform.Close();
                }
            }
            else
            {
                parts = e.Url.AbsoluteUri.Split('?');
                if (parts[0] == "http://api.vkontakte.ru/oauth/grant_access")
                    browser.Navigate("http://api.vkontakte.ru/oauth/authorize?client_id=" + AppID.ToString() + "&scope=photos&redirect_uri=http://api.vkontakte.ru/blank.html&display=popup&response_type=token&hash=0");
            }
        }

        //Тестовая функция API
        public string[] GetMyProfile()
        {
            Authorize();

            string profiles = vkMethodURL + "getProfiles?uid=" + user_id + "&fields=photo_medium_rec,sex,bdate,online&access_token=" + access_token;

            System.Net.WebRequest reqGET = System.Net.WebRequest.Create(profiles);
            System.Net.WebResponse resp = reqGET.GetResponse();
            System.IO.Stream stream = resp.GetResponseStream();
            System.IO.StreamReader sr = new System.IO.StreamReader(stream);
            string s = sr.ReadToEnd();
            //MessageBox.Show(s);
            JObject o = JObject.Parse(s);
            JArray response = (JArray)o["response"];

            string[] profile = new string[6];
            profile[0] = (string)response[0]["first_name"];
            profile[1] = (string)response[0]["last_name"];
            //profile[2] = (string)response[0]["sex"];
            if ((int)response[0]["sex"] == 1) profile[2] = "Женский";
            else profile[2] = "Мужской";
            profile[3] = (string)response[0]["photo_medium_rec"];
            profile[4] = (string)response[0]["bdate"];
            if ((int)response[0]["online"] == 1) profile[5] = "онлайн";
            else profile[5] = "не онлайн";

            return profile;
        }


Эти функции можно перенести в отдельный класс и дать ему название vkAPI.
После этого к нашему классу можно обращаться и извлекать полученные данные.
Покажу пример на своей форме:


    public partial class MainForm : Form
    {
         //Объявляем наличие класса
        vkAPI api;

        public MainForm()
        {
            InitializeComponent();
            //Создаём экземпляр класса
            api = new vkAPI(this);
            api.Authorize();
        }

        private void GetProfile_Click(object sender, EventArgs e)
        {
            string[] prof=api.GetMyProfile();
            //MessageBox.Show(prof[2]);
            pictureBox1.ImageLocation = prof[3];
            label1.Text = prof[0];
            label2.Text = prof[1];
            label3.Text = prof[2];
            label4.Text = prof[4];
            label5.Text = prof[5];
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string[] prof = api.GetHisProfile(textBox1.Text);
            //MessageBox.Show(prof[3]);
            pictureBox1.ImageLocation = prof[3];
            label1.Text = prof[0];
            label2.Text = prof[1];
            label3.Text = prof[2];
            label4.Text = prof[4];
            label5.Text = prof[5];
        }
        
    }

Сама форма в моём случае выглядела так:


Вот исходник этого проекта C#.
vk.rar 454 KB

Далее рассмотрим уже другой пример, с использованием библиотеки vk api core, которую можно скачать тут.

ApiCore.dll 63.0 KB
Для данной работы я выбрал уже готовый исходник, который нашёл когда-то давно в интернете.

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

Вот функция, которая делает авторизацию. Она использует при работе библиотеку apicore.dll. Импорт делать обязательно.


        private void Connect()
        {
            if (!this.isLoggedIn)
            {
                SessionManager sm = new SessionManager(2834598, Convert.ToInt32(ApiPerms.ExtendedWall));
                this.sessionInfo = sm.GetSession();
                if (this.sessionInfo != null)
                {
                    this.isLoggedIn = true;
                    manager = new ApiManager(this.sessionInfo);
                    manager.Timeout = 10000;
                    wallFactory = new WallFactory(manager);
                    panel1.Visible = true;
                }
            }



        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Connect();

            }
            catch
            {
                MessageBox.Show("Internal error");
            }
        }



Далее пример функции, которая отправляет сообщение на стену:


        private void PostWall()
        {
            try
            {
                if (this.sessionInfo != null)
                {
                    idUser = textBox1.Text;
                    messtext = textBox2.Text;

                    idnum = Convert.ToInt32(idUser);
                    wallFactory.Post(idnum, messtext);
                }
            }
            catch (ApiRequestErrorException ex)
            {
                MessageBox.Show(ex.Code.ToString() + "\n" + ex.Description);
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            PostWall();
        }

Обязательно надо объявить в самом начала переменные, которые используются в программе. Если это вызывает трудности, то вот фрагмент кода, где они все есть:

        private SessionInfo sessionInfo;
        private ApiManager manager;

        private bool isLoggedIn = false;
        private string idUser;
        private int idnum;
        private string messtext;

        public bool onstat;
        private WallFactory wallFactory;

Вставить их надо перед этим:

        public Form1()
        {
            InitializeComponent();  
            
        }

Таким образом выглядит форма у меня:


Вот исходник данного проекта:

vkwall.rar 64.3 KB

Точно также можно использовать любые функции библиотеки apicore.
Их список и описание можно посмотреть в обозревателе объектов.

TROCKII БЛОГ Copyright © 2012 | Template created by Lev Trockii |