Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
Здравствуйте.

Написал на днях сринкшотер, хочу научится загружать свои скриншоты сразу в вк и получать на неё ссылку.

Сделал авторизацию, делаю запросы и тд, не проблема.
Но вот с загрузкой фоток.....

photos.getUploadServer
Возвращает адрес сервера для загрузки фотографий.

окей, не проблема.

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


Как собственно сделать этот multipart/form-data ?

Помогите пожалуйста))
22 окт 18, 23:42    [21711739]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47083

Tech N9ne
Как собственно сделать этот multipart/form-data ?

Прочитать соответствующий RFC на MIME не предлагать?..

Posted via ActualForum NNTP Server 1.5

23 окт 18, 00:24    [21711750]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3984
TIdMultiPartFormDataStream
http://www.programmersforum.ru/showthread.php?t=222701
23 окт 18, 00:57    [21711754]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
Ребята, делаю так.
{global var} Token, UserID, Otvet,  Response,ID_ALBUM, UPLOAD_URL, VK_SERVER, VK_PHOTOS_LIST, VK_HASH, VK_AID: string;

  FormData := TIdMultiPartFormDataStream.Create;

 FileName_S := form1.EDIT_PATH.Text + Form1.PREFIX.Text + IntToStr(0) + '.JPG'; // путь картинки
FormData.AddFile('file1', FileName_S , 'image/jpeg' );

    RESPONSE:= IDHTTP1.Post(UPLOAD_URL, FORMDATA);
     SMEMO1.Text := RESPONSE;

   FormData.Free;

   VK_SERVER := SO(smemo1.text).S['server'];
   VK_PHOTOS_LIST := SO(smemo1.text).S['photos_list'];
   VK_AID := SO(smemo1.text).S['aid'];
   VK_HASH := SO(smemo1.text).S['hash'];


       smemo1.Clear;
      Response := send('GET','https://api.vk.com/method/photos.save?album_id='+ ID_ALBUM +'&server=' +
      VK_SERVER + '&photos_list=' + VK_PHOTOS_LIST +'&hash=' + VK_HASH +'&' + token+'&v=5.87');
   sMemo1.Text := MyUtf8ToAnsi(Response);


Ответы от вк идут нормально, получаю хэш и тд, но с последним гет запросом проблема.
Ответ от вк:
{"error":{"error_code":100,"error_msg":"One of the parameters specified was missing or invalid: photos_list is invalid","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"photos.save"},{"key":"album_id","value":"257509163"},{"key":"server","value":"850220"},{"key":"photos_list","value":"[]"},{"key":"hash","value":"139d510540f7b3a80a5ae808360b711d"},{"key":"v","value":"5.87"}]}}

Ругается как я понял на photos_list. Посмотрел что мне даёт вк, когда я его получаю.... Там тупо скобочки []
Я их и передаю, как написано в документалке. Понять не могу, ватафак? ))
23 окт 18, 01:08    [21711755]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
photos_list параметр, возвращаемый в результате загрузки фотографий на сервер.
строка

по сути я не могу сохранить картинку которую загрузил.
Я получаю от вк этот параметр photos_list в нём это []
Я передаю то, что мне дал вк, как он этого и хотел. Но почему параметр не валидный? Что конкретно вк хочет получить?
Может что-то должно быть между скобками? Ну опять же, мне передаются пустые скобки почему-то.
23 окт 18, 01:28    [21711759]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
{"server":849536,"photos_list":"[]","aid":257509163,"hash":"47b814a6b45edb76f6549372cb6a97a1"}
Вот ответ в JSON, photos_list - пуст, только скобки.
как мне быть?(
23 окт 18, 01:31    [21711760]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
ОТБОЙ РЕБЯТА, я рак ппц.. . сменил путь каринки и всё получилось)) вторые сутки кодю, туплю)))) отдохнуть пора ....
тем не менее спасибо всем кто ответил !
23 окт 18, 01:45    [21711762]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
опять я))
не могу грузить картинки в вк, если у них русские символы в имени.
брал один и тот же скрин, переименовывал и проверял.

игрался с ANSITOUTF8 b наоборот... Пробовал функцию URLEncode, myutf8toansi... вобщем я не шарю в этом, просветите, что нужно сделать, что бы вк понял русские символы?

и да, путь к файлу лежит в переменной. Эти манипуляции с utf8, ansi... Их где делать :
 FileName_S :=   { ТУТ???? }   edit_path.Text + prefix.Text + inttostr(1) + '.JPG' ;
   FormData.AddFile('file1',    {  ИЛИ ТУТ???? }   FileName_S, 'image/jpeg' );


Люди, помогите пожалуйста))
23 окт 18, 02:58    [21711769]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
АААААРР!!!! мне кажется это либо idhttp либо multipartformdata.....
кодировка сраная, всю ночь на нее потратил, гугл перерыл, яндекс перерыл, перепробовал что мог - ничего не помогает!
спасайте ребята) на вас надежда)
я спать, больше не могу...
23 окт 18, 06:01    [21711788]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2662
для начала бы сообщил какой у тебя Delphi
23 окт 18, 06:08    [21711793]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
Tactical Nuclear Penguin
для начала бы сообщил какой у тебя Delphi

delphi7, win7 64
23 окт 18, 13:30    [21712278]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
инди обновлённая. 10.6.2
23 окт 18, 13:34    [21712285]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
Если я скопирую из окна кода, комментарии, которые на русском языке, они будут отображаться таким образом
ÓÇÍÀÅÌ ID ÀËÜÁÎÌÎÂ---- ÁÅÐ¨Ì ÏÅÐÂÛÉ ÏÎÏÀÂØÈÉÑß
В самой дельфе всё на русском, но при копировании куда либо, преврощяются в крокозябры. так и должно быть???
Может из-за этого я не могу перекодировать ?

delphi 7, indy 10.6.2, win7x64
23 окт 18, 14:42    [21712383]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
goldmi45
Member

Откуда:
Сообщений: 1116
Tech N9ne
Если я скопирую из окна кода, комментарии, которые на русском языке, они будут отображаться таким образом
ÓÇÍÀÅÌ ID ÀËÜÁÎÌÎÂ---- ÁÅÐ¨Ì ÏÅÐÂÛÉ ÏÎÏÀÂØÈÉÑß
В самой дельфе всё на русском, но при копировании куда либо, преврощяются в крокозябры. так и должно быть???
Может из-за этого я не могу перекодировать ?

delphi 7, indy 10.6.2, win7x64

Перед тем, как скопировать текст, переключитесь на русский язык, скопируйте в буфер обмена и вставьте в блокноте - кракозябры не должны появиться.
23 окт 18, 15:11    [21712413]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
Ребят, вот есть переменная FileName_S
В ней путь, к примеру D:/Скриншот_1.jpg
Что с ней сделать, что бы в отправке вк получала то, что ей надо? в плане кодировки..
23 окт 18, 15:38    [21712455]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4247
Tech N9ne
Ребят, вот есть переменная FileName_S
В ней путь, к примеру D:/Скриншот_1.jpg
Что с ней сделать, что бы в отправке вк получала то, что ей надо? в плане кодировки..
По идее просто указать путь к реальному файлу, в d7 в обычном ansi, это путь для библиотеки Indy.

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

тынц1

пырвые же ссылки
23 окт 18, 16:24    [21712497]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
  FormData := TIdMultiPartFormDataStream.Create;
// FileName_S := edit_path.Text + prefix.Text  + inttostr(1) + '.JPG' ; // D:/Скриншот_1.JPG
   FormData.AddFile('file1',  FileName_S  , 'image/jpeg' );
    RESPONSE:= IDHTTP1.Post(UPLOAD_URL, FORMDATA);
     SMEMO1.Text := RESPONSE;

Люди, ну комон, ну))

Пока что сделал обычное сохранение скриншота как мне надо
и сохранения специально для вк C:/VK.JPG
сохраняю в корень диска C:/ что бы 100% не было русских букв в папках. после удачной загрузки в вк, удаляю скриншот.

Нужно что-то делать с переменной, в которой находится путь, ведь там может быть не только скриншот с русскими буквами, но и папка, в которой он хранится, тоже может иметь русские буквы.
23 окт 18, 16:30    [21712504]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2662
переводи в utf8
23 окт 18, 16:32    [21712505]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47083

Tech N9ne
Нужно что-то делать с переменной, в которой находится путь, ведь там может быть не только
скриншот с русскими буквами, но и папка, в которой он хранится, тоже может иметь русские
буквы.

Если бы ты прочёл RFC, то знал бы, что имя папки ни в коем случае на сервер не передаётся.
Ну и что делать с русскими буквами в имени - тоже.

Posted via ActualForum NNTP Server 1.5

23 окт 18, 16:34    [21712507]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
kealon(Ruslan)
Tech N9ne
Ребят, вот есть переменная FileName_S
В ней путь, к примеру D:/Скриншот_1.jpg
Что с ней сделать, что бы в отправке вк получала то, что ей надо? в плане кодировки..
По идее просто указать путь к реальному файлу, в d7 в обычном ansi, это путь для библиотеки Indy.

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

тынц1

пырвые же ссылки

я не понял ничего по поводу казания файла.
я и так просто указываю существующий файл, и он грузится на сервер и сохраняется отлично. Если только нет русских букв в этой самой переменной. Вероятно кодировка.

про ссылку на multipartformdata, в ссылке что вы дали, вопрос не о том, что меня интересует.

Наверное мне нужно было создать новую тему? так как вопрос с multipartformdata решён.
23 окт 18, 16:35    [21712509]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
Tactical Nuclear Penguin
переводи в utf8


FileName_S := AnsiToUtf8(edit_path.Text + prefix.Text + inttostr(1)) + '.JPG' ;

Картинка с другого сайта.
23 окт 18, 16:39    [21712516]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
Dimitry Sibiryakov
Tech N9ne
Нужно что-то делать с переменной, в которой находится путь, ведь там может быть не только
скриншот с русскими буквами, но и папка, в которой он хранится, тоже может иметь русские
буквы.

Если бы ты прочёл RFC, то знал бы, что имя папки ни в коем случае на сервер не передаётся.
Ну и что делать с русскими буквами в имени - тоже.

Я проверил, кинул картинку с именем sss.jpg в папку с русскими буквами..
получилось так - D:/ВК/sss.jpg - фалй НЕ заливается на сервер вк.
если сделать так D:/VK/sss.jpg - файл успешно грузится.
Может сама инди не может прочитать путь?
23 окт 18, 16:43    [21712521]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4247
Tech N9ne
Может сама инди не может прочитать путь?
судя по твоему скрину - да
23 окт 18, 16:46    [21712526]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2662
Tech N9ne
Tactical Nuclear Penguin
переводи в utf8


FileName_S := AnsiToUtf8(edit_path.Text + prefix.Text + inttostr(1)) + '.JPG' ;

Картинка с другого сайта.


для D5 была такая функция

function EncodeUTF8(const Source: WideString): string;
var
 Index, SourceLength, CChar: Cardinal;
begin
 { Convert unicode to UTF-8 }
 Result := '';
 Index := 0;
 SourceLength := Length(Source);
 while Index < SourceLength do
 begin
   Inc(Index);
   CChar := Cardinal(Source[Index]);
   if CChar <= $7F then
     Result := Result + Source[Index]
   else if CChar > $7FF then
   begin
     Result := Result + Char($E0 or (CChar shr 12));
     Result := Result + Char($80 or ((CChar shr 6) and $3F));
     Result := Result + Char($80 or (CChar and $3F));
   end
   else
   begin
     Result := Result + Char($C0 or (CChar shr 6));
     Result := Result + Char($80 or (CChar and $3F));
   end;
 end;
end;


только передавай в нее widestring
23 окт 18, 17:02    [21712560]     Ответить | Цитировать Сообщить модератору
 Re: VK API Загрузка фотографии в альбом  [new]
Tech N9ne
Member

Откуда:
Сообщений: 161
Tactical Nuclear Penguin
для D5 была такая функция
только передавай в нее widestring

Картинка с другого сайта.

делал так
var FileName_S:WideString;
 FileName_S :=  edit_path.Text + prefix.Text  + inttostr(1)  + '.JPG' ;
   FormData.AddFile('file1', EncodeUTF8(FileName_S)   , 'image/jpeg' );
23 окт 18, 17:18    [21712579]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить