Tumblr图片的URL架构是什么?

25
在Tumblr上,图像文件的架构是什么?(我不是指HTTP协议) 我只知道存储图像的服务器域名为.media.tumblr.com,其中是介于1和31之间的数字,并且图像文件名以“tumblr_”为前缀。 我提问是因为我想找到引用同一图像的URL。 编辑:我还要处理来自其他来源的URL。
2个回答

54

概述

当您上传图像到Tumblr时,他们会在其网络中生成并存储同一图像的多个尺寸。

上传后,您可以使用模板标签 请求以下尺寸的图像:751002504005001280

值得一提的是:

  1. 模板标签中的值是所请求图像的最大尺寸。例如:图像的400版本的宽度/高度可能在251px400px之间。
  2. 可能没有高分辨率1280版本的可用图像。如果原始图像小于500px,则不会生成1280版本。
  3. 照片集不会生成100版本。

图像URL

图像URL将是以下两种情况之一。第一个URL似乎与6个月前上传的图像相关联(这只是一个猜测),第二个URL似乎是用于更新的图像:

http://36.media.tumblr.com/tumblr_o4qxa0n2BP1r6ec7zo1_500.jpg
或者
http://36.media.tumblr.com/83099a60d4e0cbeeb30d90394e222878/tumblr_o4qxa0n2BP1r6ec7zo1_500.jpg

URL模式

这可以分为三部分,两个变量和一个常量。

  1. http://36
  2. .media.tumblr.com/83099a60d4e0cbeeb30d90394e222878/tumblr_o4qxa0n2BP1r6ec7zo1
  3. _500.jpg

1 这是一个服务器号码,每个图像大小可能会不同。 AFAIK无法保证所有服务器上都有可用的图片尺寸。 @Ally在评论中提到您可以从URL中删除此部分,仍然可以找到图像。
2 这是Tumblr子域,目录(如果适用)和部分文件名。 对于所有大小,这将是相同的。
3 这是所请求的大小(与模板标记匹配)和文件扩展名。

使用模板标记生成所有可用大小的URL。

我发现唯一可靠的方法是使用相应的模板标记并将它们分配给一个data-属性。

示例模板代码:

<img src="{PhotoURL-100}" data-250u="{PhotoURL-250}" data-400u="{PhotoURL-400}" data-500u="{PhotoURL-500}" data-1280u="{block:HighRes}{PhotoURL-HighRes}{/block:HighRes}" />

示例呈现代码:

<img src="http://36.media.tumblr.com/83099a60d4e0cbeeb30d90394e222878/tumblr_o4qxa0n2BP1r6ec7zo1_100.jpg" data-250u="http://36.media.tumblr.com/83099a60d4e0cbeeb30d90394e222878/tumblr_o4qxa0n2BP1r6ec7zo1_250.jpg" data-400u="http://36.media.tumblr.com/83099a60d4e0cbeeb30d90394e222878/tumblr_o4qxa0n2BP1r6ec7zo1_400.jpg" data-500u="http://36.media.tumblr.com/83099a60d4e0cbeeb30d90394e222878/tumblr_o4qxa0n2BP1r6ec7zo1_500.jpg" data-1280u="http://36.media.tumblr.com/83099a60d4e0cbeeb30d90394e222878/tumblr_o4qxa0n2BP1r6ec7zo1_1280.jpg" >

通过这种方法,您可以确定您拥有正确的URL,并且了解可用的尺寸。

基于一个URL获取所有尺寸的URL。

使用这些信息,URL将变为:

http://36.media.tumblr.com/83099a60d4e0cbeeb30d90394e222878/tumblr_o4qxa0n2BP1r6ec7zo1_500.jpg

以下是用于确认我们可以访问所有可用尺寸的测试:

你仍然不知道是否已生成1280尺寸,但这是更接近的一步。使用此方法,您可以将值(第3部分)替换为新大小,然后您应该能够获取图像。


1
这是可能的,但不是完全可靠的。最初我是采用URL并将(第三部分)替换为不同的大小。然而,事实证明,在某些情况下,具有新大小的图像并不在与先前大小相同的服务器上(第一部分)。你可能可以做一些像测试URL响应之类的事情,如果404,则增加服务器编号,反复执行,但这是hacky的。我可以问一下为什么只能获取img URL吗? - mikedidthis
2
一般来说,您不需要服务器的编号。http://media.tumblr.com/...即可正常工作。如果您坚持要使用服务器编号,我不确定如何在Tumblr之外获取它。我会考虑一下。 - Ally
2
注意!我刚刚意识到,Tumblr不再允许使用part1而没有服务器编号。这个答案已经过时了。 - David Mabodo
2
FYI:正如@DavidMabodo所说,服务器编号仍然是必填项。你能稍微更新一下文本吗?虽然这不是关键问题。所有其他信息似乎都是有效的。 - quetzalcoatl
1
链接中有时会在 <resolution>.jpg 之前加上 _r1_r2,删除这个子字符串有时不起作用,有时会编辑图像的 md5,有时会导致 Nginx 错误 404。 - Nakilon
显示剩余22条评论

1
请记住,原始文件(以其完整分辨率)存储在'_raw'后缀中,而不是_1280、_500、_250等。

它们通常存储在data.tumblr.com上(它们的CDN域)。

URL方案中的路径是从原始(原始)文件的SHA1校验和生成的。

你有证明你说的话的例子吗?我无法让它工作...编辑:我想它就在昨天改变了… - mcont
1
是的,不幸的是,自两天前起Tumblr现在拒绝访问_raw文件。 这是永远不要使用这个垃圾网站的又一个原因。 - Hernn0

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