• 0
aleksej208

Как отправить фотографию в ВКонтакте?

Вопросы

Доброго времени суток уважаемые форумчане!

 

Прошу помощи с разработкой приложения, сам в этом деле не мастер, много еще не понимаю!
Имеется приложение project.zip где работает вход на ВК и Одноклассники, помогите реализовать отправку фото хотя бы для вк?

 

Думаю кому то тоже будет это интересно. Заранее огромное спасибо кто откликнулся!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 ответов на этот вопрос

  • 0

ОффТоп:

Не совсем по-адресу. С этим вопросом обратитесь, например, на http://hashcode.ru/

Загрузка файлов в ВК

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

ОффТоп:

Не совсем по-адресу. С этим вопросом обратитесь, например, на http://hashcode.ru/

Загрузка файлов в ВК

Хотя почему не в тему, ведь загрузка производится с помощью API

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Говорят нужно делать через POST запрос к API VK
Вопрос как состыковать с авторизацией и сделать отправку через Image а скажем не прописывая путь к диску где лежит изображение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Я уже писал в аналогичной теме, которую вы продублировали. Что нужно использовать Rest Client Library библиотеку, которая входит в состав Embarcadero RAD Studio XE5. Которая позволяет сделать все, что нужно для работы с сервисов ВКонтакте.

 

Остается дело за малым:

  1. Прочитать и разобраться, как работает REST Client Library
  2. Прочитать, какие запросы и в какое последовательности нужно вызывать у ВКонтакте API.  
  3. И выполнить запросы к сервису ВКонтакте, используя TRestRequest и TRestClient

P.S. Можно, конечно, идти по старинке и использовать обычные http запросы. Но это уже не удобно и громоздко, поскольку есть более высокоуровневые компоненты для работы с REST.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Я уже писал в аналогичной теме, которую вы продублировали. Что нужно использовать Rest Client Library библиотеку, которая входит в состав Embarcadero RAD Studio XE5. Которая позволяет сделать все, что нужно для работы с сервисов ВКонтакте.

 

Остается дело за малым:

  1. Прочитать и разобраться, как работает REST Client Library
  2. Прочитать, какие запросы и в какое последовательности нужно вызывать у ВКонтакте API.  
  3. И выполнить запросы к сервису ВКонтакте, используя TRestRequest и TRestClient

P.S. Можно, конечно, идти по старинке и использовать обычные http запросы. Но это уже не удобно и громоздко, поскольку есть более высокоуровневые компоненты для работы с REST.

Наткнулся вот на что http://www.webdelphi.ru/2013/09/delphi-xe5-rest-client-library/ но с контактом что то не срабатывает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Занимался я как-то этим делом и вот мои наработки (советую хотя бы прочитать про авторизацию на сайте 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 сек.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Доброго времени суток уважаемые форумчане!

 

Прошу помощи с разработкой приложения, сам в этом деле не мастер, много еще не понимаю!

Имеется приложение attachicon.gifproject.zip где работает вход на ВК и Одноклассники, помогите реализовать отправку фото хотя бы для вк?

 

Думаю кому то тоже будет это интересно. Заранее огромное спасибо кто откликнулся!

Я могу подсказать как добавить фото без использования API в "Одноклассники". Сразу оговорюсь, данный код мой и "оттачивал" я его долго и нудно, по-этому публикую его видоизмененным, практически без проверок на ошибки, без потоков, без регулярок и т.д. Как-то так =) Для ознакомления то что надо. Работает на любой платформе после мелких изменений. Загружает фото в "Личные фотографии".

Login OK.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Оф. демо проект с авторизацией на популярных сетях

docwiki.embarcadero.com/CodeExamples/XE6/en/RESTDemo_Sample

Изменено пользователем nek

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ребята, апну тему, т.к. вопрос все еще актуальный. Как же все-таки отправить файл?

В справке написано:

Цитата

Вызовите метод photos.getOwnerCoverPhotoUploadServer, чтобы получить адрес для загрузки фото. Необходимо указать координаты обрезки фотографии в параметрах crop_x, crop_y, crop_x2, crop_y2.

С этим методом проблем нет, получаю адрес, на который необходимо "скинуть" файл.

Мне не совсем понятен вот этот момент:

Цитата

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем photo. Это поле должно содержать изображение в формате multipart/form-data.

вот я получил адрес upload_url, как мне с помощью RestClient отправить файл ?

В компоненте RestClient есть поля ContentType и BaseUrl. Скажите, мне нужно изменить эти поля, например, в BaseUrl передавать upload_url, а в ContentType прописать: multipart/form-data, и потом уже отправлять данные ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

вот был рабочий пример, который постил на стену ВК картинку (сейчас вроде чуть изменили апи, но должно работать)

https://github.com/rzaripov1990/FMX.RESTLight

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Спасибо большое, ваш пример дал реальную помощь, чутка допилил под C++ :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От A. Sharif
      Возможно ли с помощью intent получить от какого-либо из официальных приложений Вконтакте/Фейсбук/Инст/Google access-token (через кол-бэк метод)?
      Предусматривается ли данная возможность этими приложениями? Если кто делал - приведите, пожалуйста, пример получения результата. 
    • От Равиль Зарипов (ZuBy)
      Доброго времени суток!
      Навеяно этой темой.
      Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас.
      Решил собрать аналогичный пример, только не использовать TREST***
      немного опишу, свою реализацию
      uAppSettings.pas - хранит описание вашего приложения созданного в ВК  FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст
      var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы
      var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется
      GitHub   TRESTLight.zip
    • От masmat
      Всем привет. Есть задача:
       
      Из моего приложения необходимо открыть группу ВКонтакте зная ее WEB адрес.
       
      Но! Открыть группу нужно в установленном на смартфоне приложении ВКонтакте, т.е. его нужно найти и открыть в нем группу, соответственно запустив приложение ВКонтакте.
      Если приложение не установлено, то нужно выдать сообщение об ошибке.
       
    • От Labian
      Всем привет!
      Возникла трудность при разработке приложения для iOS. Необходимо получить информацию о пользователе в VK методом "users.get"
       
      Использую REST для авторизации и запросов.
      При попытке выполнить запрос к https://api.vk.com/method/ возникает ошибка :
        First chance exception at $000178C8. Exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'
       
      Что нужно сделать чтоб работать с https на iOS?
       
      Delphi XE7 Update 1
       
       
       
    • От aleksej208
       Использую Indy для выполнения авторизации в Вконтакте, но код зависает после нажатия на кнопку. Что может быть не так?
      procedure TForm3.SpeedButton1Click(Sender: TObject); begin IdHTTP1.AllowCookies:=True; IdHTTP1.HandleRedirects:=true; try if Pos('выйти', IdHTTP1.Get('http://login.vk.com/?act=login&email=' + edit1.Text + '&pass=' + edit2.Text)) > 0 then   begin ShowMessage('Авторизация прошла успешно!') ;   Form2.Show;   end   else ShowMessage('Не удается войти.');   except   end; end;
    • От aleksej208
      Возникла небольшая проблемка,  после заполнения edit'ов выскакивают ShowMessage по два раза, в чем проблема, может напутал что то с if и else?
      Исходный проект: для форума fm.zip
      procedure TForm3.SpeedButton1Click(Sender: TObject); var PageData:string; Data: TStringList; begin if RadioButton1.IsChecked then //Авторизация для ВКОНТАКТЕ IdHTTP1.AllowCookies := True; IdHTTP1.HandleRedirects := True; IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0'; try if pos('выйти', IdHTTP1.Get('http://login.vk.com/?act=login&email=' + Edit1.Text + '&pass=' + Edit2.Text))>0 then begin ShowMessage('Авторизация прошла успешно!'); Form2.Show; IdHTTP1.CookieManager.CookieCollection.Clear end else begin ShowMessage('Не удается войти.'); IdHTTP1.CookieManager.CookieCollection.Clear; end; except on E: Exception do begin ShowMessage ('Error: ' + E.Message); Exit; end; end; if Radiobutton2.IsChecked then //Авторизация для Одноклассники IdHTTP1.AllowCookies := True; IdHTTP1.HandleRedirects := True; IdHTTP1.AllowCookies := True; IdHTTP1.HandleRedirects := True; IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0'; Data := TStringList.Create; Data.Add('fr.posted=set'); Data.Add('fr.needCaptcha='); Data.Add('fr.login='+edit1.Text); Data.Add('fr.password='+edit2.Text); Data.Add('button_login=Войти'); PageData := IdHTTP1.post('http://m.odnoklassniki.ru/dk?bk=GuestMain&st.cmd=main&_prevCmd=main&tkn=7080',Data); if Pos('logoff',pagedata) <> 0 then begin ShowMessage('Авторизация прошла успешно'); Form2.Show end else showmessage('Не удается войти.'); end;
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу