2017-02-17 3 views
0

У меня есть приложение iOS (swift), в котором я могу войти в свою учетную запись google и получить токен доступа.Загрузка видео на youtube из приложения iOS возвращает 400

После получения токена доступа я делаю запрос на отправку на YouTube для загрузки видео.

Обнаружена ошибка заключается в следующем

{error = 
{code = 400; 
errors =({domain = global; 
location = part; 
locationType = parameter; 
message = \"Required parameter: part\"; 
reason = required;}); 
message = \"Required parameter: part\";};}" 

Ниже код, который я использую, чтобы сделать пост запрос.

func postVideoToYouTube(token: String, callback: @escaping (Bool) -> Void){ 
     if videoPath == nil { 
      return 
     } 
     var movieData: NSData? 
     do { 
      movieData = try NSData(contentsOfFile: (videoPath?.relativePath)!, options: NSData.ReadingOptions.alwaysMapped) 
     } catch _ { 
      movieData = nil 
      return 
     } 


     let headers = ["Authorization": "Bearer \(token)"] 
     let URL = try! URLRequest(url: "https://www.googleapis.com/upload/youtube/v3/videos", method: .post, headers: headers) 
     print("Video Data",movieData) 
     Alamofire.upload(multipartFormData: { multipartFormData in 
      multipartFormData.append(movieData as! Data, withName: "video", fileName: "video.mp4", mimeType: "application/octet-stream") 
     }, with: URL, encodingCompletion: { 
      encodingResult in 
      switch encodingResult { 
      case .success(let upload, _, _): 
       upload.responseJSON { response in 
        debugPrint("SUCCESS RESPONSE1: \(response)") 
       } 
      case .failure(let encodingError): 

       print("ERROR RESPONSE: \(encodingError)") 
      } 
     }) 
    } 

Ранее ошибка 403 запрещено, но я добавил «https://www.googleapis.com/auth/youtube.force-ssl» размаху и теперь я получаю 400.

Любая помощь будет оценена. Спасибо.

+0

В нем говорится, что в HTTP-запросе требуется параметр «часть», что говорит API Youtube для этого параметра и почему его нет в запросе? (Я уверен, что это не MultipartFormData, а какой-то другой параметр, который хочет Youtube) – zezioen

ответ

1

Эта линия в возвратном данных интересно:

Required parameter: part 

Это говорит о том, что параметр с именем part требуется, и вы не включили, что в вызове так, поэтому вы получаете сообщение об ошибке.

Если вы посмотрите на Youtube API description, вы можете увидеть описание параметра part.

Например

Параметр часть служит двум целям в этой операции. Он идентифицирует свойства, которые будет задана операция записи, а также свойства, которые будет включать ответ API.

И

Следующий список содержит названия элементов, которые можно включить в значение параметра и стоимости квот для каждой части:

  • contentDetails: 2

  • fileDetails: 1

  • ID: 0

  • liveStreamingDetails: 2

  • Локализации: 2

  • игрока: 0

  • processingDetails: 1

  • recordingDetails: 2

  • сниппет : 2

  • Статистика: 2

  • Статус: 2

  • предложения: 1

  • topicDetails: 2

OK..that не может сделать много но, к счастью, есть некоторые примеры.

Here - ссылка на пример с использованием python.

Если посмотреть на этом примере интересную часть (не каламбур) здесь:

# Call the API's videos.insert method to create and upload the video. 
insert_request = youtube.videos().insert(
    part=",".join(body.keys()), 

ОК, поэтому мы присоединяемся ключи, что называется body и заканчивается за время значение параметра part ,

Следующий вопрос ... как body определено?

body=dict(
    snippet=dict(
    title=options.title, 
    description=options.description, 
    tags=tags, 
    categoryId=options.category 
), 
    status=dict(
    privacyStatus=options.privacyStatus 
) 
) 

Итак ... ключи body должны быть snippet и status. Если вы посмотрите на допустимые значения, упомянутые в списке, описанном в «Следующий список, содержащий имена деталей, которые вы можете включить в значение параметра» выше в моем ответе, вы увидите как , так и status там, поэтому они выглядят действительными.

Итак, вы должны добавить параметр part, когда вы выполняете запрос POST в API YouTube. Значение этого параметра может быть snippet, status, но вы должны, вероятно, прочитать, что именно это означает, и следует ли использовать что-то еще.

Надеюсь, что вам поможет.

+0

Отлично. Я добавил фрагмент, и это работает как шарм. Спасибо –

+0

Добро пожаловать, рад, что у вас это работает – pbodsk

Смежные вопросы