如何使用 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
字段中获取图像。此方法需要id
或screen_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 获取用户访问令牌和访问密钥