Twitter API响应并不总是像预期的那样返回实体媒体


Twitter API response not always returning entities media as expected

考虑使用abraham/twitteroauth PHP库检索Twitter用户收藏列表的调用:

https://api.twitter.com/1.1/favorites/list.json

给定以下参数:

$params = array(
    'screen_name' => $screenName,
    'count' => $count,
    'include_entities' => true,
);

尽管所有请求的tweet实际上都在Twitter站点上显示/嵌入照片,但在entities父字段中期望找到的相关media字段并不总是存在于API响应中。

这是一条tweet的响应包含该字段,而另一条tweet的响应不包含该字段。您将在此Gist中找到各自的JSON响应:https://gist.github.com/davidloubere/8331a2b523772d99c669e1e720aa4afc

有人能解释一下吗?

这是因为最近Twitter宣布REST API更改,引入了两种tweet类型:

  • Classic Tweet -一个Tweet对象,其中文本的总长度
    内容不超过140个字符
  • Extended Tweet -一个包含隐藏实体的Tweet对象(例如,前面的@提及和后面的附件),其中
    文本内容长度超过140个字符。

他们还引入了Compatibility模式,这是使用Twitter REST API时的默认模式。还有Extended,您应该显式设置。

从https://dev.twitter.com/overview/api/upcoming-changes-to-tweets:

文档中引用

"将有两种模式将Tweet JSON对象渲染到API客户端:兼容模式和扩展模式。兼容模式为公共REST和流api以及Gnip的默认模式产品,并旨在不打破现有的客户。…的截断版本Tweet文本,后跟一个省略号、一个空格和一个缩短的自永久链接URL. ...现有实体字段(提及、url、媒体等),将只包含完全包含在文本值中。"

所以,第一个Tweet是Classic,第二个是Extended,当你在Compatibility mode中获取它时被截断。你可以通过在你的Twitter REST API调用中设置tweet_mode=extended来获得它的完整版本。