Программирование
Веб программирование

Социальный кодинг на примере Вконтакте

 
 

В этой статье я расскажу - как написать простое приложение-парсер для соц. сети Вконтакте.

Парсить будем информацию о нашем профиле


I)Интерфейс:

Нам понадобится:

1) 2 формы

2) TextBox

3) 1 Кнопка

4) WebBrowser

Делаем примерно такие формы:

Форма 1 (главная):


Форма 2 (форма авторизации):



2)Регистрация приложения Вконтакте:


У Контакта есть такая замечательная штука, как API-функции, но для доступа к ним надо регнуть наше приложение в соцсети. Делается это так:

1) Идем по сслыке: http://vk.com/editapp?act=create&site=1 и заполнем форуму добавления приложения (как на скрине):


2) Жмем "Подключить приложение". Выскочит окошко с просьбой подтвереждения:

Жмем "Получить код". На телефон придет СМС-сообщение с кодом.

Вводим его в поле "Код подтвержедния" и жмем "Отправить":

3) Попадаем на страницу управления приложением.

Можете добавить описание, адрес сайта и т.д., но это необязательно. Из всей предоставленной информации нам нужен только номер приложения:

Все. Теперь приступаем к кодингу.

II)Кодинг

1) В модуле формы 2, в процедуре загрузки формы пишем:

WebBrowser1.Navigate("http://api.vkontakte.ru/oauth/authorize?client_id=3416589&scope=friends&redirect_uri=http://api.vkontakte.ru/blank.html&display=page&response_type=token")

Этой командой мы запрашиваем доступ у юзера к соц. сети.

Пояснение параметров:

client_id = 3416589 - ID нашего приложения

scope=friends  - Права доступа (смотри: Права доступа приложений)

redirect_uri - Куда нас переадресует после авторизации (лучше всегда пиать: api.vkontakte.ru/blank.html)

display = page - Стиль страницы. Еще есть: page, popup, touch и wap

response_type=token - Указывает  на то, что после авторизации мы получим специальный ключ.

Он будет нужен для доступа к API.

2) Объявим глобальную переменную для хранения  ключа. Для этого после Public Class Form2 пишем:

Public Token As String

3) В событии браузера DocumentCompleted пишем:

If e.Url.ToString().IndexOf("access_token") <> -1 Then ' Если в коде страницы есть acces_token, то
Token = GetBetween(e.Url.ToString(), "access_token=", "&expires", 0) ' То записываем его в переменную
End If

4) Подключим функцию GetBetween. Она нужна для парсинга значения между двумя тегами:

Public Function GetBetween(ByRef strSource As String, ByRef strStart As String, ByRef strEnd As String, Optional ByRef startPos As Integer = 0) As String 
Dim iPos As Integer, iEnd As Integer, lenStart As Integer = strStart.Length 
Dim strResult As String strResult = String.Empty 
iPos = strSource.IndexOf(strStart, startPos)
iEnd = strSource.IndexOf(strEnd, iPos + lenStart)
If iPos <> -1 AndAlso iEnd <> -1 Then 
strResult = strSource.Substring(iPos + lenStart, iEnd - (iPos + lenStart)) 
End If 
Return strResult
End Function

Теперь напишем код парсинга ифнормации о профиле.

Для этого будем испольльзовать API функцию getProfiles. Она имеет следующий вид:

https://api.vkontakte.ru/method/getProfiles.xml?access_token=TOKEN

Где ТОКЕН - наш ключ (который мы записали в переменную TOKEN)

 1) В модуле Form1, в событии Load вызовем форму авторизации:

Form2.ShowDialog()

 2) В событии Click кнопки "Начать парсинг" пишем:

Dim x As New Xml.XmlDocument Dim XMLBuffer As String x.Load("https://api.vkontakte.ru/method/getProfiles.xml?access_token=" + Form2.Token) ' Отправляем запрос 
XMLBuffer = x.InnerXml ' Считываем XML ответ
 ' Парсим
TextBox1.Text += "Ваш ID:" + Form2.GetBetween(XMLBuffer, "", "") + vbNewLine
TextBox1.Text += "Ваше имя:" + Form2.GetBetween(XMLBuffer, "<first_name>", "") + vbNewLine TextBox1.Text += "Ваша фамилия:" + Form2.GetBetween(XMLBuffer, "<last_name>", "") + vbNewLine

Все. Теперь запускаем нашу программу.

Если вы все сделали правильно, то в текстбоксе будет примерно такой текст:

Скачать файл [257461 кб]


Есть вопросы? Спроси на нашем форуме!!
XeoN100 [09.02.2013 19:14]

Блин. Исходник забыл: rghost. ru/43670768

NoMercy50 [01.12.2013 15:31]

Можете помочь? Нужно чтобы парсер пропускал первый тег и брал второй тег(точно такой же). Т.е.
245881516 22355628 artist name1 title 250 url 9 245252191 22355628 artist name2 title 234 url 16899 18
мне надо чтобы он взял artist name2,и чтобы тэг был . Ну короче может быть кто нибудь меня понял.

Ekibasik [17.10.2014 12:34]

Здравствуйте.Обновите пожалуйста картинки в статье, а то не отображаются.

serega110 [17.10.2014 18:15]

Это с сайтом что-то, а не со статьей.

Stertor370 [17.10.2014 22:40]

Для того, чтобы отправить/принять данные с сайта, есть масса более изящных решений, чем этот Ваш Webbrowser. Не извращайтесь.



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.