如何使用 Twitter API 1.1 获取用户图像?

Posted

技术标签:

【中文标题】如何使用 Twitter API 1.1 获取用户图像?【英文标题】:How to get user image with Twitter API 1.1? 【发布时间】:2013-01-28 00:28:03 【问题描述】:

在 API 1.0 中,我们可以使用users/profile_image/:screen_name

例如:http://api.twitter.com/1/users/profile_image/EA_FIFA_FRANCE

但是,它在 API 1.1 中不再起作用。

请问您有解决办法吗?

【问题讨论】:

【参考方案1】:

你也可以通过调用这种url来获取推特头像:

https://twitter.com/[screen_name]/profile_image?size=original

例如:https://twitter.com/VancityReynolds/profile_image?size=original

从这篇文章中得到信息:

https://twittercommunity.com/t/how-to-get-user-image-original-size-with-api-1-1/10187/14

【讨论】:

如何获取网名? 谢谢@Simon,这是最简单的方法 此重定向在移动设备上被破坏,以防您在客户端网络上尝试此操作。错误报告here【参考方案2】:

用户的头像

好的,所以您需要用户的个人资料图片。您需要查看twitter REST API 1.1 docs。这是您可以向其 API 发出的所有不同请求的列表(别担心,稍后我会了解如何您实际执行此操作)。

有多种方法可以获取用户的个人资料图片,但最值得注意的一种是:users/show。根据相关文档, users/show 方法:

返回由所需的 user_id 或 screen_name 参数指定的有关用户的各种信息。作者的最新推文将尽可能内联返回。

嗯,用户个人资料图片一定在某处,对吗?

让我们看一下对此类信息请求的典型响应,使用 users/show url(我们将以我的个人资料为例)。

我已经从底部截断了一些,因为有很多数据需要处理。最重要的是,您会看到自己需要什么:

这是您需要访问的 profile_image_url 键。

那么,你是如何做到这一切的呢?其实很简单。

经过身份验证的请求

正如您正确指出的那样,从 2013 年 6 月 11 日起,您不能再向 1.0 API 发出未经身份验证的请求或任何请求,因为它已被淘汰。所以 OAuth 是向 1.1 API 发出请求的方式。

我写了一个 stack overflow post,目的是帮助大家毫不费力地向 1.1 API 发出经过身份验证的请求。

当你使用它时,你会得到上面看到的响应。按照帖子说明,一步一步,你可以得到库here(你只需要在你的项目中包含一个文件)。

基本上,上一篇文章解释了您需要执行以下操作:

创建一个 Twitter 开发者帐户 从 twitter 获取一组唯一键(总共 4 个键)。 将您的应用程序设置为具有读/写访问权限 包括 TwitterApiExchange.php(库) 将您的密钥放入$settings 数组中 从文档中选择您的 URL 和请求方法(Post/Get)(我把链接放在上面!) 提出请求,就是这样!

一个实际的例子

我假设您按照上述帖子中的分步说明进行操作(包含漂亮的彩色图片)。这是您将用来获得所需内容的代码。

// Require the library file, obviously
require_once('TwitterAPIExchange.php');

// Set up your settings with the keys you get from the dev site
$settings = array(
    'oauth_access_token' => "YOUR_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
);

// Chooose the url you want from the docs, this is the users/show
$url = 'https://api.twitter.com/1.1/users/show.json';
// The request method, according to the docs, is GET, not POST
$requestMethod = 'GET';

// Set up your get string, we're using my screen name here
$getfield = '?screen_name=j7mbo';

// Create the object
$twitter = new TwitterAPIExchange($settings);

// Make the request and get the response into the $json variable
$json =  $twitter->setGetfield($getfield)
                 ->buildOauth($url, $requestMethod)
                 ->performRequest();

// It's json, so decode it into an array
$result = json_decode($json);

// Access the profile_image_url element in the array
echo $result->profile_image_url;

差不多了!很简单。还有users/lookup 有效地做同样的事情,但你可以:

根据传递给 user_id 和/或 screen_name 参数的逗号分隔值指定,为每个请求返回最多 100 个用户的完全水合用户对象。

如果您需要获取多个用户的详细信息,请使用它,但由于您只需要一个用户的详细信息,请使用 users/show 如上所述。

我希望能把事情弄清楚一点!

【讨论】:

所以没有(已知的)未经身份验证的黑客/绕过访问他们的页面并获取链接然后......叹息。 @IsaiahTurner 没有黑客攻击,如果有的话,我相信你会告诉他们,以便他们尽快修复漏洞;)不过,我已经尽力让你尽可能简单。 哈哈,不,我想要一个黑客而不是让他们修补它。我讨厌 API 1.1 的这一部分。如果没有人想出更好的解决方案,而这似乎就是前进的方向,我会给你代表。我想要这样做的原因是在我的网站上有一个联系页面,其中包含自动更新以匹配我们的 Twitter 的个人资料图片。 我明白了,如果你想要破解,难道你不能使用 file_get_contents() 抓取你的实际 Twitter 页面,然后解析用户个人资料图像的 html 吗? 我会试试的,虽然不太擅长网络开发,但至少我现在知道用谷歌搜索什么了。如果没有更好的答案,请享受 50 次代表。【参考方案3】:

您说您想使用 Twitter API 1.1,但您不想验证您的请求。 API v1.1 不支持未经身份验证的请求。因此请根据 API 更改进行调整。查看更新:

https://dev.twitter.com/blog/planning-for-api-v1-retirement https://dev.twitter.com/docs/rate-limiting/1.1

您可以从https://api.twitter.com/1.1/users/show.json 请求的profile_image_url 字段中获取图像。此方法需要idscreen_name。例如:

GET    https://api.twitter.com/1.1/users/show.json?screen_name=rsarver

在此处查看详细信息https://dev.twitter.com/docs/api/1.1/get/users/show

【讨论】:

【参考方案4】:

正如前面的答案和 cmets 指出的那样:

    Twitter API v1.0 已弃用 Twitter API v1.1 需要 OAuth OP (@Steffi) 不想进行身份验证

选择任意两个;这三个都是不行的。 @Jimbo 的答案是正确的(以及正确的方法),但不包括#3。扔掉#1意味着时光倒流。但是,我们可以扔掉#2,直接上源码:

curl -s https://twitter.com/EA_FIFA_FRANCE |
  sed -ne 's/^.*ProfileAvatar-image.*\(https:[^"]*\).*$/\1/p'

sed 命令只是说,找到包含“ProfileAvatar-image”的行并打印看起来像引用 URL 的子字符串。

这不如经过身份验证的 API 调用稳定,因为 Twitter 可能随时更改其 HTML,但它比处理 OAuth 更容易,而且没有官方速率限制!

PHP 的翻译应该直截了当。

【讨论】:

【参考方案5】:

我尝试了上述方法来获取个人资料 URL,但它对我不起作用。我认为是因为 Twitter 将 API v1.1 更改为 API v2.0。

我找到了一种获取个人资料 URL 的简单方法。

我在那里使用 Twitter API v2 User Lookup -> User by Username API 部分

代码示例:

https://api.twitter.com/2/users/by/username/user_name?user.fields=profile_image_url

例如:

https://api.twitter.com/2/users/by/username/TwitterDev?user.fields=profile_image_url

当然,您应该使用您的 Bearer Token 请求它才能正常工作。为此,我推荐一个名为 postman 的平台。对调用 API 很有帮助。

以上示例代码返回 JSON 如下:


"data": 
    "name": "Twitter Dev",
    "profile_image_url": "https://pbs.twimg.com/profile_images/1445764922474827784/W2zEPN7U_normal.jpg",
    "username": "TwitterDev",
    "id": "2244994945"

补充:

如果您希望个人资料图片尺寸更大。然后你可以在 URL 中用 size 代替 normal 。 For More Details read this one

像这样:

https://pbs.twimg.com/profile_images/1445764922474827784/W2zEPN7U_400x400.jpg

投票帮助更多开发者。 ?

【讨论】:

【参考方案6】:

试试这个

http://api.twitter.com/1/users/profile_image/twitter_account.xml?size=bigger

在 API 1.1 中,唯一的方法是连接您的应用程序,通过

检索用户
https://dev.twitter.com/docs/api/1.1/get/users/show

并在他的照片之后检索

profile_image_url

【讨论】:

查看这里[链接]***.com/questions/12560753/… 是的,但我不想通过我的应用程序连接。我更喜欢“不需要身份验证” @Steffi 使用新 API,您必须连接到 oAuth,以获得更详细的响应:***.com/questions/17049821/…【参考方案7】:

Hare 是一种获取 Twitter 头像的非常简单的方法。

http://res.cloudinary.com/demo/image/twitter_name/w_300/User_Name.jpg

这是我的个人资料图片: 大:http://res.cloudinary.com/demo/image/twitter_name/w_300/avto_key.jpg

小号:http://res.cloudinary.com/demo/image/twitter_name/w_100/avto_key.jpg

您可以通过这部分 URL 来调整大小 - w_100、w_200、w_500 等。

【讨论】:

我认为这些网址是稳定的。不是例子吗(我在路径上看到/demo/)? "demo/"在这个网址中不是Demo图片,只是一个词。这工作非常稳定,没有任何问题。 它在生产环境中工作,你可以在你的项目中使用它

以上是关于如何使用 Twitter API 1.1 获取用户图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过经典 ASP 使用 Twitter 获取搜索/推文 api 1.1

从 Twitter API V2 获取当前用户的信息

如何从推特获取用户名

如何使用 Twitter API 获取用户访问令牌和访问密钥

如何在不使用 Twitter API 1.1 的情况下检索 Twitter user_timeline

如何通过 twitter 的 Fabric API (Android) 获取用户数据