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

26
在API 1.0中,我们可以使用users/profile_image/:screen_name
例如:http://api.twitter.com/1/users/profile_image/EA_FIFA_FRANCE 但在API 1.1中不再适用。
请问您有解决方案吗?
7个回答

51

如何获取屏幕名称? - Shajeel Afzal
谢谢@Simon,这是最简单的方法。 - Nishad Up
1
在移动设备上,该重定向已损坏,如果您正在尝试为客户端 Web 进行此操作,请注意。已报告错误此处 - Luke Taylor

34

用户的个人资料图片

好的,您想获得用户的个人资料图片。您需要查看Twitter REST API 1.1文档。这是您可以访问他们API的不同请求的列表(别担心,我会在稍后告诉您如何做到这一点)。

有多种方法可以获取用户的个人资料图片,但最显着的一个是:users/show。根据此文档,users/show方法:

  

返回有关通过必需的user_id或screen_name参数指定的用户的各种信息。如果可能,作者最新的推文将内联返回。

好吧,那么用户个人资料图片肯定就在其中某个地方了,对吧?

让我们来看一下使用users/show URL发出请求时,典型响应的情况(我们将使用我的个人资料作为示例)。

Example response for users/show from the twitter 1.1 api

我从底部剪切了一些内容,因为有很多要经过的数据。最重要的是,您将看到所需内容:

profile_image_url key

这是您需要访问的profile_image_url关键字。

那么,如何做到这一点?实际上非常简单。

经过身份验证的请求

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

我撰写了一篇Stack Overflow帖子,旨在帮助所有人轻松地向1.1 API进行身份验证请求。

使用它时,您将收到上面看到的响应。按照文章中的说明逐步操作,您可以在此处获取库(您只需要在项目中包含一个文件)。

基本上,先前的帖子解释了您需要执行以下操作:

  • 创建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。

希望这能稍微解决一些问题!


所以目前没有(已知的)未经身份验证的黑客/绕过方式可以访问他们的页面并获取链接,唉。 - Isaiah Turner
1
@IsaiahTurner 没有任何黑客行为,如果有的话,我相信你会告诉他们以便尽快修复漏洞 ;) 尽管如此,我已经尽可能地让它变得简单易懂了。 - Jimbo
哈哈,不,我想要的是一个黑客而不是让他们修补它。我讨厌API 1.1的这一部分。如果没有人提出更好的解决方案,似乎事情就会朝着这个方向发展,那么我会给你声誉。我想要这个的原因是在我的网站上有一个联系页面,其中包含自动更新以匹配我们的Twitter的个人资料图片。 - Isaiah Turner
1
我明白了,如果你想要一个hack,你不能只使用file_get_contents()来抓取你的实际Twitter页面,然后解析HTML以获取用户个人资料图片吗? - Jimbo
profile_image_url 可以被缓存吗?也就是说,如果我想让用户的 Twitter 头像显示在我的应用程序客户端上,应该让应用程序客户端进行 GET 请求,还是应该由服务器后端执行并将图像 URL 传递给应用程序? - Kar
显示剩余5条评论

2

我尝试了上述方法来获取个人资料链接,但对我无效。我认为这是因为Twitter从API v1.1更改为API v2.0。

我找到了一个简单的方法来获取个人资料链接。

我使用Twitter API v2中的用户查找 -> 按用户名查找用户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中的normal替换为尺寸。 更多详情请阅读此文

像这样:

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

投一票,帮助更多开发者。


1
你说你想使用Twitter API 1.1,但是你不想进行身份验证。 API v1.1不支持未经身份验证的请求。因此,请适应API更改。请参阅更新: 您可以通过向 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


0

正如之前的回答和评论所指出的:

  1. Twitter API v1.0已被弃用
  2. Twitter API v1.1需要OAuth验证
  3. 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 的翻译应该很简单。


-1

试一下这个

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

1
请查看此处:[链接]https://dev59.com/fGcs5IYBdhLWcg3w0HIa?rq=1[链接] - Osin
1
是的,但我不想通过我的应用程序连接。我更喜欢“无需身份验证”的方式。 - Steffi
1
@Steffi 使用新的API,您将需要连接到oAuth。有关更详细的响应,请参见:https://dev59.com/VGQn5IYBdhLWcg3wJ0e5#17057693 - Starboy

-2

我认为这些URL是稳定的。例如,路径上有/demo/,不是吗? - l2aelba
此URL中的“demo/”不是指演示图片,它只是一个词。这个功能非常稳定,没有任何问题。 - Avtandil Kavrelishvili
它已在生产环境中工作,您可以在您的项目中使用它。 - Avtandil Kavrelishvili

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