in common/src/main/scala/com/gu/media/youtube/YouTubeUploader.scala [20:55]
def startUpload(title: String, channel: String, id: String, size: Long): String = {
val contentOwnerParams = s"onBehalfOfContentOwner=${youTube.contentOwner}&onBehalfOfContentOwnerChannel=$channel"
val params = s"uploadType=resumable&part=snippet,statistics,status&$contentOwnerParams"
val endpoint = s"https://www.googleapis.com/upload/youtube/v3/videos?$params"
val videoTitle = s"$title-$id".take(70) // YouTube character limit
val json = JsObject(Seq(
"snippet" -> JsObject(Seq(
"title" -> JsString(videoTitle)
)),
"status" -> JsObject(Seq(
"privacyStatus" -> JsString("unlisted")
)),
"onBehalfOfContentOwner" -> JsString(youTube.contentOwner),
"onBehalfOnContentOwnerChannel" -> JsString(channel)
))
val body = RequestBody.create(JSON, Json.stringify(json))
val request = new Request.Builder()
.url(endpoint)
.addHeader("Authorization", "Bearer " + youTube.accessToken())
.addHeader("X-Upload-Content-Length", size.toString)
.addHeader("X-Upload-Content-Type", "video/*")
.post(body)
.build()
YoutubeRequestLogger.logRequest(YoutubeApiType.UploadApi, YoutubeRequestType.StartVideoUpload)
val response = http.newCall(request).execute()
if(response.code() == 200) {
response.header("Location")
} else {
throw new IllegalStateException(s"${response.code()} when starting YouTube upload: ${response.body().string()}")
}
}