Форум программистов, компьютерный форум, киберфорум
C#: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52

Parser VK Api

09.02.2015, 21:28. Показов 7807. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private string GetFriends()
        {
            string SourcePage;
            try
            {
                using (var request = new HttpRequest())
                {
                    SourcePage = request.Get("https://api.vk.com/method/friends.get?user_id=135215546").ToString();
                    
                }
            }
            catch { }
            return SourcePage;
            
        }
Вообщем конечная цель - сравнение друзей вк, по двум страничкам, на данный момент не могу даже спарсить друзей с одной странички, делал по примеру, выдает ошибку "Использование локальной переменной SourcePage, которой не присвоено значение".
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2015, 21:28
Ответы с готовыми решениями:

Parser
Всем привет. Ребят подскажите пожалуйста. Вообщем хочу написать программу,которая будет определять ip адрес по стране. Например...

parser ip
Вообщем нужно спарсить ипы cs1.6 серваков, вроде получилось, но только 1, а как сделать последущие ипы, котороые встречаются в html коде...

XML Parser
Разбираюсь с open source проектом http://conv-net.sourceforge.net/doc/index.html свёрточная нейронная сеть вот, в котором в свою очередь...

23
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
10.02.2015, 22:36
cyber1337, Ну сообщение об ошибке все понятно сообщило
C#
1
string SourcePage = "";
1
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
11.02.2015, 19:05  [ТС]
Вот что стало выдавать, "xNet.Net.HttpResponse", а нужно с вк текст
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
11.02.2015, 21:23
Все работает, ответ приходит.
C#
1
2
3
4
5
6
7
8
9
        private string GetFriends()
        {
            string response = string.Empty;
            using (HttpRequest request = new HttpRequest())
            {
                response = request.Get("https://api.vk.com/method/friends.get?user_id=135215546").ToString();
            }
            return response;
        }
1
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
12.02.2015, 07:48  [ТС]
Спасибо, не работало из за использование старой библиотеке xnet, новую скомпилировал, все работает на ура. Вот код я добавил, теперь вопрос, мне нужно чтоб парсилось все, а не только одна строчка. Объясню, парсится не весь текст по моей выборке, а только одна строчка, мне нужно чтоб весь текст без лишнего текста.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 public string GetFriends2()
        {
            string SourcePage = "";
            string friends = "";
            try
            {
                using (var request = new HttpRequest())
                {
                    SourcePage = request.Get("http://api.vk.com/method/friends.get.xml?user_id=" + textBox3.Text + "").ToString();
                    friends = Convert.ToString(SourcePage.Substrings("<uid>", "</uid>", 0)[0]);
                }
            }
            catch { }
            return friends;
        }
        public string GetFriends1()
        {
            string SourcePage = "";
            string friends = "";
 
            try
            {
                using (var request = new HttpRequest())
                {
                    SourcePage = request.Get("http://api.vk.com/method/friends.get.xml?user_id="+ textBox2.Text +"").ToString();
                    friends = Convert.ToString(SourcePage.Substrings("<uid>", "</uid>", 0)[0]);
                    
                }
            }
            catch { }
            return friends;
        }
             
        public Form1()
        {
            InitializeComponent();
        }
 
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
 
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string s = Convert.ToString(GetFriends1());
            textBox1.Text = s;
            string d = Convert.ToString(GetFriends2());
            textBox4.Text = d;
        }
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
12.02.2015, 23:08
Лучший ответ Сообщение было отмечено cyber1337 как решение

Решение

Цитата Сообщение от cyber1337 Посмотреть сообщение
парсится только одна строчка
Потому что вы так написали
C#
1
friends = Convert.ToString(SourcePage.Substrings("<uid>", "</uid>", 0)[0]);
Раз уж вы решили получать ответ в xml, то может лучше воспользоваться готовыми инструментами для работы с xml? XDocument или XmlDocument.
C#
1
2
3
4
5
public static string[] GetFriends(string id)
{
    XDocument doc = XDocument.Load("http://api.vk.com/method/friends.get.xml?user_id=" + id);
    return doc.Root.Elements("uid").Select(e => e.Value).ToArray();
}
1
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
13.02.2015, 07:49  [ТС]
Цитата Сообщение от Lexeq Посмотреть сообщение
Раз уж вы решили получать ответ в xml, то может лучше воспользоваться готовыми инструментами для работы с xml? XDocument или XmlDocument.
Спасибо, вы помогли, не знал про эти интструменты
0
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
16.02.2015, 18:58  [ТС]
Цитата Сообщение от Lexeq Посмотреть сообщение
C#
1
2
3
4
5
public static string[] GetFriends(string id)
{
    XDocument doc = XDocument.Load("http://api.vk.com/method/friends.get.xml?user_id=" + id);
    return doc.Root.Elements("uid").Select(e => e.Value).ToArray();
}
А как теперь сделать вывод в textbox2 к примеру?

Добавлено через 14 минут
Все справился с выводом в текст бокс
C#
1
2
3
4
5
6
        {
                    XDocument doc = XDocument.Load("http://api.vk.com/method/friends.get.xml?user_id=135215546");
                    doc.Root.Elements("uid").Select(e => e.Value).ToArray();
                    return doc.Root.ToString();
                  
        }
Но выводит все равно с <uid>21298249</uid> , мне нужно без <uid> и </uid> где можно почитать как это сделать, дайте ссылку, очень нужно
0
Заблокирован
16.02.2015, 19:05
Цитата Сообщение от cyber1337 Посмотреть сообщение
Все справился с выводом в текст бокс
cyber1337, не справились. Вы не то сделали. Совсем.

Функция вернет вам массив, со списком ID, чтобы отобразить их в textBox, нужно массив "сцепить", например так:
C#
1
textBox1.Text = string.Join(" ", GetFriends("135215546"));
Но я бы выбрал другой элемент для отображения, например, ListBox.
0
4 / 4 / 0
Регистрация: 07.08.2015
Сообщений: 40
16.03.2016, 19:47
Подскажите, что за проблема?
Состряпал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public string WallGet(string At, string domain)
        {
            string reqStr = string.Format(
  "https://api.vk.com/method/wall.get?access_token={0}&domain={1}&version=5.50", At, domain);
            WebClient webClient = new WebClient();
            var webRequest = HttpWebRequest.Create(reqStr);
            var webResponse = webRequest.GetResponse();
            var stream = webResponse.GetResponseStream();
            var document = XDocument.Load(stream);
            var posts = document.Root.Elements("id").ToArray();
            return webClient.DownloadString(reqStr);
        }
Но на строке
C#
1
var document = XDocument.Load(stream);
мне выдает:
C#
1
2
Exception thrown: 'System.Xml.XmlException' in System.Xml.dll
Additional information: Недопустимые данные на корневом уровне., строка 1, позиция 1.
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
16.03.2016, 20:32
По умолчанию ответ приходит не в xml, а в json
Для того, чтобы получить ответ в формате XML, необходимо добавить расширение формата после названия метода, METHOD_NAME.xml
0
4 / 4 / 0
Регистрация: 07.08.2015
Сообщений: 40
16.03.2016, 20:34
а где взять имя вместо METHOD_NAME.xml и как прописать?
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
16.03.2016, 20:41
Цитата Сообщение от protossrethnatr Посмотреть сообщение
METHOD_NAME
Это имя метода, к которому вы обращаетесь, в данном случае заменить wall.get на wall.get.xml
1
3 / 3 / 4
Регистрация: 16.09.2013
Сообщений: 350
16.03.2016, 22:52
Лучше используй JSON
0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
16.03.2016, 23:39
Парсить удобно с помощью LINQ

JSON:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
 
/*
{"response":{"count":6,"items":
[{"id":3484,"first_name":"Наталия","last_name":"Илларионова","city":
{"id":198,"title":"Wien"},"hidden":1},
{"id":382170,"first_name":"Даша","last_name":"Рузанова","city":
{"id":2,"title":"Санкт-Петербург"}},
{"id":2314852,"first_name":"Ирина","last_name":"Денежкина","city":{"id":2,"title":"Санкт-Петербург"},"hidden":1},
{"id":22152575,"first_name":"Лена","last_name":"Чистанова","city":
{"id":2,"title":"Санкт-Петербург"}},
{"id":146734318,"first_name":"Дмитрий","last_name":"Ванюков"},
{"id":211549005,"first_name":"Наташа","last_name":"Мейнгард","city":
{"id":198,"title":"Wien"}}]}}Наталия Илларионова
*/
 
namespace GetListOfFriendsJSON
{
    class User
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            textBoxOutput.ScrollBars = ScrollBars.Both;
            textBoxOutput.WordWrap = false;
        }
 
        private async void buttonGetListOfFriends_Click(object sender, EventArgs e)
        {
            buttonGetListOfFriends.Enabled = false;
            await GetListOfFriends();
            buttonGetListOfFriends.Enabled = true;
        }
 
        private async Task GetListOfFriends()
        {
            using (var w = new WebClient())
            {
                w.Encoding = Encoding.UTF8;
                string resp = await w.DownloadStringTaskAsync("https://api.vk.com/method/friends.get?fields=city&user_id=185014513&v=5.45");
 
                JObject json = JObject.Parse(resp);
 
                JArray users = (JArray)json["response"]["items"];
 
                // Можно без создания класса User:
                //var query = from user in users
                //            select new
                //            {
                //                FirstName = user["first_name"],
                //                LastName = user["last_name"]
                //            };
 
                var query = from user in users
                            select new User
                            {
                                FirstName = user["first_name"].ToString(),
                                LastName = user["last_name"].ToString()
                            };
 
                foreach (var user in query)
                {
                    textBoxOutput.Text += user.FirstName + " " + user.LastName + Environment.NewLine;
                    textBoxOutput.Text += Environment.NewLine;
                }
            }
        }
    }
}


XML:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
 
/*
<?xml version="1.0" encoding="utf-8"?>
<response list="true">
 <user>
  <id>1</id>
  <first_name>Павел</first_name>
  <last_name>Дуров</last_name>
 </user>
</response>
*/
 
namespace GetXmlFromVk
{
    class User
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            textBoxOutput.ScrollBars = ScrollBars.Both;
            textBoxOutput.WordWrap = false;
        }
 
        private async void buttonGetXmlFromVk_Click(object sender, EventArgs e)
        {
            buttonGetXmlFromVk.Enabled = false;
            await GetXmlFromVk();
            buttonGetXmlFromVk.Enabled = true;
        }
 
        private async Task GetXmlFromVk()
        {
            using (var client = new HttpClient())
            {
                var resp = await client.GetStringAsync("https://api.vk.com/method/users.get.xml?user_id=1&v=5.45");
 
                XDocument xmlDoc = XDocument.Parse(resp);
 
                var query = from user in xmlDoc.Descendants("user")
                            select new User
                            {
                                Id = (int)user.Element("id"),
                                FirstName = user.Element("first_name").Value.ToString(),
                                LastName = user.Element("last_name").Value.ToString()
                            };
 
                foreach (var user in query)
                {
                    textBoxOutput.Text += user.FirstName + " " + user.LastName;
                }
            }
        }
    }
}
2
4 / 4 / 0
Регистрация: 07.08.2015
Сообщений: 40
18.03.2016, 17:05
Ваш пример с friends.get отработал, но я хочу скачать стену группы в формате JSON таким запросом:
string resp = await w.DownloadStringTaskAsync("https://api.vk.com/method/wall.get?domain="+ Testdomain +"& version=5.50");
Выдает:
An exception of type 'System.ArgumentException' occurred in mscorlib.dll but was not handled in user code
Additional information: Accessed JArray values with invalid key value: "items". Int32 array index expected.


Т.к. данном случае после query начинается так:
C#
1
2
3
4
5
6
7
{{
  "response": [
    8,
    {
      "id": 81,
      "from_id": -25635023,
      "to_id": -25635023,
Т.е. никакого "items" нету, сразу начинаются "["

XML не могу даже протестировать, VK мне бан на 1-2 минуты дают (
0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
18.03.2016, 21:43
Запрос у вас какой. Вот к примеру можете поэтому кликнуть:

1
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
18.03.2016, 22:26
Удобно смотреть на Json в каком-нибудь JsonViewer'е. Например, в этом:
Миниатюры
Parser VK Api  
1
4 / 4 / 0
Регистрация: 07.08.2015
Сообщений: 40
18.03.2016, 22:49
Спасибо!!!! Вот так получилось:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            using (var w = new WebClient())
            {
                w.Encoding = Encoding.UTF8;
                string resp = await w.DownloadStringTaskAsync(" http://api.vk.com/method/wall.get?v=5.50&filter=all&domain=sci&count=5");
 
                JObject json = JObject.Parse(resp);
                JArray users = (JArray)json["response"]["items"];
 
                var query = from user in users
                            select new
                            {
                                id = user["id"],
                                from_id = user["from_id"],
                                date = user["date"],
                                text = user["text"],
                                comments = user["comments"],
                                created_by = user["created_by"],
                            };
                foreach (var user in query)
                {
                    MessageBox.Show(user.id.ToString());
                }
            }
0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
18.03.2016, 23:19
Какие данные вы хотите брать со стены?

Вот пример, я со стены группы беру ссылку на картинку и вывожу в textbox:

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Http;
using Newtonsoft.Json.Linq;
 
namespace GetVkWallPicturesByJson
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            textBoxOutput.ScrollBars = ScrollBars.Both;
            textBoxOutput.WordWrap = false;
        }
 
        private async void buttonGetPictures_Click(object sender, EventArgs e)
        {
            buttonGetPictures.Enabled = false;
            await GetPictures();
            buttonGetPictures.Enabled = true;
        }
 
        private async Task GetPictures()
        {
            using (var client = new HttpClient())
            {
                var resp = await client.GetStringAsync("http://api.vk.com/method/wall.get?v=5.45&filter=all&domain=sci&count=5");
 
                JObject json = JObject.Parse(resp);
                JArray items = (JArray)json["response"]["items"];
                JArray attachments = (JArray)items[0]["attachments"];
                JObject photo = (JObject)attachments[0]["photo"];
                textBoxOutput.Text += photo["photo_604"].ToString();
 
                // Count of items
                //textBoxOutput.Text += "count = " + items.Count.ToString();
            }
        }
    }
}


Добавлено через 4 минуты
protossrethnatr, у меня тема висела открытой в закладках и я не посмотрел перед ответом, что вы уже решили проблему. Хорошо!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2016, 23:19
Помогаю со студенческими работами здесь

[Cocos2d-x] Json parser
Добрый вечер, std::string HelloWorld::loadFileJson(std::string &amp;fName) { std::string result; CCFileUtils *fileUtils =...

Parser, interpreter
Поставил мне преподаватель тему проекта, написать парсер арифметических высказываний в языке ассемблер для процессора Pentium или...

Tomita-parser
Доброго времени суток! Кто-нибудь пользуется tomita-parser - ом? Подскажите, как найти в тексте все модификации одного слова? ...

Html parser
Собственно нужна помощь с парсингом Html страницы, а точнее нужно получить ссылку вида: http://site.com/meetups/*, ссылка конечно же в теге...

Parser PHP
Всем привет, возникла не большая проблема, никак не могу спарсить значение. &lt;div class=&quot;chart__price&quot;&gt; &lt;span...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru