快速解析 twitter 趋势 api 结果

Posted

技术标签:

【中文标题】快速解析 twitter 趋势 api 结果【英文标题】:Parse twitter trend api results in swift 【发布时间】:2016-10-26 17:40:00 【问题描述】:

我使用 twitter 趋势 api 来获取所有趋势的名称。

我有以下设置:

let url =  "\(APIConstants.Twitter.APIBaseURL)1.1/trends/place.json?id=1"

    let client = TWTRAPIClient()
    let statusesShowEndpoint = url
    let params = ["id": "20"]
    var clientError : NSError?

    let request = client.urlRequest(withMethod: "GET", url: statusesShowEndpoint, parameters: params, error: &clientError)

    client.sendTwitterRequest(request)  (response, data, connectionError) -> Void in
        if connectionError != nil 
            print("Error: \(connectionError)")
        

        do 
            let json = try JSONSerialization.jsonObject(with: data!, options: [])

         catch let jsonError as NSError 
            print("json error: \(jsonError.localizedDescription)")
        


     

调用后,json有如下数据:

(

    "as_of": "2012-08-24T23:25:43Z",
    "created_at": "2012-08-24T23:24:14Z",
    "locations": [
      
        "name": "Worldwide",
        "woeid": 1
      
    ],
    "trends": [
      
        "tweet_volume": 3200,
        "events": null,
        "name": "#GanaPuntosSi",
        "promoted_content": null,
        "query": "%23GanaPuntosSi",
        "url": "http://twitter.com/search/?q=%23GanaPuntosSi"
      ,
      
        "tweet_volume": 4200,
        "events": null,
        "name": "#WordsThatDescribeMe",
        "promoted_content": null,
        "query": "%23WordsThatDescribeMe",
        "url": "http://twitter.com/search/?q=%23WordsThatDescribeMe"
      ,

      
        "tweet_volume": 2200,
        "events": null,
        "name": "Sweet Dreams",
        "promoted_content": null,
        "query": "%22Sweet%20Dreams%22",
        "url": "http://twitter.com/search/?q=%22Sweet%20Dreams%22"
      
    ]
  
)

根据上面的 json 数据,我想将所有 name 内的 trends 快​​速存储在一个数组中。

【问题讨论】:

【参考方案1】:

您需要进行一些数据检查和转换,以确保以您期望的结构取回数据,然后从那里进行简单的迭代。这些方面的东西应该会让你继续前进:

let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:Any]
var names = [String]()
if let trends = json?["trends"] as? [[String:Any]] 
    for trend in trends 
        if let name = trend["name"] as? String 
            names.append(name)
        
    

注意各种as? 类型检查以安全地迭代结构。如需更深入地了解如何在 Swift 中干净地使用 JSON,包括将数据读入类型安全的结构,请查看this official blog post from Apple。

【讨论】:

以上是关于快速解析 twitter 趋势 api 结果的主要内容,如果未能解决你的问题,请参考以下文章

Twitter REST API 与 Twitter Fabric - Twitter 核心

如何通过 twitter 的 Fabric API (Android) 获取用户数据

Twitter API wss 用于监控专用用户的关注

在 IOS 中解析 Twitter JSON 提要

python: [Errno 10054] 现有连接被远程主机强行关闭

Twitter关注者图片列表