Twitter API响应并非总是按预期返回实体媒体

Dav*_*vid 2 php twitter

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

https://api.twitter.com/1.1/favorites/list.json
Run Code Online (Sandbox Code Playgroud)

给定以下参数:

$params = array(
    'screen_name' => $screenName,
    'count' => $count,
    'include_entities' => true,
);
Run Code Online (Sandbox Code Playgroud)

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

这是一条鸣叫,其响应包括该字段,而另一条其响应不包括该字段。您将JSON在此要点中找到相应的响应:https : //gist.github.com/davidloubere/8331a2b523772d99c669e1e720aa4afc

有人对此有解释吗?

Ser*_*dev 6

发生这种情况是因为最近Twitter宣布了REST API更改,引入了两种Tweets类型:

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

他们还介绍了Compatibility使用Twitter REST API时默认的模式。还有Extended应该明确设置的地方。

引用位于https://dev.twitter.com/overview/api/upcoming-changes-to-tweets上的文档:

“将两种Tweet JSON对象呈现给API客户端的模式:兼容模式和扩展模式。兼容模式是公共REST和Streaming API和Gnip产品的默认模式,旨在不破坏现有客户端。现有的文本字段将包含Tweet文本的截断版本,后接省略号,空格和缩短的自永久链接URL ....现有的实体字段(提及,网址,媒体等)将只包含完全包含在文本值内的实体。”

因此,第一个Tweet为Classic,第二个为Tweet ,Extended当您在中获取它时会被截断Compatibility mode。您可以通过tweet_mode=extended在Twitter REST API调用中进行设置来获取其完整版本。