Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2015, 10:38   #1
Adult_Master
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 63
По умолчанию Авторизация в ВКонтакте

Здравствуйте !
Мне нужно организовать работу с ВК в своей программе:
1. Пользователь вводит логин/пароль
2. Получаем список альбомов пользователя
3. Получаем фотографии из выбранного альбома (превьюшки и полный размер)
В сети масса примеров, но большинство из них написаны еще под vkontakte.ru, так же смотрел в сторону VK API но все эксперименты привели к тому что для авторизации нужен TWebBrowser (для oAuth) либо одобренное приложение для Андроид.
1. Ипользование TWebBrowser не желательно (по крайней мере визуально)
2. На данный момент я зарегал StandAlone приложение получил ID + Secret

Есть ли у кого нибудь пример работы с VK без встроенного браузера имея только StandAlone ID ? (в идеале конечно использовать бы VK API + oAuth, но будут интересны и другие варианты ...)

P.S. среда разработки Delphi 2010, компонентов REST Client Library нет, да и как понял они тоже выводт форму с подверждением доступа.

Последний раз редактировалось Adult_Master; 17.07.2015 в 15:17.
Adult_Master вне форума Ответить с цитированием
Старый 17.07.2015, 20:02   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Я бы посоветовал API использовать. На Delphi примера нет, но если надо извращённый способ авторизации (работает после недавней обновы), то вот оно
Код:
const
  login = '********';
  pass = '********';
var
  response, lg_h: string;
  RegEx: TRegEx;
  rez: TMatchCollection;
begin
  IdHTTP1.HandleRedirects := true;
  response:= IdHTTP1.Get('http://vk.com/?_fm=index');
  RegEx := TRegEx.Create( 'name="lg_h" value="([a-z0-9]*?)" />', [roIgnoreCase]);
  rez := RegEx.Matches(response);
  lg_h := rez.Item[0].Groups[1].Value;

  response:= IdHTTP1.Get('http://login.vk.com/?act=login&email=' + login + '&pass=' + pass
    + '&lg_h=' + lg_h);
  if pos('выйти', response)>0 then
    showmessage('Авторизация ВК прошла успешно!')
  else
    showmessage('Авторизация ВК не прошла');
end;
На форме должен лежать компонент IdHTTP1
Со старыми Инди могут быть проблемы (не та кодировка, не сохранение печенек и прочее), в XE5 и XE8 работает

Если входить с неизвестного места, то может вылететь капча, чтобы немного остудить пыл (но не гарантировано), можно добавить параменты к авторизации, что-то типа
Код:
//дальше не Delphi, но видно что можно добавить
"http://login.vk.com/?act=login&al_frame=1&captcha_key=&lg_h=".$lg_h."&captcha_sid=&email=". EMAIL ."&expire=&from_host=vkontakte.ru&pass=". PASSWORD ."&q=1"
eoln вне форума Ответить с цитированием
Старый 18.07.2015, 04:17   #3
Adult_Master
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 63
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Я бы посоветовал API использовать. На Delphi примера нет, но если надо извращённый способ авторизации (работает после недавней обновы)
Вариант интересный, но как я понял заветный токен для дальнейшей работы с API тут не приходит в ответ ?
Хочется использовать более стабильный вариант, что бы в один прекрасный момент не пришлось в спешке искать новое решение и экстренно обновлять ПО, хотя судя по количеству ответов вариантов не так уж много ...пока отправил запрос в ВК на разрешение использовать прямую авторизацию.
Adult_Master вне форума Ответить с цитированием
Старый 18.07.2015, 20:51   #4
Adult_Master
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 63
По умолчанию

Как я понял вся эта котовасия с TRegEx только для того что бы получить lg_h ? У меня была идея попроще, но на этом же принципе, но дело в том, что если пользователь несколько раз ошибается при вводе пароля то капча вылазит полюбому.
Adult_Master вне форума Ответить с цитированием
Старый 18.07.2015, 23:22   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Да, это для lg_h.
Если выходит капча, можно её спарсить, показать пользователю в каком-нибудь всплывающем окне - пусть вводит. Введёное им отправлять в запросе.

Собственно, тут можно и TWebBrowser (а лучше какой-нибудь хром последней версии) имитировать, подсунуть ввод логина и пароля в своё окошко с красивой картинкой, а всю отправку и получение на Indy или Synapse переложить. Тут и oAuth2 и API будут (это я только в качестве идеи пишу)
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вконтакте авторизация Pasha_Sh Работа с сетью в Delphi 8 10.06.2012 16:45
Авторизация вконтакте sardox Работа с сетью в Delphi 9 22.04.2012 14:03
Вконтакте авторизация KoBRaAndrey Работа с сетью в Delphi 3 27.08.2010 19:34
Авторизация вконтакте Андрей.12 Работа с сетью в Delphi 5 05.08.2010 19:18
Авторизация на вконтакте.ру mustang007 Работа с сетью в Delphi 2 11.09.2009 08:19