AndrewShmig / Vkontakte-iOS-SDK-LV

[iOS] Powerful & flexible Vkontakte iOS SDK Latest Version
79 stars 23 forks source link

Проблема с постингом на стену #61

Closed Friend-LGA closed 10 years ago

Friend-LGA commented 10 years ago

Здравствуй Андрей.

Перелопатил кучу инфы, перепробовал все SDK для контакта, так ни в одном и не получилось запостить на стену длинный текст.

Я так понимаю что проблема в ограничении длины GET запроса, и если отправить текст POST запросом то все должно быть нормально, я прав?

Если да, подскажи пожалуйста как это сделать, вот мой код (пример с цитатой из баша):

[rm wallPost:@{ @"owner_id" : @( [VKUser currentUser].accessToken.userID ),
                                     @"message" : @"111: ппц, сижу ржу дома, не могу успокоиться))\n222: чего там?\n111: короче стою сегодня курю около метро, после универа.ко мне подходит поцан и спрашивает спички. а я как раз утром из дома коробок прихватил. ну я ни слова не говорю, вытаскиваю из кармана, протягиваю.\n222: ))\n111: он так смотрит, грит, зажигалкой то удобнее\n111: я опять же молча лезу в тот же карман и достаю крикет\n111: он прикуривает, отдает зажигалку, смотрит на меня секунд десять и говорит типо в шутку какой карман удивительный, все что не попросишь, все есть, небось и конфеты есть\n222: тааак, я начинаю догадываться)\n111: ))))не поверишь, уже неделю ношу с собой несколько бон пари.\n111: я молча достаю из того же кармана леденец, он ошарашенно берет его, его глаза полны ужаса\n222: ппц, бедняга))\n111: после этого я говорю ему ты потратил все три своих желания, выкидываю сигарету, разворачиваюсь и ухожу" }];

выдает ошибку типа:

-[ASAAppDelegate VKRequest:parsingErrorOccured:]
2013-11-09 21:07:23.518 Project[4489:c07] Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Garbage at end.) UserInfo=0x75cfe00 {NSDebugDescription=Garbage at end.}

Хотя если посылать на стену текст меньшего объема, то проблем нет:

[rm wallPost:@{ @"owner_id" : @( [VKUser currentUser].accessToken.userID ),
                                     @"message" : @"111: ппц, сижу ржу дома, не могу успокоиться))\n222: чего там?\n111: короче стою сегодня курю около метро, после универа.ко мне подходит поцан и спрашивает спички. а я как раз утром из дома коробок прихватил. ну я ни слова не говорю, вытаскиваю из кармана, протягиваю.\n222: ))\n111: он так смотрит, грит, зажигалкой то удобнее\n111: я опять же молча лезу в тот же карман и достаю крикет" }];

Мучаюсь уже кучу времени, буду очень благодарен любой помощи.

AndrewShmig commented 10 years ago

@Friend-LGA интересно, да ограничения на размер ГЕТ реквеста есть, это проблема. Я сам с подобным столкнулся, когда попытался загрузить 5 изображения сразу. Насчет отправки текста ПОСТом вопрос, ибо значит надо отправлять в теле, а значит надо знать наименование поля формы, который будет отправляться, а этого неизвестно (в документации я ничего подобного не нашел к сожалению).

ichina commented 10 years ago

мне больно слышать что в этом sdk все запросы GET(((

AndrewShmig commented 10 years ago

@ichina ну начнем с того, что не все и вы решаете сами, какие запросы и как отправлять. Смотрите класс VKRequest.

AndrewShmig commented 10 years ago

@ichina Вот: https://github.com/AndrewShmig/Vkontakte-iOS-SDK-LV/blob/master/Project/Vkontakte-iOS-SDK-LV/VKConnector/VKRequest/VKRequest.h

AndrewShmig commented 10 years ago

@Friend-LGA а вот багрепорт связанный с изображениями: https://vk.com/bugs?act=show&id=58487857_11

ichina commented 10 years ago

ладн, на счет всех запросов, это мой косяк,давно не юзал ваш сдк, я просто судил из фразы "попытался загрузить 5 изображения сразу", мне кажется абсурдным пытаться аплоадить файлы GET запросами

AndrewShmig commented 10 years ago

@ichina дело не в загрузке файлов, а в последующем "подтверждении", а запрос на подтверждение отправляется ГЕТом (выше линк на баг)

Friend-LGA commented 10 years ago

Я на форумах Вконтакте читал, люди писали про ГЕТ и ПОСТ запросы так, будто бы для них нет проблемы отправить их в любом виде, может быть все-таки где-то есть документация, просто мы ее найти не можем... хотя это конечно маловероятно. Сейчас попробую найти ту тему...

AndrewShmig commented 10 years ago

@Friend-LGA есть подозрение, что все параметры можно просто в тело вставить и постом отправить. попробуйте с использованием VKRequest (не стоит забывать, что токен доступа тоже надо передать, ибо кастомный запрос).

Friend-LGA commented 10 years ago

https://vk.com/topic-1_24039123?offset=1660

Алексей Косюк Добрый день, подскажите, есть ли ограничение для message wall.post по размеру? начиная с определенного количества символов возвращает 400 Bad Request.

Андрей Макарушин Алексей, это не ограничение wall.post а ограничение GET ) используйте POST-запросы

AndrewShmig commented 10 years ago

@Friend-LGA попробуйте сделать так, как я вам предложил. Если с ПОСТом сработает, то я переведу все запросы в СДК на работу с ПОСТом, чтобы в дальнейшем не возникало проблем и не было неудобств.

ichina commented 10 years ago

а что именно вы хотите узнать про гет и пост запросы? если чисто идеологический смысл, то ГЕТ запросы используются чтобы просто получить инфу(типа получить список друзей, свой профиль, список фоток), ПОСТ запросы нужны чтоб СОВЕРШИТЬ какоенить действие, точнее именно СОЗДАТЬ( создать учеьную запись, создать пост, сохранить залитую фотку). Для действий которые подразумевают какиенить изменения, а не создания, использую PUT запросы( редактирование профиля, редактирование поста), и для действий подразумевающих удаление используют DELETE запросы

Friend-LGA commented 10 years ago

@AndrewShmig можете показать примерно как нужно это делать, а то я в этих запросам сам вообще не разбираюсь... вы имеете ввиду сюда загнать все параметры?

- (instancetype)initWithHTTPMethod:(NSString *)httpMethod
                               URL:(NSURL *)url
                           headers:(NSDictionary *)headers
                              body:(NSData *)body

или сюда?

- (instancetype)initWithRequest:(NSURLRequest *)request
AndrewShmig commented 10 years ago

@ichina вопрос мне? ликбез?) спасибо, но к чему это? @Friend-LGA тогда пару минут мне дайте, чтобы разобраться и протестировать.

Friend-LGA commented 10 years ago

@AndrewShmig да без проблем, я уже не один день над этой проблемой сижу, так что готов ждать и 10 минут и час и день, любая помощь с вашей стороны для меня бесценна в этом вопросе, нигде инфу нормальную накопать так и не смог :(

ichina commented 10 years ago

@AndrewShmig я просто пытался блеснуть своей эрудированостью, но видать не получилось((

AndrewShmig commented 10 years ago

@Friend-LGA Пожалуйста: https://vk.com/feed?w=wall58487857_3226 А вот код:

    NSString *params = [NSString stringWithFormat:@"owner_id=%@&access_token=%@&message=%@",
                                                  @([VKUser currentUser].accessToken.userID),
                                                  [VKUser currentUser].accessToken.token,
                                                  [@"111: ппц, сижу ржу дома, не могу успокоиться))\n222: чего там?\n111: короче стою сегодня курю около метро, после универа.ко мне подходит поцан и спрашивает спички. а я как раз утром из дома коробок прихватил. ну я ни слова не говорю, вытаскиваю из кармана, протягиваю.\n222: ))\n111: он так смотрит, грит, зажигалкой то удобнее\n111: я опять же молча лезу в тот же карман и достаю крикет\n111: он прикуривает, отдает зажигалку, смотрит на меня секунд десять и говорит типо в шутку какой карман удивительный, все что не попросишь, все есть, небось и конфеты есть\n222: тааак, я начинаю догадываться)\n111: ))))не поверишь, уже неделю ношу с собой несколько бон пари.\n111: я молча достаю из того же кармана леденец, он ошарашенно берет его, его глаза полны ужаса\n222: ппц, бедняга))\n111: после этого я говорю ему ты потратил все три своих желания, выкидываю сигарету, разворачиваюсь и ухожу" encodeURL] ];
    NSData *body = [params dataUsingEncoding:NSUTF8StringEncoding];
    VKRequest *wallPost = [[VKRequest alloc]
            initWithHTTPMethod:@"POST"
                           URL:[NSURL URLWithString:@"https://api.vk.com/method/wall.post"]
                       headers:@{}
                          body:body];
    wallPost.delegate = self;

    [wallPost start];

Спасибо за репорт кстати, завтра переведу СДК на использование ПОСТа, чтобы можно было постить подобные длинные вещи.

Friend-LGA commented 10 years ago

@AndrewShmig Спасибо большое! Рад что не зря написал :)

AndrewShmig commented 10 years ago

@Friend-LGA было бы за что :) Исправлю завтра.

AndrewShmig commented 10 years ago

@ichina кстати, насчет вашего комментария: я использовал везде ГЕТ только потому, что тогда было лень для каждого метода определять ГЕТ или ПОСТ использовать, поэтому взял как из доков ВК - ГЕТ. Теперь же понял, что ошибся, поэтому переведу все методы на использование ПОСТа, от чего собственно не измениться работа методов, но решатся подобные проблемы.

Так что ваш ликбез в тему. Насчет вот ПУТов или ДЕЛИТов сами понимаете, сидеть над каждым методом и определять ПОСТом ли, ГЕТом ли, ПУТом ли или ДЕЛИТом не комильфо, поэтому их и не использую (именно здесь). Так-то я с вами согласен, что красивее и правильней с ними.

AndrewShmig commented 10 years ago

@Friend-LGA Теперь вы можете вот таким образом постить на стену:

    VKRequestManager *rm = [[VKRequestManager alloc]
                                              initWithDelegate:self
                                                          user:[VKUser currentUser]];

    [rm wallPost:@{
            @"message": @"111: ппц, сижу ржу дома, не могу успокоиться))\n222: чего там?\n111: короче стою сегодня курю около метро, после универа.ко мне подходит поцан и спрашивает спички. а я как раз утром из дома коробок прихватил. ну я ни слова не говорю, вытаскиваю из кармана, протягиваю.\n222: ))\n111: он так смотрит, грит, зажигалкой то удобнее\n111: я опять же молча лезу в тот же карман и достаю крикет\n111: он прикуривает, отдает зажигалку, смотрит на меня секунд десять и говорит типо в шутку какой карман удивительный, все что не попросишь, все есть, небось и конфеты есть\n222: тааак, я начинаю догадываться)\n111: ))))не поверишь, уже неделю ношу с собой несколько бон пари.\n111: я молча достаю из того же кармана леденец, он ошарашенно берет его, его глаза полны ужаса\n222: ппц, бедняга))\n111: после этого я говорю ему ты потратил все три своих желания, выкидываю сигарету, разворачиваюсь и ухожу"
    }];
Friend-LGA commented 10 years ago

@AndrewShmig Спасибо :)