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

Изменить исходник нужно

22.03.2015, 12:56. Показов 1662. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Код ниже работает с vk api. Он парсит друзей по id человека, и таких id можно занести в переменную очень много, когда все спарсенно, происходит вывод по количеству повторений, типо есть 15 людей, и у них id "1234560" повторяется 10 раз. Тоже самое нужно сделать с кодом получение "кто лайкал пост" (код в самом низу)
Код под который подогнать

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
 
namespace cyber1
{
    class Program
    {
        static void Main()
        {
            string[] m = { "135215546", "211344927", "28660855", "78269765", "12834384", "11554373", "21298249", "25458367", "21723200", "57724861", "71953822", "168574060" };
            StringBuilder sb = new StringBuilder();
            HttpWebRequest request;
            foreach (string s in m)
            {
                request = (HttpWebRequest)WebRequest.Create("http://api.vk.com/method/friends.get?user_id=" + s);
                request.Method = "GET";
                sb.Append((new StreamReader(((HttpWebResponse)request.GetResponse()).GetResponseStream())).ReadToEnd());
            }
            sb.Replace(@"{""response"":", "").Replace("[", "").Replace("]}", ",").Replace("\n", "");
            sb.Remove(sb.Length - 1, 1);
            sb.Replace(",", "\n");
            var q = from s in sb.ToString().Split('\n')
                    group s by s into g
                    orderby g.Count()
                    select new { id = g.Key, cnt = g.Count() };
            foreach (var e in q)
            {
                Console.WriteLine(" Id {0} встречается у {1} людей ", e.id, e.cnt);
            }
 
            Console.ReadLine();
        }
    }
}


Кто лайкал пост(спасибо _exp10der_ )

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using Newtonsoft.Json.Linq;
 
namespace jsonnet
{
    class Program
    {
        static void Main(string[] args)
        {
            string str;
            using (HttpClient http = new HttpClient())
            {
                str = http.GetStringAsync("http://vk.cc/3Ad3m8").Result;
            }
 
 
            JObject jObject = JObject.Parse(str);
 
            IList<string> allUid = jObject["response"]["items"].Select(n => n["uid"].ToString()).ToList();
 
            foreach (var uid in allUid)
            {
                Console.WriteLine(uid);
            }
 
            Console.ReadKey(true);
        }
    }
}


Тут по идеи поменять ссылку, значение переменной "mass", и само отсечение лишнего.
Вот я насколько смог объединил код, но не работает все равно
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
namespace jsonnet
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "";
            string[] m = { "4377", "4247", "4248", "4241" };
            using (HttpClient http = new HttpClient())
            foreach (string s in m)
            {
                str = http.GetStringAsync("https://api.vk.com/method/likes.getList?type=post&item_id=4377&filter=likes&frinds_only=0&extended=1&offset=1&count=1000&access_token=aa5d63a10ecf232dd20ae58f807722d5e5a8d553e88fb7a833c8622bfe558ef472191341e75ddbfb8d182&owner_id=1"+ s).Result;
            }
 
 
            JObject jObject = JObject.Parse(str);
 
            IList<string> allUid = jObject["response"]["items"].Select(n => n["uid"].ToString()).ToList();
            var q = from s in allUid.ToString().Split('\n')
                    group s by s into g
                    orderby g.Count()
                    select new { id = g.Key, cnt = g.Count() };
            foreach (var e in q)
            {
                Console.WriteLine(" Id {0} встречается у {1} постов ", e.id, e.cnt);
            }
 
            Console.ReadKey(true);
        }
    }
}
Код который нужно подогнать в этот исходник, чтоб заместо друзей, находило id людей которые ставят больше всего лайков.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2015, 12:56
Ответы с готовыми решениями:

Как изменить цвет Progress Bar - Исходник
Проблема в том, что напрямую через свойства контрола нельзя менять цвет баров и цвет фона у...

исходник на С++ нужно подогнать под чистый Си
Всем доброго времени суток, вот исходник на С++, а мне нужен на чистом Си, помогите разобраться :)...

Нужно исходник формы Form1.cs добавить в проект
Подскажите пож-та: есть исходник формы Form1.cs. Добавляю в проект. После этого проект не...

Нужно ли перекомпилировать исходник при смене данных во входном файле?
Здравствуйте!! У меня такой вопрос. Программа на фортран IV. Данные вводятся из отдельного файла....

12
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
22.03.2015, 13:04 2
А вы правильно ищите то?
likes.getList возвращает кто лайкнул этот объект. На основании этого никак не посчитать кто больше лайкнул, т.к. все лайкнули один раз.
1
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
22.03.2015, 13:10  [ТС] 3
tarasalk, Спасибо за вопрос, вы все правильно говорите, но дело в том что мы этот код должны повторить много раз, не один пост, а 5-7 или 100, не имеет разницы, каждый раз мы получаем информацию о разных постах. В этом масиве храниться индефикаторы постов.
C#
1
string[] m = { "4377", "4247", "4248", "4241" };
Нам нужно получить id всех кто лайкнул, и занести в переменную, а потом вывести их по количеству повторений, чтоб можно было узнать кто больше всего сидит на твоей страницы, ну типо лайкометр, только на vk api.

Добавлено через 3 минуты
tarasalk, Посмотрите код в самом первом спойлере, он отлично работает, я делал по его примеру
0
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
22.03.2015, 13:20  [ТС] 4
Вообщем что бы я не делал всегда выводит одно и тоже
Изменить исходник нужно
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
22.03.2015, 14:14 5
Лучший ответ Сообщение было отмечено cyber1337 как решение

Решение

Попробуйте сначала получить результат тут, у меня с вашим запросом совпадений не находит. access_token кстати этот метод не требует.

По последнему коду:
строчка 12. Переменная str перезаписывается в цикле, т.е. хранится только последний результат.
1
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
22.03.2015, 15:46  [ТС] 6
tarasalk,
Цитата Сообщение от tarasalk Посмотреть сообщение
Попробуйте сначала получить результат тут,
все работает, я ведь там и беру vk api, access_token на всякий случай прикрутил, так как если попадается страница, которая скрыта для не авторизованных пользователей. А по поводу отсутствия совпадений, да визуально глянул, походу действительно нет совпадений.
C#
1
string[] m = { "4377", "4247", "4390", "4241", "4275", "4274", "4392" };
Вот то где совпадения будут 100%.
И можешь скинуть код по которому ты пробовал?
1
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
22.03.2015, 16:26 7
Лучший ответ Сообщение было отмечено cyber1337 как решение

Решение

Цитата Сообщение от cyber1337 Посмотреть сообщение
И можешь скинуть код по которому ты пробовал?
Я использовал интерфейс ВК, там у них в конце страницы Написание кода дело десятое имхо)

Еще я заметил, вы меняете только owner_id, а ведь еще есть item_id.
1
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
22.03.2015, 18:16 8
Лучший ответ Сообщение было отмечено cyber1337 как решение

Решение

Я чет не чего не понял что вам нужно
понял пока что надо пройти по массиву и скачать все
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
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
 
class Class1
{
    static void Main()
    {
        MainAsync().Wait();
    }
 
    static async Task MainAsync()
    {
        const string add = "https://api.vk.com/method/likes.getList?type=post&item_id=4377&filter=likes&frinds_only=0&extended=1&offset=1&count=1000&access_token=aa5d63a10ecf232dd20ae58f807722d5e5a8d553e88fb7a833c8622bfe558ef472191341e75ddbfb8d182&owner_id=1";
 
        string[] m = { "4377", "4247", "4390", "4241", "4275", "4274", "4392" };
        var task = m.Select(async url =>
        {
            using (var clien = new HttpClient())
            {
                return await clien.GetStringAsync(add + url);
            }
 
        }).ToList();
 
        var results = await Task.WhenAll(task);
    }
}
на 6 запросов возвращает пустоту
Миниатюры
Изменить исходник нужно  
1
18 / 18 / 9
Регистрация: 23.02.2015
Сообщений: 86
22.03.2015, 18:21 9
Как магистр ты говоришь о юный падаван
1
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
22.03.2015, 19:44  [ТС] 10
tarasalk,
Цитата Сообщение от tarasalk Посмотреть сообщение
Еще я заметил, вы меняете только owner_id, а ведь еще есть item_id.
item_id это id самого человека у кого этот пост, или группы с постом, не в этом дело, это все мелочи, главное в другом
Цитата Сообщение от _exp10der_ Посмотреть сообщение
на 6 запросов возвращает пустоту
У тебя проблема с самим запросом на vk api, он должен быть таким:
https://api.vk.com/method/like... tem_id=ТУТ НОМЕР ПОСТА(они находятся в переменной m). в owner_id=АЙДИ ЧЕЛОВЕКА ИЛИ ГРУППЫ У КОТОРОГО СОДЕРЖИТСЯ ПОСТ

Добавлено через 1 минуту
Кстати щас заметил ошибку, я перепутал owner_id с item_id= из за этого сам вк выдавал ошибочную информацию.
0
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
22.03.2015, 20:49 11
C#
1
http.GetStringAsync("https://api.vk.com/method/likes.getList?type=post&item_id=4377&filter=likes&frinds_only=0&extended=1&offset=1&count=1000&access_token=aa5d63a10ecf232dd20ae58f807722d5e5a8d553e88fb7a833c8622bfe558ef472191341e75ddbfb8d182&owner_id=1"+ s)
это я взял из вашего поста зачем тогда писать не правильно только сбиваете с толку вот что то сделал если я вас правильно понял


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
using System;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
 
class Class1
{
    static void Main()
    {
        MainAsync().Wait();
    }
 
    static async Task MainAsync()
    {
        const string add = "https://api.vk.com/method/likes.getList?type=post&owner_id=135215546&item_id=4377&filter=likes&frinds_only=0&extended=1&offset=1&count=1000&access_token=aa5d63a10ecf232dd20ae58f807722d5e5a8d553e88fb7a833c8622bfe558ef472191341e75ddbfb8d182&item_id=";
 
        string[] m = { "4377", "4247", "4390", "4241", "4275", "4274", "4392" };
        var task = m.Select(async url =>
        {
            using (var clien = new HttpClient())
            {
                return await clien.GetStringAsync(add + url);
            }
 
        }).ToList();
 
        var results = await Task.WhenAll(task);
 
        var query = results.SelectMany(n => JObject.Parse(n)["response"]["items"].Select(x => x["uid"].ToString()))
            .GroupBy(n => n, (k, n) => new {k, count = n.Count()}).OrderByDescending( n=>n.count);
 
        foreach (var q in query)
        {
            Console.WriteLine(q.k + " " + q.count);
        }
        
    }
}
Миниатюры
Изменить исходник нужно  
1
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
22.03.2015, 23:53 12
Я уверен что есть уже готовые библиотеки с нужным вам функционалом и изобретать велосипеды не к чему

Цитата Сообщение от cyber1337 Посмотреть сообщение
У тебя проблема с самим запросом на vk api, он должен быть таким:
https://api.vk.com/method/like... tem_id=ТУТ НОМЕР ПОСТА(они находятся в переменной m). в owner_id=АЙДИ ЧЕЛОВЕКА ИЛИ ГРУППЫ У КОТОРОГО СОДЕРЖИТСЯ ПОСТ
Добавлено через 1 минуту
Кстати щас заметил ошибку, я перепутал owner_id с item_id= из за этого сам вк выдавал ошибочную информацию.
Пора уже определится хотябы с этой строкой

Думаю дальше сами справитесь
1
1 / 1 / 1
Регистрация: 09.02.2015
Сообщений: 52
23.03.2015, 17:10  [ТС] 13
_exp10der_,
Ты просто бог, все супер, кое что подправил в запросе к vk api, все работает как часы, ты просто молодец))) У меня был уже код примерно мной переписанный, но твой куда более стабильный и простой.
0
23.03.2015, 17:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2015, 17:10
Помогаю со студенческими работами здесь

Что нужно поменять, чтобы исходник компилировалась в com, а не exe программу?
что нужно поменять чтобы весь код был в одном сегменте и компилировался в masm611? .model small...

Нужно исходник программы bunny hop для любой игры
Нужно исходник программы bunny hop для любой игры, пол интернета перерыл помогите умоляю!

Нужен исходник для расчёта комплектации материалов или т.п. Исходник с расчётами, таблицами
Добрый день всем) Нужна помощь. Занимаюсь расчётами стоимость материалов и стоимость в оконной...

нужно чтобы ссылка открывалась не на новой странице, а в отдельном окне что нужно изменить?
&lt;subButton type=&quot;link&quot;&gt; &lt;label&gt;&lt;!]&gt;&lt;/label&gt; ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru