Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1

VkLib

20.06.2011, 08:32. Показов 7637. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я написал либу с помощью которой можно выполнить методы Вконтакте API, собственно которые представлены здесь:
Обычные методы: http://vkontakte.ru/developers... E%E2%20API
Расширенные методы: http://vkontakte.ru/developers... 4%FB%20API
vklib.rar
vk.h - заголовочный файл
vklib.dll - собственно сама библиотека
vklib.lib - lib для подключения
libeay32.dll - для HTTPS
ssleay32.dll - для HTTPS
А теперь собственно как пользоваться..
Авторизация проходила по алгоритму который описывается здесь:http://vkontakte.ru/developers... 5%ED%E8%E9
и так сначала надо создать приложение через которые либа и будет выполнять все методы
приложение создается по этой ссылке: http://vkontakte.ru/editapp?act=create&site=1 нужно выбрать "Standalone-приложение"
Теперь вы должны разрешить методы:
Code
1
http://api.vkontakte.ru/oauth/authorize?client_id=APP_ID&scope=friends,photos,audio,video,docs,notes,pages,offers,questions,wall,messages,offline&redirect_uri=http://api.vkontakte.ru/blank.html&display=touch&response_type=token
APP_ID - айди вашего приложение.
теперь можно свободно пользоваться библиотекой... вот маленький примерчик->
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include "vk.h"
using namespace std;
#pragma comment(lib, "vklib.lib")
 
int main()
{
    if(LoginVK("danvern1%40mail.ru","пароль"))
           {
         if(LearnAccessToken("2345463"))
                {
            sendFuncVkAPI("wall.post","owner_id=58185685&message=xai",10,0,true);
         }
                 else
                   cout << "Айди приложение указано не правильно либо вы не разрешили доступ!!!" << endl;
           }
           else
              cout << "Логин или пароль введены не верно!!!" << endl;
    getchar();
    return 0;
}
LoginVK("danvern1%40mail.ru","пароль"); Эта функция получает куки которые будут нужны для получение AccessToken.
Параметры:
1: Логин (вместо @ надо писать %40)
2: Пароль


LearnAccessToken("2345463"); Эта функция получает AccessToken который нужен для вызовов методов.
Параметры:
1:айди приложения.

sendFuncVkAPI("wall.post","owner_id=5818 5685&message=xai",10,0,true);Функция выполняет методы Вконтакте апи
Параметры:
1: метод
2: параметры метода (перечисляются через &)
3: количество вызовов
4: задержка между вызовами (в секундах)
5: будет выводить на экран ответ от сервера или не будет

возвращает ссылку на структуру с ответами сервера..
C++
1
2
3
4
recvServ * rv;
rv = sendFuncVkAPI("wall.post","owner_id=58185685&message=xai",10,0,false);
for(int i = 0;i < 10;i++)
        cout << rv[i].reply << endl;
жду комментариев...
0
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
30.06.2011, 13:44  [ТС]
Студворк — интернет-сервис помощи студентам
хорошо сейчас исправлю...
0
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
30.06.2011, 16:53  [ТС]
Вот исправил:
Вложения
Тип файла: rar vklib.rar (51.0 Кб, 20 просмотров)
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
30.06.2011, 19:11
Danvern, в этот раз даже UPX-ом не сжали

Добавлено через 16 минут
IsDebuggerPresent() поможет лишь от активных отладчиков, а вот от Sourcera и IDA они уж точно не попрут
Но кстати, два вызова этой функции это нифига не защита:
Assembler
1
   call ds:IsDebuggerPresent
меняем на
Assembler
1
2
3
4
   xor EAX, EAX
   nop
   nop
   nop
и антиотладочная система пала
1
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
30.06.2011, 20:01  [ТС]
IsDebuggerPresent() я этого в своем коде не писал... А upx'ом надоело сжимать... А как все таки библиотека там все хорошо?
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
30.06.2011, 21:53
Цитата Сообщение от Danvern Посмотреть сообщение
А как все таки библиотека там все хорошо
Честно говоря, хз. Декомпилить и изучать DLL-ку в 151 КБ на чистом интузиазме мне тоже не очень улыбается - у мну есть своя работа и я подчас ей загружен, как это не печально

1 Логин и Пароль после вызова LoginVK нужно затирать memset();
2 vk.hpp необходимо оформить подобающе:
что будет если клиентский код дважды заинклудит этот файл ?
3 прототип функции LoginVK, где тут что:
C++
1
__declspec(dllexport) int LoginVK(char *,char *,char *);
4 Мы в 21 веке для обработки ошибок, как нельзя лучше подойдут эксепшены;
5 В функциях работы с сетью как и в прошлой версии неверное использование функций WSAStartup() и WSACleanup().
1
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
01.07.2011, 07:50  [ТС]
1. Ну да это надо.
2. А если дописать #pragma once то это решит проблему?
3. Непонял...
4. Попробую.
5. а можете показать как правильно использовать...
Я вот так делаю:
WSAStartup(MAKEWORD(2,2),&wsdt);
//тут я работаю с сокетами
WSACleanup();
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
01.07.2011, 12:26
Цитата Сообщение от Danvern Посмотреть сообщение
3. Непонял...
C
1
LoginVK(char *,char *,char *);
чем является первый аргумент данной функции ? чем второй ? чем 3-й ?

Цитата Сообщение от Danvern Посмотреть сообщение
WSAStartup(MAKEWORD(2,2),&wsdt);
//тут я работаю с сокетами
WSACleanup();
я о том же: они вызываются на каждый "чих", а достаточно вызвать первую во время инициализации DLL, а последнюю во время де инициализации. Почитайте о функции DllEntryPoint() в MSDN.
1
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
01.07.2011, 13:06  [ТС]
Цитата Сообщение от schdub Посмотреть сообщение
Сообщение от Danvern
3. Непонял...
Код C1 LoginVK(char *,char *,char *);
чем является первый аргумент данной функции ? чем второй ? чем 3-й ?
а все теперь понял подпишу обезательно))

Цитата Сообщение от schdub Посмотреть сообщение
Сообщение от Danvern
WSAStartup(MAKEWORD(2,2),&wsdt);
//тут я работаю с сокетами
WSACleanup();
я о том же: они вызываются на каждый "чих", а достаточно вызвать первую во время инициализации DLL, а последнюю во время де инициализации. Почитайте о функции DllEntryPoint() в MSDN.
А думал что перед каждым использованием надо инициализировать по после использования де инициализировать..исправлю!
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
01.07.2011, 13:15
1 Почему бы не использовать ООП подход ?
2 Почему бы не открыть исходный код ?
3 Почему бы не отказаться от WINSOCK в пользу boost::asio ?
0
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
01.07.2011, 13:18  [ТС]
1. я тоже об этом думал.
2. да принципи можно сейчас вылажу..
3. сокеты больше нравятся .
0
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
01.07.2011, 13:20  [ТС]
Вложения
Тип файла: rar vklib.rar (2.8 Кб, 26 просмотров)
1
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
01.07.2011, 13:23
Цитата Сообщение от Danvern Посмотреть сообщение
сокеты больше нравятся
чем ?
0
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
01.07.2011, 13:24  [ТС]
сложностью)
1
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
01.07.2011, 13:33
C
1
2
3
//..
checkUrl("ht");
//..
взгляните на содержимое iU, кстати функция возвращает true.
0
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
01.07.2011, 13:39  [ТС]
Цитата Сообщение от schdub Посмотреть сообщение
взгляните на содержимое iU, кстати функция возвращает true.
по идее она должна быть заполнена нулями..

как ещё проверить я просто не придумал...пока что...
и я подумал что только я, этой функцией буду пользоваться и сильно проверками её грузить не надо...
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
01.07.2011, 13:43
Куча утечек памяти
0
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
01.07.2011, 13:45  [ТС]
ага((( постараюсь к следующему релизу исправить...

Добавлено через 28 секунд
в диспетчер задач смотришь там прям скачут цифры ...
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
01.07.2011, 13:48
например, за один вызов:
C
1
result = LearnCookie(urlEncodeLap(lg),urlEncodeLap(ps));
утекает 256 + 256 (по меньшей мере) байт
1
 Аватар для Danvern
41 / 40 / 5
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
01.07.2011, 14:02  [ТС]
ну я думаю самая утечка памяти это WSAStartup() & WSACleanup();
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
01.07.2011, 16:24
Danvern, да нет при некоторых условиях в getUrl() память может течь катастрофическим образом

Мой вам совет: теперь попробуйте реализовать тот же функционал используя asio и ООП подход. Сначала будет трудно, но если вы справитесь то получите неоценимый опыт, и потом на WINSOCK даже и не посмотрите
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую: Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий? Да, такие данные есть, и они хорошо описаны и в российской,. . .
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru