41

有没有办法使用用户 ID 或屏幕名称构建个人资料图片网址?我将用户 ID 存储在数据库中,但我不想存储个人资料图片网址。

编辑:
我也不想进行 api 调用。我想把 user_id 放在一个像

<img src="https://twitter.com/users/profile_pic?user_id=123">有网址可以做到这一点吗?

4

10 回答 10

94

使用 API 1.1,您可以使用以下 URL 实现此目的:

官方推特文档 个人资料图片和横幅

例子

https://twitter.com/TwitterEng/profile_image?size=original

将重定向到

https://pbs.twimg.com/profile_images/875168599299637248/84CkAq6s.jpg
于 2015-05-19T09:49:46.013 回答
22

自 2020 年 6 月起,已接受的答案和 avatars.io 都不再有效。这里有两种选择:

unavatar.io

(以前的 unavatar.now.sh)

Unavatar可以从很多不同的地方获取图片,包括 Twitter。[screen_name]用你想要的 Twitter 用户名替换下面的 URL。

<img src="https://unavatar.io/twitter/[screen_name]" />

例如:

<img src="https://unavatar.io/twitter/jack" width="100" height"100" />

如果上面的演示停止工作,可能是因为 unavatar.io 不再可用。

Unavatar 是开源的,所以如果它出现故障,您可以从GitHub存储库自行部署它——它甚至有“部署到 Vercel/Heroku”按钮。获取 Twitter 头像的代码在这里,因此您也可以将其用作您自己的后端的一部分。


twivatar变种me

⚠️ 自 2021 年 7 月起,此选项不再有效,请参阅上面的选项!

如果你想要一个替代方案,你也可以使用twivatar.glitch.me[screen_name]用你想要的 Twitter 用户名替换下面的 URL。

<img src="https://twivatar.glitch.me/[screen_name]" />

例如:

<img src="https://twivatar.glitch.me/jack" width="100" height"100" />

如果上面的演示停止工作,可能是因为 twivatar.glitch.me 不再可用。

顺便说一句,我没有建立这些服务,它们都是由其他人制作的。

于 2020-06-08T13:37:43.017 回答
21

介绍在不使用 Twitter API 的情况下获取 Twitter 个人资料图片的最简单方法:

使用http://avatars.io/

正如@AlexB,@jfred 所说,它在移动设备上根本不起作用。

在您的单个页面中使用 PHP 或 JavaScript 等通用框架获取重定向 URL 是一种相当困难的方法。

只需调用http://avatars.io/twitter/ruucm您的图像标签,例如

<img src="https://avatars.io/twitter/ruucm" alt="twt_profile" border="0" width="259"/>

我已经用 Angular 2+ 对其进行了测试,它可以正常工作。

于 2017-08-01T18:24:50.310 回答
3

截至 2020 年 2 月 20 日,这似乎是不可能的。使用 API 似乎是目前唯一的选择。有关更多信息,请参阅我在此处打开的问题:Twitter 个人资料图片图像现在在大多数域中被阻止

于 2020-02-21T00:08:58.370 回答
2

您可以使用users/showTwitter API 的方法获得它——它完全按照您的描述进行。你给它一个 ID 或屏幕名称,它会返回一堆数据,包括profile_image_url.

于 2013-08-22T13:35:17.237 回答
2

基于@Cristiana214 的回答

以下 PHP 片段可用于使https://twitter.com/[screen_name]/profile_image?size=normal技巧在移动设备上工作。

由于 Twitter 重定向到网站链接的移动版本,例如https://twitter.com/[screen_name]/profile_image?size=normal在移动设备上被破坏

所以脚本获取重定向响应(对用户头像)提取地址然后重定向页面本身

if (!isset($_GET['id'])) $_GET['id'] = 'twitter';
$urlget = curl_init();
curl_setopt($urlget, CURLOPT_URL, 'https://twitter.com/' . $_GET['id'] . '/profile_image?size=normal'); 
curl_setopt($urlget, CURLOPT_HEADER, true);
curl_setopt($urlget, CURLOPT_RETURNTRANSFER, 1); 
$res = curl_exec($urlget);
preg_match_all("/location: (.*)/", $res, $found);
header('Location: ' . $found[1][0]);

所以这可以作为 twitteravatar.php?id=twitter 访问,它(在撰写本文时)重新加载到https://pbs.twimg.com/profile_images/767879603977191425/29zfZY6I_normal.jpg

不漂亮但有效。

于 2017-01-06T23:31:30.257 回答
1

我用 C# 找到了这样的解决方案:

    public string Text_toTextFinder(string text, string Fromhere, string Here)
    {
        int start = text.IndexOf(Fromhere) + Fromhere.Length;
        int finish = text.IndexOf(Here, start);
        return text.Substring(start, finish - start);
    }
    string getPhotoURL(string UserName, string size ="x96")
    {
        using (WebClient client = new WebClient())
        {
            client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
            string htmlCode = client.DownloadString("https://twitter.com/" + UserName);
            return Text_toTextFinder(Text_toTextFinder(htmlCode, "<td class=\"avatar\">", "</td>"), "src=\"", "\"").Replace("normal",size);
        }
    }

用来:

MessageBox.Show(getPhotoURL("screen_name")); //size = 96x96
MessageBox.Show(getPhotoURL("screen_name","normal"));
MessageBox.Show(getPhotoURL("screen_name","200x200"));
MessageBox.Show(getPhotoURL("screen_name","400x400"));
于 2020-08-29T21:20:41.313 回答
-1

没有办法做到这一点。事实上,Twitter 并没有像 facebook 那样提供一个 url 来做到这一点(https://graph.facebook.com/ /?fields=picture )

问题是报告,但状态是:'WontFix',看看:

https://code.google.com/p/twitter-api/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Stars%20Type%20Bug%20Status%20Summary%20Opened%20Modified%20Component&groupby=&sort= &id=242#makechanges

于 2014-08-25T15:05:58.340 回答
-2

好吧,我通过PHP Dom Parser使用了一种棘手的方法

include('simple_html_dom.php');
$html = file_get_html('http://twitter.com/mnckry');
$img = array();

foreach($html->find('img.size73') as $e)
    $img[] = $e->src;

foreach($html->find('.profile-header-inner') as $e)
    $img[] = str_replace("')", "", str_replace("url('", "", $e->{'data-background-image'}));



echo $img[0];//Avatar
echo "<br>";
echo end($img);//ProfileBG

这会给你这样的东西; https://pbs.twimg.com/profile_images/378800000487958092/e04a191de329fcf8d000ca03073ad594_bigger.png

获得 2 个其他尺寸;对于大版本删除,“_bigger”对于较小版本将“_bigger”替换为“_normal”

于 2014-03-06T12:10:57.580 回答
-6

对于 1.1 版,使用 http://a0.twimg.com/profile_images/XXXXX/afpecvf41m8f0juql78p_normal.png 其中 XXXXX 是用户 ID

于 2013-11-28T10:34:06.460 回答