nek
-
Постов
18 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные nek
-
-
Здравствуйте. Каким образом вызвать Tfrm_OAuthWebForm и обработать OnAfterRedirect для извлечения токена из URI?
На REST.Authenticator.OAuth.WebForm.FMX.hpp компилятор ругается (ненравится объявдение класса), других модулей не знаю. На VCL не всё так печально:
Tfrm_OAuthWebForm* form;
...можно, но дальше тож пока глухо (а раньше вроде получалось, тока исходник посеял)
На Делфи я как погляжу всё гладенько. В uses добавляется pas, далее нужному событию назначается процедура в которой и происходит разбор строки с токеном.
214 -
А проект? Экстрасенсов тут нет! Мобильная среда ли, винда?
-
Я в этом нуб) Может Accept поможет?
application/json, text/plain; q=0.9, text/html;q=0.8, (у мну поумолчанию)
-
Может тут посмотришь? Клац!
А меня интересует FLV. Правда у меня несколько иная задача (боюсь придется создавать новую тему). Что бы не мучатся с форматами использую TMediaPlayer как источник информации о разрешении видео. Ещё не знаю как определить частоту кадров
P.S.: Сорри за некропостUPD: o.O всё открывается, но надо переименовать файл в mp4. Но это ведь не дело заставлять юзера переименовывать пачку? Когда файлов 50, среди них n другого формата.
UPD2: Дошли руки. Надо ведь регистрировать свой тип? Т.к. по-умолчанию MP знает лишь небольшое кол-во файлов. Пока так TMediaCodecManager::RegisterMediaCodecClass(".flv","Flash Video",TMediaType::Video,...
-
Намучался я с этим CB!
Вот мои)
#include "Clipbrd.hpp" #include "DateUtils.hpp"
Кода ~500 строк не считая юниты.
Чистый проект ведёт себя адекватно. Открываю большой и понеслась! При попытке проверить синтаксис/какие-то внутринние действия или отобразить подсказку IDE виснет. Если повезёт, то вскоре очухается, если нет, то CB вылетит без каких либо ошибок.
Иногда работает подсказка ListView1->Items->..отображается список методов, иногда нет. То же со справкой F1.
Очень редко возникает ошибка "Программа всё ещё запущена?", недавно решил поискать мой процесс в...process explorer'е и угадайте, где я его нашел? В Steam.exe, который никак не связан с моей программой и находится на другом диске. Поясняю: steam система дистрибьюции цифрового контента в частности игр, которая люто бешено ненавидит вмешательства в своё адресное пространство и просто напросто банит аккаунты за посягательства на файлы ядра и изменение процесса в памяти. О бане можно узнать и через недельку другую, причём никакие "я больше так не буду" или "это не я" не помогут)))
Тьфу тьфу тьфу пока всё ок. Я вообще у себя избавился от одной сомнительной фичи, но факт остаётся фактом как-то процесс "перетёк" в другой)) Ничего криминального в коде нет,
-
Доброго времени суток. Как "прикинуться" приложению Firemonkey ClipboardViewer'ом? И можно ли потом обойтись малой кровью перепилив это дело под мак?
Не делать же каждые N мс проверку буфера (в моём случае на совпадение с рег. выр)
Вот например код для VCL (C++) , но он не работает в FireMonkey, не знаю какую библиотеку ещё подрубить кроме vcl.clipbrd.hpp (clipbrd.hpp)
Оригинал здесь
// ...class TForm1 : public TForm{// ...private: // User declarations HWND FNextCbViewer; void __fastcall WMChangeCBChain(TWMChangeCBChain &Msg); void __fastcall WMDrawClipboard(TWMDrawClipboard &Msg);public: // User declarations __fastcall TForm1(TComponent* Owner); BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(WM_CHANGECBCHAIN, TWMChangeCBChain, WMChangeCBChain) VCL_MESSAGE_HANDLER(WM_DRAWCLIPBOARD, TWMDrawClipboard, WMDrawClipboard) END_MESSAGE_MAP(TForm)};// ...
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){ FNextCbViewer = 0; // Изначально никаких попыток перехвата нет} //---------------------------------------------------------------------------// При уничтожении формы "отцепимся" от цепочкиvoid __fastcall TForm1::FormDestroy(TObject *Sender){ if(FNextCbViewer) { ChangeClipboardChain(this->Handle, FNextCbViewer); FNextCbViewer = 0; }} //---------------------------------------------------------------------------// Эта кнопка будет добавлять наше приложение к цепочке, получающей уведомления// об изменении содержимого Clipboard-аvoid __fastcall TForm1::btnSetViewerClick(TObject *Sender){ if(FNextCbViewer) // Второй раз добавлять себя не будем { ShowMessage(L"Уже зарегистрировано"); } else { FNextCbViewer = SetClipboardViewer(this->Handle); // А если еще не делали - добавим }} //---------------------------------------------------------------------------// Ну, и кнопка, чтобы "отцепиться" вручнуюvoid __fastcall TForm1::btnResetViewerClick(TObject *Sender){ ChangeClipboardChain(this->Handle, FNextCbViewer); FNextCbViewer = 0;} //---------------------------------------------------------------------------// void __fastcall TForm1::WMChangeCBChain(TWMChangeCBChain &Msg){ // inherited; Msg.Result = 0; if(Msg.Remove == FNextCbViewer) { FNextCbViewer = Msg.Next; } else { // Информируем дальше по цепочке о событии изменении цепочки SendMessage(FNextCbViewer, WM_CHANGECBCHAIN, WPARAM(Msg.Remove), LPARAM(Msg.Next)); } }void __fastcall TForm1::WMDrawClipboard(TWMDrawClipboard &Msg){ try { // Собственно, уведомление пользователя. Тут можешь делать // с Clipboard-ом все что нужно MessageBox(0, _T("Содержимое буфера обмена изменилось"), _T("Внимание!"), MB_ICONINFORMATION); } __finally { // Но в конце информируем следующего об изменении буфера SendMessage(FNextCbViewer, WM_DRAWCLIPBOARD, WPARAM(0), LPARAM(0)); }}
Функции передачи дальше по цепочке (если я не ошибаюсь) нет.
ChangeClipboardChain(this->Handle, FNextCbViewer);
Если можно с примерами) желательно не делфи
-
Пример под себя переделал:
#include <Data.DBXJSON.hpp> #include <memory> ... std::auto_ptr<TJSONObject> object(static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(Memo1->Lines->Text))); TJSONObject* response = static_cast<TJSONObject*>(object->Get("response")->JsonValue); TJSONArray* items = static_cast<TJSONArray*>(response->Get("items")->JsonValue); TJSONObject* id = static_cast<TJSONObject*>(items->Get(0)); ShowMessage(id->GetValue("id")->ToString());
-
Я в этом пока не соображаю) У меня другой вопрос C++ или Delphi?
-
Free то ладно) Оно не помогает, delete тоже
delete jOb; delete jP;
Делал я такое, дело в самих операторах наверное.
-
String s = Memo1->Text; //Берём строку из Мемо TJSONObject* jOb = new TJSONObject(); //Создаём экземпляр класса jOb->ParseJSONValue(s); //Парсим значение TJSONPair* jP = jOb->Get(0);//Получаем первый элемент
Как-то так) Коменты конечно же отсебятина)
А дальше без dynamic_cast утечка памяти
-
Спасибо) Попробую адаптировать под себя
Оно всё почти идентичное, за исключением некоторых моментов. Например объявление можно впихнуть куда угодно и сразу инициализировать -
тем более работаю с C++.
Делфи мне не интересен. Т.е. да, там много написано про REST и про порядок действий..мне же надо выдирать уже готовые значения. из ответа
На эту статью я натыкался и её обязательно прочитаю...
UPD сорри, вчера быстренько отписался и ушел
-
Доброго времени суток!
Где-то на формуах спрашивал, но потом забросил эту тему) было не до этого...
В то время я много читал про Delphi вариант TJSONObject, Array, Items и т.д., но из-за нехватки знаний так и не разобрался в последовательности действий, тем более работаю с C++.
Вариантов и на Сишке куча, но все же у людей частные проблемы вроде утечки памяти, не так сделать, а эдак. Такие заумные вещи мне не по плечу (пока)
Про Data.DBXJSON знаю) Смотрел оф. справку.
Вопрос: (и мне бы желательно видеть конкретные рабочие примеры) допустим есть вот такая шняга - ответ ВК API:
{ "response": { "count": 1638, "items": [ { "id": 168886508, "owner_id": -51189706, "title": "Jenga Cat", "duration": 83, "description": "Еще больше крутых видео: vk.com\/just_vid\nРекомендую!", "date": 1401295313, "views": 754, "comments": 5, "photo_130": "http:\/\/cs541206.vk.me\/u2949887\/video\/s_af146ce5.jpg", "photo_320": "http:\/\/cs541206.vk.me\/u2949887\/video\/l_1b666cdd.jpg", "player": "http:\/\/vk.com\/video_ext.php?oid=-51189706&id=168886508&hash=a89ac9f2208445bf", "can_comment": 1, "can_repost": 1, "likes": { "user_likes": 0, "count": 35 }, "repeat": 0 } ] } }
Мне отсюда нужны id, owner_id, player, title в переменные.
Если группы/пользователя нет, то ответ примерно такой:{"error":{"error_code":15,"error_msg":"Access denied: user deactivated","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"video.get"},{"key":"owner_id","value":"000000000000"},{"key":"v","value":"5.21"},{"key":"count","value":"1"},{"key":"extended","value":"1"},{"key":"access_token","value":"Многа_Букафф"}]}}
Сорри за оффтоп, у TOAuth2Authenticator в модуле REST.Authenticator.OAuth.WebForm.Win.hpp описана форма Tfrm_OAuthWebForm, как её вызвать? Не хочется возиться с IdHTTP/CPPWebBrowser.
-
Оф. демо проект с авторизацией на популярных сетях
docwiki.embarcadero.com/CodeExamples/XE6/en/RESTDemo_Sample
-
Ссылка в личке. Возможно это просто китайфоны. А ещё вариант некий извращенный эмуль
-
Не только к IMEI. Его можно сменить.
-
Занимался я как-то этим делом и вот мои наработки (советую хотя бы прочитать про авторизацию на сайте vk api, я хреново объясняю):
Сначала нужно поместить на форму TOAuth2Authenticator. Сейчас точно не скажу куда какие URL вписывать в интерфейс компонента. По-мойму 2 левых верхних https....api.vk.com\auth (надо смотреть по документации...это должен быть базовый адрес для авторизации до знака вопроса). Третий адрес ....\blank.html (тож из документации).
Далее scope (разрешения): offline,video. Видео нужно мне для собственных нужд, offline - токен, который вернет сервер не будет нуждаться в обновлении.
И последнее id приложения (по-моему верхнее правое поле). Берется он с "панели управления" приложением вк.
Как написано в standalone не рекомендуется использовать secret, т.к. его можно достать и использовать в нехороших целях)
Ах да, чуть не забыл. Ответ должен быть token, не code.
Компонент собирает во едино всю информацию в 1 URL и отправляет пост, например: _ttps:\\api.vk.com\authorize?id=0000&scope=offline,photo&v=5.21&response=token&... Но параметра v= (версия апи) там не будет, как добавить свои параметры в запрос не разбирался.
В документации API сказано, что по этому адресу происходит редирект на стр. авторизации вк с вопросом "дать постоянный (пар. Offline)доступ к .... %application_name%?", если юзер дает добро, то его опять редиректит по адресу в котором уже будет токен. Токен нужен для исполнения методов. Естественно все что касается пользователя нуждается в отображении.
Нажимаешь кнопочку Authorization. Если все правильно открывается окно для авторизации вк. Нужно это для отладки, а так это самое окно вызывается кодом. Для делфи примеров 9000+, для с++ наверное мне не хватает мозгов( Даже аналогичный delphi'вскому .pas есть .hpp с тем же именем, но форму создать мне не удалось.
Можно все тоже самое и вручную через IdHTTP. Но в хе5- был баг. location была пустой для https запросов. Т.е. получить адрес куда тебя редиректнуло невозможно. Сейчас я создаю окно, где есть tcppwebbrowser, с его помощью наверное и буду просить доступ у пользователя к его профилю.
Методы - те же url в которых REST компоненты играют роль интерфейса. В методе как раз и нужен токен.
Про отправку через RESTRequest я уж молчу. Мне бы с формой авторизации разобраться, что бы самому все не делать.
Ответ приходит либо в виде json, либо в xml.
Пока пользуюсь xml, но лучше бы json, но с ним у меня проблемы.
Так и не понял как работает TJSONObject и прочие классы. Естественно читал доки и смотрел Си-шные примеры, но так ничего и не добился.
Тебе "читать" json нужно для того, что бы узнать а можно ли вообще загрузить фото на стр или группу? И там есть свои ограничения.
Запросы нужно делать не чаще 3 в 1 сек.
Дальше однотипные запросы потребуют капчи, потом просто пустой ответ.
Как запустить приложение ВКонтакте из своего приложения?
в ВКонтакте API
Опубликовано · Изменено пользователем nek
Приложение ВКонтакте на Андроид и обращения к API немного разные вещи (см название раздела). С помощью API можно например вызвать метод groups.isMember,но из своего приложения (в рамках FMX). Причём используя даже официальный id мобильного приложения ВК всё равно придётся заставить юзера ввести имя и пароль от аккаунта, т.к. токен для выполнения метода другим способом не получить (прямая авторизация не в счёт)).
Можно:
1) Попробовать определить установлено ли приложение на устройстве по наличию папки sdcard0/android/data/com.vkontakte.android
2) Поискать в гугле "Detect if app is installed on Android" и как-то воспроизвести сие в программе (имеется ввиду вариант с йунити).
3) Открыть "С помощью..." ВК ссылку. Знаю такое умеет Total Commander, что будет в данном случае не знаю))