【问题标题】:Insert a comment using the YouTube API and Alamofire使用 YouTube API 和 Alamofire 插入评论
【发布时间】:2018-10-28 22:48:23
【问题描述】:

感谢您抽出宝贵时间阅读本文。我对如何使用 YouTube API 插入评论感到困惑。我对使用 API 很陌生,所以我不太明白他们在documentation 中所说的内容。

我已经使用Google Sign-In for iOS 对用户进行了身份验证

"https://www.googleapis.com/auth/youtube.force-ssl"

这是插入评论所必需的。但是现在,我必须实际插入评论并且(就像我说过的那样)我不明白该怎么做,因为我必须在请求正文中提供资源。我使用 Alamofire 作为请求,使用 Swift 4 作为我的语言。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

标签: swift youtube-api alamofire youtube-data-api


【解决方案1】:

正如我在您的另一篇帖子 (Google API - Invalid Credentials) 中看到的,您知道如何发出经过身份验证的 Alamofire 请求。现在您需要构建一个合适的参数字典来满足 API 要求。我查看了 Youtube Data API 指南。

这是文档中提供的用于添加评论的 JSON 正文示例:

{
  "snippet": {
   "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
   "topLevelComment": {
    "snippet": {
      "textOriginal": "This video is awesome!"
    }
   },
   "videoId": "MILSirUni5E"
  }
 }

让我们根据上面的例子构建一个参数字典,它是一个嵌套字典:

let commentParams: Parameters = ["textOriginal": "This video is awesome!"]
let snippetParams: Parameters = ["snippet": commentParams]
let topLevelSnippet: Parameters = [
        "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
        "topLevelComment": snippetParams,
        "videoId": "MILSirUni5E"]

let allParams: Parameters = ["snippet": topLevelSnippet]

然后创建您的标头、您的请求并将参数传递给请求

let headers: HTTPHeaders = ["Authorization": "Bearer \(token)"]
// As API requires "part" is added as url parameter
let path = "https://www.googleapis.com/youtube/v3/commentThreads?part=snippet"
let request = Alamofire.request(path, method: HTTPMethod.post, parameters: allParams, encoding: JSONEncoding.default, headers: headers)

您应该检查哪些参数是强制性的,哪些不是,但我们的想法是根据他们的要求构建一个适当的参数字典。

【讨论】:

  • 再次感谢您的回答。你是我在 Stack Overflow 上遇到的最好的人。我收到错误消息:FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.})) 有什么想法吗?
  • 当响应不是有效的 json 时,通常会发生这种情况。有些服务会抛出不可读的错误,但我怀疑谷歌会给出这样的回应。您是否在使用为 Alamofire 制作的某种对象映射器,例如 SwiftyJSON?当调用错误的 url 并且服务不知道请求的含义,因此没有正确的响应时,也会发生这种情况。我会在家里再次检查网址是否正确。
  • 谢谢。我完全复制了您的代码,只是我更改了 channelId 和 videoId。我正在使用 Alamofire
  • 我想通了。而不是topLevelSnippet参数中的"topLevelComment": toplevelCommetParams,,我需要"topLevelComment": snippetParams,
  • 我的错,我错过了那个。没有测试就构建了字典。我接受了你的编辑。但很高兴它最终对你有用。
【解决方案2】:

改为像这样构建您的参数字典:

        let allParams: [String: Any] = [
            "snippet" : [
                "channelId" : "UC_x5XG1OV2P6uZZ5FSM9Ttw",
                "topLevelComment" : [
                    "snippet" : [
                        "textOriginal" : "this video is awesome",
                    ],
                    "videoId" : "MILSirUni5E",
                ]
             ]
        ]

【讨论】:

    猜你喜欢
    • 2015-08-23
    • 2017-11-29
    • 2016-09-05
    • 2015-09-20
    • 2019-08-11
    • 2018-01-26
    • 2020-01-03
    • 2016-08-27
    • 2016-09-11
    相关资源
    最近更新 更多