【问题标题】:Parsing twitter api JSON in Swift在 Swift 中解析 twitter api JSON
【发布时间】:2015-07-25 14:28:21
【问题描述】:

我正在使用 Twitter-Kit/Fabric 从 twitter api 获取响应。它返回以下格式的 JSON - https://dev.twitter.com/rest/reference/get/search/tweets

我的查询是 - https://api.twitter.com/1.1/search/tweets.json?q=""&geocode=lat,long,radius&count=15

我需要从 JSON 中提取文本和坐标,以便在地图上绘制这些推文。

下面的代码我做错了什么 - ?

Twitter.sharedInstance().APIClient.sendTwitterRequest(request) {
                    (response, data, connectionError) -> Void in
        if (connectionError == nil) {
            var jsonError : NSError?
            let parsedResult  =
            NSJSONSerialization.JSONObjectWithData(data,
                            options: nil,
                            error: &jsonError) as NSDictionary
            println(parsedResult)
            if let tweets = parsedResult["statuses"] as? NSDictionary {
               for tweetsDict in tweets {
                   let title = tweetsDict["text"] as NSString
                   println("text: \(title)")
                   let coordinates = tweetsDict["coordinates"]
                   println("coordinates: \(coordinates)\n")
               }
            }else {
                   println("Error: \(connectionError)")
             }

         }

我的代码一直运行到 println(parsedResult),因为我从 twitter api 获得了有效响应。但是,我无法从 JSON 响应中提取推文文本。

【问题讨论】:

  • 在此之前您需要进行身份验证吗?我收到错误:错误的身份验证数据。 (代码 215)})
  • 例如,我只想查询 $AAPL。我不想发布或查看用户时间线。我应该能够在不进行用户登录或任何操作的情况下使用 Fabric 做到这一点?

标签: ios json swift twitter


【解决方案1】:

如果您使用Fabric,您可以使用TWTRTweet 方法从响应中创建推文对象

+ (NSArray *)tweetsWithJSONArray:(NSArray *)array;

它从 Twitter API JSON 响应数组中创建一个 TWTRTweet 实例数组。

NSArray *tweetData = [TWTRTweet tweetsWithJSONArray:responseFromTwitter];
[tableview  reloadData];

您可以使用推文对象填充cellForRowAtIndexPath 中的表格视图。要返回推文单元格,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *cellID = @"TweetCell";


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];

        TWTRTweet *tweet = twitterResponse[indexPath.row];
        [(TWTRTweetTableViewCell *)cell configureWithTweet:tweet];

    return cell;
}

编辑

Swift 中,您可以这样做:

// Create an array of tweet model objects from a JSON array
tweetData = TWTRTweet.tweetsWithJSONArray(responseFromTwitter)
tableView.reloadData()

//create Tweet cells

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
      let tweet = tweetData[indexPath.row]
      let cell = tableView.dequeueReusableCellWithIdentifier(tweetTableReuseIdentifier, forIndexPath: indexPath) as TWTRTweetTableViewCell
      cell.configureWithTweet(tweet)

      return cell
  }

希望对你有帮助!

Reference taken from here

【讨论】:

  • 嗨!完全不熟悉 Objective C,因为我是 iOS 开发的初学者并开始使用 Swift。你能用swift代码解释一下吗?
  • 这可以工作,但功能有限。也就是说,如果不创建自己的 Controller 类,就无法重新加载较旧的推文。我会建议 TWTRTimelineViewController。虽然它并不完美,但我在这里提出了一些反对它的问题:twittercommunity.com/t/6-twtrtimelineviewcontroller-issues/…
【解决方案2】:

你的代码有一点错误 使用此代码最适合我,将此代码设置在按钮操作的某些功能中

 Twitter.sharedInstance().APIClient.sendTwitterRequest(request) {
                    (response, data, connectionError) -> Void in
        if (connectionError == nil) {
            var jsonError : NSError?
            let parsedResult  =
            NSJSONSerialization.JSONObjectWithData(data,
                            options: nil,
                            error: &jsonError) as NSDictionary
            println(parsedResult)
            if let tweets = parsedResult["status"] as? NSDictionary {
                 println(tweets)
               for tweetsDict in tweets {
                   let title = tweetsDict["text"] as NSString
                   println("text: \(title)")
                   let coordinates = tweetsDict["coordinates"]
                   println("coordinates: \(coordinates)\n")
               }
            }else {
                   println("Error: \(connectionError)")
             }

         }

【讨论】:

  • 嗨!你能指出我的代码中的错误吗?我需要了解我做错了什么。
  • 要分享和发布推文,您首先必须启动 Twitter 会话,以便应用程序确认用户已登录
  • 我已经这样做了。我有一个匿名会话,这发生在代码的不同部分。我从 twitter api 得到一个有效的响应,并且代码一直运行到 println(parsedResult)。然而,它正在解析我遇到问题的文本和坐标的 json。
  • 它不执行 IF 语句然后检查键值拼写是否正确,因为这些是错误的“状态”使用正确的拼写,然后告诉我...否则我会找到其他解决方案
  • 请贴出你得到的 json ......你将它存储在 Dictionary 中......它必须首先存储在 Array 中,这取决于 Json ..
猜你喜欢
  • 2012-11-09
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多