【问题标题】:Building Twitter profile image url with Twitter user id使用 Twitter 用户 ID 构建 Twitter 个人资料图片 url
【发布时间】:2013-08-25 06:12:09
【问题描述】:

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

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

这样的 url 中

<img src="https://twitter.com/users/profile_pic?user_id=123"> 有网址吗?

【问题讨论】:

    标签: twitter


    【解决方案1】:

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

    Official twitter documentation Profile Images and Banners

    示例

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

    将重定向到

    https://pbs.twimg.com/profile_images/875168599299637248/84CkAq6s.jpg
    

    【讨论】:

    • 请注意,如果您在移动浏览器上执行此操作,它将无法正确重定向。 twitter 尝试将所有人重定向到 m.twitter.com 的一部分
    • 小心!如果您这样做并且 screen_name 也已更改,那么 twitter 会将您的法师请求重定向到主页。如果您将这些直接弹出到 中,会变得一团糟
    • 背景图片有类似的网址吗?它不是您想象的 profile_background_image(它与 API 返回的键匹配)。
    • 今天似乎 twitter.com/TwitterEng/profile_image?size=original 没有加载并给出 Twitter 错误页面。
    • 我尝试访问我的头像https://twitter.com/Rashid_Jorvee/profile_image?size=original,但是显示错误Sorry, that page doesn’t exist!
    【解决方案2】:

    介绍在不使用 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+ 对其进行了测试,它没有任何问题。

    【讨论】:

    • 这很不错。感谢分享 avatars.io!
    • 似乎这个 API 需要一个秘密令牌才能“正确”使用。但是,它可以从哪里获得这些凭据?
    • Github 404 的链接
    • 也就是说,尽管他们的 Github 句柄消失了,但他们的 API 似乎可以正常工作。
    • Avatars.io 不再工作了。我已经发布了一个类似服务的新答案,该服务仍然有效:stackoverflow.com/a/62263395
    【解决方案3】:

    自 2020 年 6 月起,接受的答案和 avatars.io 都不再有效。这里有两个替代方案:

    unavatar.io

    (以前的 unavatar.now.sh)

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

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

    例如:

    &lt;img src="https://unavatar.io/twitter/jack" width="100" height"100" /&gt;

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

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


    twivatar.glitch.me

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

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

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

    例如:

    &lt;img src="https://twivatar.glitch.me/jack" width="100" height"100" /&gt;

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

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

    【讨论】:

    • 认为这很好并不会从 Twitter 返回实际的图像 URL,这意味着如果这个“服务”像 avatars.io 一样变暗,你是否又回到了原点。
    • @d70rr3s 你是对的,但提问者询问是否有他们可以使用的纯 URL 解决方案,而无需将实际图像 URL 存储在数据库中或进行 API 调用.因此,“从 Twitter 返回实际图像 URL”的唯一方法是执行 301 重定向,这意味着您仍然依赖该服务。但是,我已经更新了我的答案以包含多种选择,包括一种可以一键部署的选择,以防其中任何一种像 avatars.io 一样消失。希望有帮助!
    • 更新:看起来 unavatar.now.sh 已修复并已备份! @VictorMota
    【解决方案4】:

    您可以使用users/show method of the Twitter API 获取它——它完全按照您的描述进行。你给它一个ID或者网名,它会返回一堆数据,包括profile_image_url

    【讨论】:

    • 我也不想进行 api 调用。我想把 user_id 放在像&lt;img src="https://twitter.com/users/profile_pic?user_id=123"&gt; 这样的网址中,这可能吗?
    • 据我所知,这是不可能的——在过去的几年里,Twitter 对他们的 API 一直很讨厌
    【解决方案5】:

    根据@Cristiana214 的回答

    以下 PHP sn-p 可用于使 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

    不漂亮但有效。

    【讨论】:

      【解决方案6】:

      截至 2020 年 2 月 20 日,这似乎是不可能的。使用 API 似乎是目前唯一的选择。有关更多信息,请参阅我在这里打开的问题:Twitter profile picture images now blocked on most domains

      【讨论】:

        【解决方案7】:

        我用 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"));
        

        【讨论】:

          【解决方案8】:

          没有办法做到这一点。事实上,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

          【讨论】:

            【解决方案9】:

            好吧,我通过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”

            【讨论】:

              【解决方案10】:

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

              【讨论】:

              • _normal.png 之前的第二个哈希也是唯一的...这不起作用。
              猜你喜欢
              • 2012-07-18
              • 2014-09-15
              • 2011-02-14
              • 1970-01-01
              • 2022-10-18
              • 2013-04-29
              • 1970-01-01
              • 2013-07-01
              • 1970-01-01
              相关资源
              最近更新 更多