Twitter API文本字段值被截断

87

为什么文本框的值会被截断,我如何获取完整的值。目前,我正在尝试以下方式来获取文本框的值:

为什么文本框的值会被截断,我该如何获得完整的值?目前,我试图按照以下方法获取文本框的值:

do {
       if let responseObject = try NSJSONSerialization.JSONObjectWithData(response, options: []) as? [String:AnyObject],
           arrayStatuses = responseObject["statuses"] as? [[String:AnyObject]] {
               let arrTweets:NSMutableArray = NSMutableArray()
               for status in arrayStatuses {
                   let text = status["text"]!
                   print(status["text"]!)
               }
       }
}

输出是

RT @WarfareWW: #俄罗斯/#印度可能会在今年年底从Su-30MKI上发射BrahMos巡航导弹,对海上/地面目标进行打击 https://…

行末的三个点。我需要完整地打印文本,不截断。

Twitter样例搜索结果JSON数据

{
      "created_at": "Mon Aug 01 08:07:43 +0000 2016",
      "id": 760024194079916032,
      "id_str": "760024194079916032",
      "text": "RT @khalidasopore: #KEXIT #KASHEXIT #KashmirKillings #Inida #Pakistan Just trend it my dear Indians to save #Kashmir from Pak Goons https:/…",
      "truncated": false
}

你能证明你得到了正确的字符串响应吗?可以在网页上展示请求响应吗? - Lu_
如果 UILabel 的高度和宽度是固定的,它们将截断文本,您可能还需要设置 label.numberOfLines = 0。否则,请根据 @Lu_ 的评论提供一个 JSON 示例。 - Wez
这不仅仅是UILabel的问题,甚至print()函数也会截断字符串。 - Sheshnath
请提供一些证明,比如在网页中展示JSON之类的东西。保存到变量时截断字符串并不正常。 - Lu_
具体来说,这是Twitter的hashtag搜索API响应,我已经更新了我的问题,并附上了JSON。 - Sheshnath
3个回答

194

最近Twitter API已经进行了更改,以支持关于280个字符限制的新规则。

  1. 要获取推文的完整文本,请将参数tweet_mode设置为extended并添加到您的请求参数中。
  2. JSON响应中的text字段已被替换为full_text

更多信息请参见:https://dev.twitter.com/overview/api/upcoming-changes-to-tweets


1
在Java Spark Streaming应用程序中,我应该在哪里设置tweet_mode参数?我有一个与监听器一起工作的FilterQuery - sirdan
43
不确定为什么 Twitter 没有将此包含在其官方 API 文档中。感谢 Stack Overflow。 - Dalin
这很有帮助,我现在可以获得full_text属性,但它仍然在大约210个字符处截断。 - TroySteven
5
官方文档过时成这样,真是太可笑了。谁会用“博客文章”来更新他们的API文档呢? - Marcos Pereira
非常感谢!我一直在尝试为Twitter机器人实现垃圾邮件过滤功能,并深入了解到我没有从Twitter API中获得完整的文本响应。实施这个功能后,一切都正常工作了。 - rishuverma

34

这个例子中的状态是一条转推,即使包括tweet_mode=extended,转推的文本也会被截断为140个字符。原始推文的完整文本在JSON响应的retweeted_status字段中。这是你想要的:

let text = status["retweeted_status"]["full_text"]

请记住,在请求中仍应包含tweet_mode=extended


今天转推仍然被截断,但是如果您在API调用中包含expansions=referenced_tweets.id,它可以为您提供原始推文的ID以直接查找,这将在text下提供完整的推文文本。 - tayler6000

0

这对我有用!

 tweets = api.search_tweets(q=search_term, tweet_mode='extended', count=tweet_amount)

for tweet in tweets:
    # check if the tweet is a retweet
    if tweet.full_text.startswith('RT @'):
    # if the tweet is a retweet, use the retweeted_status attribute
        full_text = tweet.retweeted_status.full_text
    else:
        full_text = tweet.full_text

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接