查找 IMDB 如何创建其图像代码

逆向工程 接口
2021-07-09 23:32:44

当您查看任何 IMDB 图像页面时,电影海报图像具有以下形式的 url:

http://ia.media-imdb.com/images/M/MV5BMTIxOTY1NjUyN15BMl5BanBnXkFtZTcwMjMxMDk1MQ@@._V1_SX214_AL_.jpg

或更一般地说:

http://ia.media-imdb.com/images/M/<alphaNumeric>@@.\_V1\_SX214\_AL_.jpg

我想知道 alphaNumeric 是如何生成的,很可能来自电影的标题或来自 IMDB 代码。

Kung Fu Panda 有两个例子(虽然可以通过浏览 IMDB 找到更多):

我已经取得了一些进展,因为 AlphaNumeric 是 Base64 编码的(第一个变成 1^A1219656527^A2^Ajpg^Ame702310951),或者至少我很确定基于 'jpg' 文本。但是,我不确定第一个 ^A 和最后一个 ^Ame 之后的数字是如何生成的。如果有人能找到电影或他们的 IMDB 代码与这些数字之间的关系,那就太棒了!

1个回答

我试图解码 Top 250 Chart 中每部电影的“AlphaNumeric”字符串。

看起来他们替换了填充符号(他们使用“@”而不是“=”)但是,一旦我恢复了填充,每个解码的字符串都具有您之前报告的相同格式(我将使用逗号,而不是“^A”,作为字段分隔符):

1, [numeric value], 2, jpg, me + [numeric value]

我未能确定这些数字字段和电影 ID 之间的任何关系,但这里有一些代码供那些愿意尝试的人使用:

import requests
import re
from lxml.etree import HTML
from matplotlib import pyplot as plt
import numpy

request = requests.get('http://www.imdb.com/chart/top?ref_=nv_ch_250_4')
tree = HTML(request.text)
path = './/*[@id="main"]/div/div[2]/table/tbody/tr/td[@class="posterColumn"]/a'
data = numpy.zeros(shape=(250, 3))
row = 0
for td in tree.findall(path):
    movie_id = re.findall('tt(\d*)/', td.attrib['href'])
    img = re.findall('M/(.*)\._V', td.find('./img').attrib['src'])
    img_decoded = img.pop().replace('@', '=').decode('base64')
    img_field_1 = re.findall('\^A(\d*)\^A', img_decoded)
    img_field_2 = re.findall('me(\d*)', img_decoded)
    data[row] = movie_id.pop(), img_field_1.pop(), img_field_2.pop()
    row += 1

fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.scatter(data[:, 0], data[:, 1])  # movie_id vs. img_field_1
ax2.scatter(data[:, 0], data[:, 2])  # movie_id vs. img_field_2
ax1.xaxis.get_major_formatter().set_powerlimits((0, 1))

这是一个显示解码字段与电影 ID 的小图:

解码字段与电影 ID