Author Topic: Протокол VKontakte  (Read 612166 times)

0 Members and 4 Guests are viewing this topic.

Offline Black Sniper

Re: Протокол VKontakte
« Reply #195 on: 25 08 2014, 06:54:42 »
Elzor, что-то не так. по "неизвестному" не обновляется инфа...
Там есть какие нибудь условия, типа он в сети должен быть?
Просто, они всегда показываются оффлайн (если это важно)
Бью метко, но редко...
 

Offline Elzor

Re: Протокол VKontakte
« Reply #196 on: 25 08 2014, 06:59:02 »
Онлайн-офлайн значения не имеет. То есть не работает,  если руками обновить?
 

Offline Black Sniper

Re: Протокол VKontakte
« Reply #197 on: 25 08 2014, 07:04:27 »
То есть не работает,  если руками обновить?
У меня не получилось....

Post Merge: 25 08 2014, 07:09:21
нетлог нужен?
« Last Edit: 25 08 2014, 07:09:21 by Black Sniper »
Бью метко, но редко...
 

Offline Elzor

Re: Протокол VKontakte
« Reply #198 on: 25 08 2014, 08:34:32 »
Да, хорошо бы.
 

Offline Black Sniper

Re: Протокол VKontakte
« Reply #199 on: 25 08 2014, 08:42:49 »
Отбой. Имена подгружаются успешно.
да же Аватары :)
« Last Edit: 25 08 2014, 09:33:24 by Black Sniper »
Бью метко, но редко...
 

Offline Wave

Re: Протокол VKontakte
« Reply #200 on: 25 08 2014, 09:32:09 »
Прикреплённая версия в отличии от предыдущей работает так:

Отправляю реплику. Реплика появляется в диалоге\истории и доходит до собеседника. Потом в поле набора появляется это же сообщение с ошибкой «не отправлено».

Предыдущая работала так:
Реплика — эта же реплика от моего же лица, но типа «в ответ» (появлялись br вместо переводов строк). Т.е., задвоенная реплика не всегда идентична отправленной. Причём иногда, очень редко, задвоенная реплика в истории записывалась раньше, чем отправленная. Или так: реплика — реплика от собеседника — задвоенная реплика.

Проверяю x86 на 0.95.2 stable.
 

Offline Elzor

Re: Протокол VKontakte
« Reply #201 on: 25 08 2014, 09:47:02 »
Отправляю реплику. Реплика появляется в диалоге\истории и доходит до собеседника. Потом в поле набора появляется это же сообщение с ошибкой «не отправлено».


Перезалил, просьба протестировать еще раз.
 

Offline Wave

Re: Протокол VKontakte
« Reply #202 on: 25 08 2014, 10:03:02 »
Вроде работает как надо. Пока ни задвоений, ни жалоб на неотправленное нет.
Но у меня задвоения бывают в одном случае из пяти примерно, к тому же когда диалог уже идёт, они редко бывают. Так что будем посмотреть ещё.

Anyway, thank you!
« Last Edit: 25 08 2014, 10:12:22 by Wave »
 

Offline MisterMyth

Re: Протокол VKontakte
« Reply #203 on: 25 08 2014, 12:59:35 »
К огромному сожалению Техподдержка ВК мне не смогла помочь восстановить доступ к странице для Miranda NG. Пробовал удалить приложение, создавал профиль заново, но программа не запрашивает доступ повторно. Двухфазовая авторизация выключена. Теперь для того, что бы Miranda NG снова получила доступ к ВК мне нужно создать страницу заново? Или есть иной способ? Как я писал в одной из тем, у друга была такая проблема, пока он не запустил программу на другом компе. Как Миранда получает первичный доступ к странице?
Myth: Make Your Thought Heard
 

Offline ghazan

Re: Протокол VKontakte
« Reply #204 on: 25 08 2014, 14:32:58 »
миранда получает форму с авторизацией, автоматически заполняет ее введенным паролем и отсылает на сервер
в ответ сервер редиректит миранду на страницу, где прописан токен доступа, дальше две недели можно юзать этот токен
 

Offline MisterMyth

Re: Протокол VKontakte
« Reply #205 on: 25 08 2014, 15:01:58 »
то есть через пару дней я смогу запросить снова токен для вк? или что?
Myth: Make Your Thought Heard
 

Offline ghazan

Re: Протокол VKontakte
« Reply #206 on: 25 08 2014, 15:34:45 »
токен для ВК можно запросить, просто стерев его в профиле, в настройках в секции соотв протокола (VKontakte_1)
тогда при следующем старте миранда запросит новый
если его там нет, а выхода в онлайн не происходит, надо сделать сетевой лог и закинуть его мне в личку сюда
 

Offline watcher

Re: Протокол VKontakte
« Reply #207 on: 25 08 2014, 15:37:20 »
токен для ВК можно запросить, просто стерев его в профиле, в настройках в секции соотв протокола (VKontakte_1)

Имеется ввиду база данных, нужно открыть редактором базы и тогда уже искать.

Spoiler
[close]
Пожалуйста, внимательно прочтите правила постинга перед тем, как открыть новую тему.
Please read forum rules.
 

Offline VEG

  • Newbie
  • *
  • Posts: 41
Re: Протокол VKontakte
« Reply #208 on: 25 08 2014, 18:06:01 »
Quote from: ghazan
в частности, совершенно не нужно кодировать все эти русские символы из utf в %XX, это безумие
...
вставил короче urlencode, хрен с ним
А если кодировать в urlencode только служебные символы с кодами меньше 127? Я у себя в скриптах всегда так делаю, и обычно работает суперски. На сколько я вижу по коду, urlencode у вас не кодирует только небольшой набор символов:
Code: [Select]
        for (outputLen = 0, s = (const BYTE*)szUrl; *s; s++) {
                if (('0' <= *s && *s <= '9')  || //0-9
                         ('A' <= *s && *s <= 'Z')  || //ABC...XYZ
                         ('a' <= *s && *s <= 'z')  || //abc...xyz
                        *s == '-' || *s == '_' || *s == '.' || *s == ' ') outputLen++;
                else outputLen += 3;
        }
Понимаю, что такое поведение не по RFC и бла-бла-бла, но веб-сервера отлично обрабатывают все данные в UTF-8, где все юникодные символы с кодом больше 127 никак не закодированы и представлены как есть. На сколько я вижу, эта функция работает строго с однобайтовым массивом, поэтому можно просто проверять первый бит — если он равен единице, значит кодировать не нужно. Любой юникодный символ с кодом больше 127 в каждом своём байте будет иметь первый бит установленный в единицу, поэтому это будет работать как надо.

Получится по идее что-то типа такого (извиняюсь, что не diff, добавил пару строк с условиями, не тестировал):
Code: [Select]
MIR_CORE_DLL(char*) mir_urlEncode(const char *szUrl, bool strict = false)
{
        if (szUrl == NULL)
                return NULL;

        const BYTE *s;
        int outputLen;
        for (outputLen = 0, s = (const BYTE*)szUrl; *s; s++) {
                if ((*s & 0x80 && !strict) || // UTF-8 multibyte
                         ('0' <= *s && *s <= '9')  || //0-9
                         ('A' <= *s && *s <= 'Z')  || //ABC...XYZ
                         ('a' <= *s && *s <= 'z')  || //abc...xyz
                        *s == '~' || *s == '-' || *s == '_' || *s == '.' || *s == ' ') outputLen++;
                else outputLen += 3;
        }

        char *szOutput = (char*)mir_alloc(outputLen+1);
        if (szOutput == NULL)
                return NULL;

        char *d = szOutput;
        for (s = (const BYTE*)szUrl; *s; s++) {
                if ((*s & 0x80 && !strict) || // UTF-8 multibyte
                         ('0' <= *s && *s <= '9')  || //0-9
                         ('A' <= *s && *s <= 'Z')  || //ABC...XYZ
                         ('a' <= *s && *s <= 'z')  || //abc...xyz
                        *s == '~' || *s == '-' || *s == '_' || *s == '.') *d++ = *s;
                else if (*s == ' ') *d++='+';
                else {
                        *d++ = '%';
                        *d++ = szHexDigits[*s >> 4];
                        *d++ = szHexDigits[*s & 0xF];
                }
        }
        *d = '\0';
        return szOutput;
}
Параметр strict на случай, если вдруг где-то понадобится кодировать все юникодные символы. Но вообще по идее должно и так работать. А ещё можно для красоты переименовать функцию в mir_url_encode  ::)

По RFC, кстати, можно смело не кодировать ещё и тильду ~, тож добавил в код :)
« Last Edit: 25 08 2014, 18:43:36 by VEG »
 

Offline Elzor

Re: Протокол VKontakte
« Reply #209 on: 26 08 2014, 02:47:15 »
Патч.
Исправлены:
Длинный постинг в чатах, по аналогии с постингом персональных сообщений.
Задваивание сообщений при отправке.
Добавлены:
Ручное обновление информации о контакте.
Автоматическое заполнение информации о контактах не в списке друзей при их добавлении в локальный контакт-лист.

UPD: изменен костыль на <br>, теперь он подменяет и другие html конструкции, не трогая смайлы.
« Last Edit: 26 08 2014, 08:38:17 by Elzor »