Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286

Парсинг фотографий со страниц Vk

15.08.2014, 22:46. Показов 2740. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пример :
https://vk.com/dimasik928122?z... 39_0%2Frev
https://vk.com/dimasik928122?z... 39_0%2Frev

нужно получить то, что находиться после "z=" и до "%"
но дело, в том, что после photo(может быть или не быть "-") вариативность , такая!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.08.2014, 22:46
Ответы с готовыми решениями:

Парсинг страниц
У меня небольшая проблема. Вот суть моей идеи. Есть страница с торрент-трекера, чтобы каждый раз не залазить на сайт, я хотел бы сделать...

Парсинг страниц
Здравствуйте, имеются страницы такого вида...

Парсинг Html страниц
У меня такой вопрос. Нужно прпасит исходный html кодстраницы и вытащить текст например между тегами <title></title>

13
Заблокирован
15.08.2014, 22:54
нужно получить то, что находиться после "z=" и до "%"
IndexOf + Substring

но дело, в том, что после photo(может быть или не быть "-")
Проверить, нет ли после "photo" минуса, если есть - убрать

вариативность , такая!
http://lurkmore.to/%D0%9A%D0%B... 0%B8%D1%8F
Как-то так
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
15.08.2014, 22:56  [ТС]
Водяной Змей, извините, я начинающий кодер! я не понимаю многое, мне бы пример!
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
16.08.2014, 00:00
Лучший ответ Сообщение было отмечено dimasik9281 как решение

Решение

dimasik9281,
Два варианта на выбор
C#
1
2
3
4
5
6
7
8
9
10
11
public string ParseStringIndexofSubstr(string s)
        {
            int startIndex = s.IndexOf("photo") + 5;
            int length = s.IndexOf("%2", startIndex) - startIndex;
            return s.Substring(startIndex, length).Trim('-');
        }
 
        public string ParseStringRegex(string s)
        {
            return Regex.Match(s, @"photo-?(.*?)%2").Groups[1].Value;
        }
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
16.08.2014, 00:05  [ТС]
XRoy, как всегда на высоте, спасибо!
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
16.08.2014, 00:10
dimasik9281,
Ступил с indexof применив там строку, так в сотни раз быстрее
C#
1
2
3
4
5
6
        public string ParseStringIndexofSubstr(string s)
        {
            int startIndex = s.IndexOf('=') + 6;
            int length = s.IndexOf('%', startIndex) - startIndex;
            return s.Substring(startIndex, length).Trim('-');
        }
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
16.08.2014, 11:31
dimasik9281, если делать через апи вк, можно из ответов в json получать все данные, если нужны примеры могу скинуть.

Добавлено через 33 секунды
Класс для работы с 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
  // Стена 
    public class Photo
    {
        public int id { get; set; }
        public int album_id { get; set; }
        public int owner_id { get; set; }
        public int user_id { get; set; }
        public string photo_75 { get; set; }
        public string photo_130 { get; set; }
        public string photo_604 { get; set; }
        public int width { get; set; }
        public int height { get; set; }
        public string text { get; set; }
        public int date { get; set; }
        public int post_id { get; set; }
        public string access_key { get; set; }
        public string photo_807 { get; set; }
        public string photo_1280 { get; set; }
    }
 
    public class Video
    {
        public int id { get; set; }
        public int owner_id { get; set; }
        public string title { get; set; }
        public int duration { get; set; }
        public string description { get; set; }
        public int date { get; set; }
        public int views { get; set; }
        public int comments { get; set; }
        public string photo_130 { get; set; }
        public string photo_320 { get; set; }
        public string access_key { get; set; }
    }
    public class Page
    {
        public int id { get; set; }
        public int group_id { get; set; }
        public string title { get; set; }
        public int who_can_view { get; set; }
        public int who_can_edit { get; set; }
        public int edited { get; set; }
        public int created { get; set; }
        public int views { get; set; }
        public string view_url { get; set; }
    }
    public class Audio
    {
        public int id { get; set; }
        public int owner_id { get; set; }
        public string artist { get; set; }
        public string title { get; set; }
        public int duration { get; set; }
        public string url { get; set; }
        public int lyrics_id { get; set; }
        public int genre_id { get; set; }
    }
 
    public class Answer
    {
        public int id { get; set; }
        public string text { get; set; }
        public int votes { get; set; }
        public double rate { get; set; }
    }
    public class Doc
    {
        public int id { get; set; }
        public int owner_id { get; set; }
        public string title { get; set; }
        public int size { get; set; }
        public string ext { get; set; }
        public string url { get; set; }
        public string photo_100 { get; set; }
        public string photo_130 { get; set; }
        public string access_key { get; set; }
    }
    public class Note
    {
        public int id { get; set; }
        public int owner_id { get; set; }
        public int comments { get; set; }
        public int read_comments { get; set; }
        public int date { get; set; }
        public string title { get; set; }
        public string view_url { get; set; }
    }
 
    public class Thumb
    {
        public int id { get; set; }
        public int album_id { get; set; }
        public int owner_id { get; set; }
        public string photo_75 { get; set; }
        public string photo_130 { get; set; }
        public string photo_604 { get; set; }
        public string photo_807 { get; set; }
        public string photo_1280 { get; set; }
        public int width { get; set; }
        public int height { get; set; }
        public string text { get; set; }
        public int date { get; set; }
        public string access_key { get; set; }
    }
 
    public class Album
    {
        public string id { get; set; }
        public Thumb thumb { get; set; }
        public int owner_id { get; set; }
        public string title { get; set; }
        public string description { get; set; }
        public int created { get; set; }
        public int updated { get; set; }
        public int size { get; set; }
    }
 
    public class Poll
    {
        public int id { get; set; }
        public int owner_id { get; set; }
        public int created { get; set; }
        public string question { get; set; }
        public int votes { get; set; }
        public int answer_id { get; set; }
        public List<Answer> answers { get; set; }
        public int anonymous { get; set; }
    }
 
    public class Attachment
    {
        public string type { get; set; }
        public Photo photo { get; set; }
        public Video video { get; set; }
        public Audio audio { get; set; }
        public Doc doc { get; set; }
        public Album album { get; set; }
        public Note note { get; set; }
        public Poll poll { get; set; }
        public Page page { get; set; }
    }
 
    public class Place
    {
        public int id { get; set; }
        public string title { get; set; }
        public double latitude { get; set; }
        public double longitude { get; set; }
        public int created { get; set; }
        public string icon { get; set; }
        public string country { get; set; }
        public string city { get; set; }
    }
 
    public class Geo
    {
        public string type { get; set; }
        public string coordinates { get; set; }
        public Place place { get; set; }
        public int showmap { get; set; }
    }
 
    public class Comments
    {
        public int count { get; set; }
    }
 
    public class Likes
    {
        public int count { get; set; }
    }
 
    public class Reposts
    {
        public int count { get; set; }
    }
 
    public class Item
    {
        public int id { get; set; }
        public int from_id { get; set; }
        public int owner_id { get; set; }
        public int date { get; set; }
        public string post_type { get; set; }
        public string text { get; set; }
        public List<Attachment> attachments { get; set; }
        public Geo geo { get; set; }
        public Comments comments { get; set; }
        public Likes likes { get; set; }
        public Reposts reposts { get; set; }
    }
 
    public class Response
    {
        public int count { get; set; }
        public List<Item> items { get; set; }
    }
 
    public class RootObject
    {
        public Response response { get; set; }
    }
}
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
16.08.2014, 11:32  [ТС]
Scrypto, скажи,какую библиотеку ты используешь для запросов*
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
16.08.2014, 11:36
Функции парсинга и отправки сообщений на стену
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  // создает массива байтов, чтобы потом вставить его в пост через перекодировку
              
                      byte[] commbytes = Encoding.Default.GetBytes(WallParser.response.items[next].text);
          
 
                // Если что - то прикреплено
                if (WallParser.response.items[next].attachments != null)
                {
                    // Проверяем типы прикриплений, и в соответствии с ними созадем строку отправления
 
                    for (int att_count = 0; att_count < WallParser.response.items[next].attachments.Count; att_count++)
                    {
                        if (WallParser.response.items[next].attachments[att_count].type == "photo")
                        {
                            LogMe("В посте обнаружено фото. Добавляю\r\n");
                            att_data += "photo" + WallParser.response.items[next].attachments[att_count].photo.owner_id + "_" + WallParser.response.items[next].attachments[att_count].photo.id;
                            if (att_count != WallParser.response.items[next].attachments.Count - 1)
                            {
                                att_data = AddComm(att_data);
                            }
                        }
                        else if (WallParser.response.items[next].attachments[att_count].type == "video")
                        {
                            LogMe("В посте обнаружено видео. Добавляю\r\n");
                            att_data += "video" + WallParser.response.items[next].attachments[att_count].video.owner_id + "_" + WallParser.response.items[next].attachments[att_count].video.id;
                            if (att_count != WallParser.response.items[next].attachments.Count - 1)
                            {
                                att_data = AddComm(att_data);
                            }
                        }
                        else if (WallParser.response.items[next].attachments[att_count].type == "audio")
                        {
                            LogMe("В посте обнаружена музыка. Добавляю\r\n");
                            att_data += "audio" + WallParser.response.items[next].attachments[att_count].audio.owner_id + "_" + WallParser.response.items[next].attachments[att_count].audio.id;
                            if (att_count != WallParser.response.items[next].attachments.Count - 1)
                            {
                                att_data = AddComm(att_data);
                            }
                        }
                        else if (WallParser.response.items[next].attachments[att_count].type == "doc")
                        {
                            LogMe("В посте обнаружен документ. Добавляю\r\n");
                            att_data += "doc" + WallParser.response.items[next].attachments[att_count].doc.owner_id + "_" + WallParser.response.items[next].attachments[att_count].doc.id;
                            if (att_count != WallParser.response.items[next].attachments.Count - 1)
                            {
                                att_data = AddComm(att_data);
                            }
                        }
                        else if (WallParser.response.items[next].attachments[att_count].type == "page")
                        {
                            LogMe("В посте обнаружена wiki. Добавляю\r\n");
                            att_data += "page" + WallParser.response.items[next].attachments[att_count].page.group_id + "_" + WallParser.response.items[next].attachments[att_count].page.id;
                            if (att_count != WallParser.response.items[next].attachments.Count - 1)
                            {
                                att_data = AddComm(att_data);
                            }
 
                        }
                        else if (WallParser.response.items[next].attachments[att_count].type == "note")
                        {
                            LogMe("В посте обнаружена заметка. Добавляю\r\n");
                            att_data += "note" + WallParser.response.items[next].attachments[att_count].note.owner_id + "_" + WallParser.response.items[next].attachments[att_count].note.id;
                            if (att_count != WallParser.response.items[next].attachments.Count - 1)
                            {
                                att_data = AddComm(att_data);
                            }
                        }
                        else if (WallParser.response.items[next].attachments[att_count].type == "poll")
                        {
                            LogMe("В посте обнаружено голосоване. Добавляю\r\n");
                            att_data += "poll" + WallParser.response.items[next].attachments[att_count].poll.owner_id + "_" + WallParser.response.items[next].attachments[att_count].poll.id;
                            if (att_count != WallParser.response.items[next].attachments.Count - 1)
                            {
                                att_data = AddComm(att_data);
                            }
                        }
                        else if (WallParser.response.items[next].attachments[att_count].type == "album")
                        {
                            LogMe("В посте обнаружен альбом. Добавляю\r\n");
                            att_data += "album" + WallParser.response.items[next].attachments[att_count].album.owner_id + "_" + WallParser.response.items[next].attachments[att_count].album.id;
                            if (att_count != WallParser.response.items[next].attachments.Count - 1)
                            {
                                att_data = AddComm(att_data);
                            }
                        }
 
                    }
                    LogMe("Прикреплено " + att_data + "\r\n");
                    if (checkBox3.Checked)
                    {
                        LogMe("Посылаю пост на отправку в функцию VKSenWallPost с датой отправки автором\r\n");
                        Comment_ID = VkSenWallPost(post_group_id, "От ID: " + WallParser.response.items[next].from_id + " Дата отправки " + ConvertFromUnixTimestamp(WallParser.response.items[next].date) + " \r\n" + Encoding.UTF8.GetString(commbytes), att_data, Token_v);
                    }
                    else
                    {
                        LogMe("Посылаю пост на отправку в функцию VKSenWallPost без даты отправки автором\r\n");
                        Comment_ID = VkSenWallPost(post_group_id, /*"От ID: "+WallParser.response.items[next].from_id + " Дата отправки " +ConvertFromUnixTimestamp(WallParser.response.items[next].date)+" \r\n" +*/Encoding.UTF8.GetString(commbytes), att_data, Token_v);
                    }
                }
                else
                {
                    if (checkBox3.Checked)
                    {
                        LogMe("Посылаю пост на отправку в функцию VKSenWallPost с датой отправки автором\r\n");
                        Comment_ID = VkSenWallPost(post_group_id, "От ID: " + WallParser.response.items[next].from_id + " Дата отправки " + ConvertFromUnixTimestamp(WallParser.response.items[next].date) + " \r\n" + Encoding.UTF8.GetString(commbytes), att_data, Token_v);
                    }
                    else
                    {
                        LogMe("Посылаю пост на отправку в функцию VKSenWallPost без даты отправки автором\r\n");
                        Comment_ID = VkSenWallPost(post_group_id, /*"От ID: "+WallParser.response.items[next].from_id + " Дата отправки " +ConvertFromUnixTimestamp(WallParser.response.items[next].date)+" \r\n" +*/Encoding.UTF8.GetString(commbytes), att_data, Token_v);
                    }
                    LogMe("Пост без прикреплений\r\n");
                }
 
                Thread.Sleep(350);
Добавлено через 45 секунд
dimasik9281, dimasik9281, using System.Runtime.Serialization.Json;

Добавлено через 1 минуту
dimasik9281, и если использовать токен от официального приложение от IPAD то можно, отправлять не три запроса в секунду, а 5ть
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
16.08.2014, 11:37  [ТС]
Scrypto, подскажи библиотеку на подобие XnET
0
 Аватар для Scrypto
132 / 111 / 48
Регистрация: 08.02.2013
Сообщений: 621
16.08.2014, 11:38
dimasik9281, если инетерсно, вот видео проги
Кликните здесь для просмотра всего текста
0
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 286
16.08.2014, 11:40  [ТС]
Scrypto, ггугли Vkspam_Pro
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
16.08.2014, 13:40
Scrypto,
Кучу однотипного кода можно вынести в функцию, вместо кучи if используйте словарь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2014, 13:40
Помогаю со студенческими работами здесь

Парсинг HTML страниц
Привет, посоветуйте хорошие ресурсы/гайды/книги для изучения парсинга HTML страниц на c#. А то нигде не могу хорошо структурированной инфы...

Парсинг большого количества страниц
Доброго времени суток, товарищи! Прошу у Вас помощи, самому боюсь не справиться - знаний маловато. Пишу парсер списка ссылок, и...

Парсинг страниц в параллельных потоках
знаю что скорее всего никто не поможет, но всё же) есть метод который с каждой страницы сайта считывает определённое слово, и таких страниц...

Парсинг страниц, исправить код
Привет всем, Подскажите в чем ошибка почему не удается получить данные protected void Button1_Click(object sender, EventArgs e) ...

Парсинг сайта (нескольких страниц)
Подскажите пожалуйста, как сделать парсинг веб сайта ? к примеру возьмем cyberforum. Как мне в программе по разделу C# для начинающих,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru