使用Twitter用户id构建Twitter配置文件图像url

使用Twitter用户id构建Twitter配置文件图像url,twitter,Twitter,是否有任何方法可以使用用户id或屏幕名称构建配置文件图像url?我在数据库中存储用户ID,但不想存储配置文件图像url 编辑: 我也不想进行api调用。我想把用户id放在一个url中,比如 是否有url来执行此操作 您可以使用--它完全按照您所描述的操作。您给它一个ID或屏幕名称,它会返回一组数据,包括profile\u image\u url对于1.1版,请使用 其中XXXXX是用户Id我使用了一种巧妙的方法 include('simple_html_dom.php'); $html=file

是否有任何方法可以使用用户id或屏幕名称构建配置文件图像url?我在数据库中存储用户ID,但不想存储配置文件图像url

编辑:
我也不想进行api调用。我想把用户id放在一个url中,比如

是否有url来执行此操作

您可以使用--它完全按照您所描述的操作。您给它一个ID或屏幕名称,它会返回一组数据,包括
profile\u image\u url

对于1.1版,请使用
其中XXXXX是用户Id

我使用了一种巧妙的方法

include('simple_html_dom.php');
$html=file\u get\u html('http://twitter.com/mnckry');
$img=array();
foreach($html->find('img.size73')作为$e)
$img[]=$e->src;
foreach($html->find('.profile header-inner')作为$e)
$img[]=str_replace(“)”,“”,str_replace(“url(“,”,$e->{'data-background-image'));
echo$img[0]//阿凡达
回声“
”; 回波端(img)//简介bg
这会给你类似的东西;


获得2个其他尺寸;对于大版本删除,对于小版本,用“正常”替换“大”是没有办法的。事实上,Twitter并不像facebook那样提供url(/?fields=picture)

问题是报告,但状态是:“WontFix”,请看:


使用API 1.1,您可以使用以下URL实现这一点:

示例

将重定向到


根据@Cristiana214的回答

下面的PHP代码片段可用于在移动设备上实现该技巧

由于twitter重定向到移动版的站点链接,例如在移动设备上断开

因此脚本获取重定向响应(到用户化身)提取地址,然后重定向页面本身

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的访问,它(在编写本文时)重新加载到


不漂亮但很有效。

介绍了无需使用Twitter API即可获取Twitter个人资料图像的最简单方法:

使用

正如@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+对它进行了测试,它的工作没有任何问题。

截至2020年2月20日,这似乎是不可能的。使用API似乎是目前唯一的选择。有关更多信息,请参见我在此处提出的问题:

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

不可用 可以从很多不同的地方获取图片,包括Twitter。将下面URL中的
[screen\u name]
替换为所需的Twitter用户名


例如:


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


我也不想进行api调用。我想把用户id放在像
这样的url中,有可能吗?据我所知,这是不可能的——Twitter在过去几年里对他们的API非常反感
\u normal.png
之前的第二个散列也是唯一的……这不会起作用。注意,如果你在移动浏览器上这样做,它不会正确重定向。twitter试图将所有人重定向到m.twitter.comCaution的一部分!如果你这样做,并且屏幕名称也改变了,那么twitter会将你的法师请求重定向到主页。如果你直接将这些图片弹出,会变得很混乱。背景图片是否有类似的URL?它不像你想象的那样是profile\u background\u图像(与API返回的键匹配)。今天它似乎没有加载并给出Twitter错误页面。我尝试访问我的profile图片
https://twitter.com/Rashid_Jorvee/profile_image?size=original
,但是,它显示错误
对不起,该页面不存在这很不错。感谢分享关于avatars.io的信息!似乎此API需要一个秘密令牌才能“正确”使用。但是,它可以从哪里获得这些凭证呢?他们的Github 404s的链接说,尽管他们的Github句柄消失了,但他们的API似乎还是可以工作的。Avatars.io不再工作了。我发布了一个类似服务的新答案,该服务仍然有效:Think this is nice不会从Twitter返回实际的图像URL,这意味着如果该“服务”像avatars.io那样变暗,那么您就回到了原点。@d70rr3s您是对的,但问问题的人问他们是否有唯一的URL解决方案,无需将实际图像URL存储在数据库中或进行API调用。因此,“从Twitter返回实际图像URL”的唯一方法是执行301重定向,这意味着您仍然依赖于该服务。然而,我已经更新了我的答案,包括多个备选方案,包括一个你可以一键部署的方案,以防其中任何一个像avatars.io一样消失。希望有帮助!这两种方法都不再有效:/
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]);
<img src="https://avatars.io/twitter/ruucm" alt="twt_profile" border="0" width="259"/>
    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"));