编辑:仍然经常检查这个,当我或其他人帮助我解决问题时将标记为已解决!
我正在尝试通过 Swift 使用 YouTube 的 REST API 将视频上传到 YouTube,但我很难弄清楚该怎么做。我目前有一个有效的 GET 请求。
我对应该如何构建 POST 请求 URL 以及文件位置在请求中的位置感到困惑。另外我认为我应该使用可恢复上传协议(protocol)?
两天来,我一直在努力浏览各种 API 和文档,感到绝望。
这是我的 GET 请求的工作代码。
func getRequestVideoInfo(){
// Set up your URL
let youtubeApi = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet%2C+statistics&id=AKiiekaEHhI&key=" + apiKey
let url = NSURL(string: youtubeApi)
// Create your request
let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
do {
if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? [String : AnyObject] {
print("Response from YouTube: \(jsonResult)")
}
}
catch {
print("json error: \(error)")
}
})
// Start the request
task.resume()
}
最佳答案
注意(截至 2019 年 10 月 6 日) YouTube 已将 API 配额减少到每天 10,000 个单位。这相当于在 24 小时内上传 4 个 YouTube 视频。如果您的应用程序用例依赖于上传许多 YouTube 视频,我强烈建议您重新考虑。你可以申请扩大你的每日配额,但众所周知,谷歌回复你的速度很慢,即使他们真的回复了。
是的,您需要在 YouTube 中创建应用/项目并使用 OAuth 2.0 Flow 将视频发布/插入到您获得授权访问权限的 channel 。
从 Google 获得访问 token 后
按如下方式使用 Alamofire:
func postVideoToYouTube(token: String, callback: Bool -> Void){
let headers = ["Authorization": "Bearer \(token)"]
let path = NSBundle.mainBundle().pathForResource("video", ofType: "mp4")
let videodata: NSData = NSData.dataWithContentsOfMappedFile(path!)! as! NSData
upload(
.POST,
"https://www.googleapis.com/upload/youtube/v3/videos?part=id",
headers: headers,
multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(data: videodata, name: "video", fileName: "video.mp4", mimeType: "application/octet-stream")
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseJSON { request, response, error in
print(response)
callback(true)
}
case .Failure(_):
callback(false)
}
})
}
像这样调用post函数:
postVideoToYouTube(accessToken, callback: { success in
if success { }
})
关于swift - 在 Swift 中将视频上传到 YouTube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35053431/