Форум программистов, компьютерный форум, киберфорум
Java: API, боты
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/12: Рейтинг темы: голосов - 12, средняя оценка - 4.50
4 / 4 / 0
Регистрация: 13.12.2012
Сообщений: 20
1

Консольный мессенджер VK, подскажите как реализовать работу с API, пожалуйста

02.06.2014, 09:49. Просмотров 2462. Ответов 2
Метки нет (Все метки)


Хочу написать консольный месенджер вконтакте, только с апи проблемы - никак не могу понять.
Порывшись в "интернетах", я нашел код класса MD5, но понять, как использовать его я не смог. Можно объяснить подробней?
вот код:
Кликните здесь для просмотра всего текста

класс:
Java
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
/** 
 * VKAPI class for vkontakte.ru social network 
 * 
 * @package server API methods 
 * @link [url]http://vk.com/developers.php[/url] 
 * @autor Mihail Filimonov 
 * @vk_id: 19139981 
 * @version 1.1 */ 
 
package overtake; 
import java.util.*; 
import java.net.*; 
import java.io.*; 
import java.security.MessageDigest; 
 
final class MD5 { 
 
    public static String getHash(String input) {                String md5 =null; 
        try { 
            StringBuilder code = new StringBuilder(); 
            MessageDigest messageDigest =  MessageDigest.getInstance("MD5"); 
            byte bytes[] = input.getBytes(); 
            byte digest[] = messageDigest.digest(bytes); 
 
            for (int i = 0; i < digest.length; ++i)  
                code.append(Integer.toHexString(0x0100 + (digest[i] & 0x00FF)).substring(1)); 
 
            md5 = code.toString(); 
 
        } catch(Exception e) { } 
 
        return md5; 
    } 
 
} 
 
 class VKApi  { 
   private String api_secret; 
   private int api_id; 
   private TreeMap param = new TreeMap(); 
 
   public VKApi(String api_secret, int api_id) { 
        this.api_secret = api_secret; 
        this.api_id = api_id; 
   } 
 
    public String  api(String Method ) { 
          return buildMethod(Method); 
   } 
   public Object api(String Method, TreeMap params) { 
params.putAll(params); 
return buildMethod(Method);  
 
    } 
    private String buildURL(TreeMap param) { 
 
        String api_url = "http://api.vk.com/api.php?"; 
        StringBuilder sig = new StringBuilder(); 
        Object[] keys =  param.keySet().toArray(); 
 
         for(int i = 0; i < param.size(); i++) 
                 sig.append(keys[i]+"="+param.get(keys[i])); 
 
         sig.append(this.api_secret); 
         sig = new StringBuilder(MD5.getHash(sig.toString())); 
         param.put("sig", sig); 
         try { 
 
             keys = param.keySet().toArray(); 
             for(int i = 0; i < param.size(); i++) 
                     api_url+= keys[i]+"="+URLEncoder.encode((param.get(keys[i])).toString(), "UTF-8")+"&"; 
 
         } catch(UnsupportedEncodingException e) { 
               throw new RuntimeException(e); 
         } 
 
            return query(api_url); 
     } 
     private String query(String url) { 
        URLConnection query; 
        InputStream result; 
        String data; 
        byte buf[] = new byte[1024*48]; 
          try { 
               query = new URL(url).openConnection(); 
               result = query.getInputStream(); 
               int r = result.read(buf); 
               data = new String(buf, 0, r); 
          } catch(Exception e) { 
               throw new RuntimeException(e); 
          } 
          param.clear(); 
            return  data; 
    } 
    private String buildMethod(String Method) { 
 
        Date date = new Date(); 
        String data; 
        long now = date.getTime()/1000; 
        byte buf[] = new byte[1024*48]; 
 
        param.put("api_id",this.api_id); 
        param.put("v","3.0"); 
        param.put("method", Method); 
        param.put("timestamp", now); 
        param.put("format", "json"); 
        param.put("random", Math.round(Math.random()*1000)); 
        return buildURL(param); 
 
    } 
 
}
+ в комплекте был пример:
Java
1
2
3
4
5
6
VKApi vk = new VKApi("api_secret",api_id); 
  String uids = "1,2,4"; 
    String message = "Hello to app"; 
        params.put("uids", uids); 
params.put("message",message); 
        System.out.println(vk.api("secure.sendNotification", params));
Я посмотрел его, но ничегошеньки так и не понял.


Кому интересно, вот идея программы:
Кликните здесь для просмотра всего текста

короче, план работы приложения такой: юзер авторизируется в приложении, программа ему выдаёт список его друзей онлайн (три столбца: name sername id) и ждёт команды (пусть их будет на данный момент две: quit и chat). получив quit - закрываемся, получив chat - загружаем на экран 15 сообщений из диалога с выбранным пользователем и ждём ввода сообщения. каждую строку заносим в сообщение, ловим строку @enter - признак того, что уже можно отправлять.
так же команды:
@list - возвращение к списку онлайн
@apdate - подгрузка сообщений
@quit - закрытие программы.

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

собираюсь чуть позже переписать на с++ или python для linux и винды и добавить опцию, которая обменивается сообщениями между консолью машины и программой. пароль администрирования будет хранится внутри файла конфигов программы и передаваться не будет. но это я реализую гораздо позже.

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2014, 09:49
Ответы с готовыми решениями:

Скажите, пожалуйста, как правильно реализовать работу методов класса в lua api c++
вот самая простая структура. как вызвать ее конструктор и метод в lua. Подскажите, пожалуйста. ...

Как реализовать работу с дисками компьютера в C++ Visual с использованием Win32 API
Доброго времени суток. У меня есть вопрос по реализации работы функции GetDiskFreeSpace. Я находил...

Подскажите как реализовать работу с несколькими VM
Всем доброго дня. Подскажите как реализовать работу с несколькими VM. VM №1. class...

Подскажите пожалуйста как ускорить работу программы!
Есть задача :&quot;Во входном файле (вы можете читать данные из файла input.txt) записан текст. Словом...

2
Эксперт Java
2361 / 2191 / 558
Регистрация: 28.12.2010
Сообщений: 8,577
02.06.2014, 10:59 2
Для 90х годов идея была бы в самый раз. Сейчас то зачем такое делать?
Причем тут код md5?
ВК вам выдает ключ, по которому вы можете запускать его API и методы как это делать. Думаю в самом ВК есть информация как и что делать.
1
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
02.06.2014, 23:36 3
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Для 90х годов идея была бы в самый раз. Сейчас то зачем такое делать?

Не по теме:

Андрей Новиков неплохо заработал на продаже ВК месседжера для iOS. Причем приложение далеко не лучше официального мобильного клиента ВКонтакте, на мой взгляд.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2014, 23:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Подскажите как реализовать потребности, пожалуйста
Здравствуйте! Помогите разобраться, пожалуйста: Без вмешательства сервера! Документ только...

Подскажите пожалуйста как лучше реализовать условие
Подскажите пожалуйста как лучше реализовать условие: в edit1 IP-адрес если этот ip и диапазона...

Как правильно реализовать запрос, подскажите пожалуйста
SELECT Arenda_prodaja_kvartir.Raion, Arenda_prodaja_kvartir.Zhiloi_kompleks,...

Подскажите пожалуйста как такое можно реализовать?
в общем суть в том что сейчас верстаю дизайн сайта, не могу сообразить как такое возможно сделать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.