2015-05-14 105 views
3

我正在使用Twitter-Kit/Fabric從twitter api獲取響應。它返回以下格式的JSON - https://dev.twitter.com/rest/reference/get/search/tweets在Swift中解析twitter api JSON

我查詢 - 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響應中提取鳴叫文本。

+0

您需要在此之前進行身份驗證嗎?我收到錯誤:錯誤的身份驗證數據。 (code 215)}) –

+0

我只想查詢$ AAPL的例子。我不想發佈或查看用戶時間表。我應該可以使用Fabric做到這一點,而無需使用戶登錄或任何正確的? –

回答

0

有一個與你的代碼 使用此代碼,它的工作最適合我,如果你正在使用Fabric,您可以創建鳴叫對象設定在某一功能的代碼上的按鈕操作

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)") 
      } 

     } 
+0

嗨!你能指出我的代碼中的錯誤嗎?我需要明白我做錯了什麼。 – rkmr

+0

要分享併發布推文,您首先必須啓動Twitter會話,以便應用程序確認用戶已登錄 –

+0

我已經這麼做了。我有一個匿名會話,發生在代碼的不同部分。我得到了twitter api的有效回覆,代碼運行到println(parsedResult)。然而,它解析了我遇到麻煩的文本和座標的json。 – rkmr

3

一個小錯誤使用TWTRTweet方法

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

響應它創建TWTRTweet實例從Twitter API JSON響應陣列的陣列。

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

您可以使用鳴叫對象的tableview來填充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; 
} 

編輯

斯威夫特,你可以做:

// 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

+0

嗨!自從我初學iOS開發並開始使用Swift以來,根本不熟悉Objective C。你能用swift代碼的幫助來解釋嗎? – rkmr

+0

@rkmr我添加了swift的代碼。 – NightFury

+0

這可以工作,但功能有限。即,您無法重新加載較舊的推文而無需製作自己的Controller類。我會建議TWTRTimelineViewController。儘管它並不完美,我已經在這裏打開了一些反對它的問題:https://twittercommunity.com/t/6-twtrtimelineviewcontroller-issues/51534 –