电影ID tt0438097可以在这里找到http://www.imdb.com/title/tt0438097/
什么是它的海报图像的URL?
电影ID tt0438097可以在这里找到http://www.imdb.com/title/tt0438097/
什么是它的海报图像的URL?
正如我敢肯定你知道,该图像的实际网址是
http://ia.media-imdb.com/images/M/MV5BMTI0MDcxMzE3OF5BMl5BanBnXkFtZTcwODc3OTYzMQ@@._V1._SX100_SY133_.jpg
您打算将很难弄清楚它是如何产生的,虽然他们似乎并不有一个公开的API。
屏幕抓取可能是你最好的选择。
图片似乎一般是带class =照片一个div和标签是海报的名字里面。
图像本身只是一个在标签内。
查看 http://www.imdbapi.com/ , 它返回字符串海报网址。
例如,检查 http://www.imdbapi.com/?i=&t=inception 你会得到海报地址: Poster":"http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1._SX320.jpg"
更新 :好像网站的所有者有一些争论与IMDB法务人员。 正如原网站中提到,新网站的地址是http://www.omdbapi.com/
该网址是一个随机字符串,据我可以告诉。
它仍然可以很容易地检索。 它是唯一img
锚命名内poster
。
所以,如果你正在阅读的源,只需搜索<a name="poster"
,这将是先上后下的文本src="
从那里。
但是,您将需要保持更新,因为这可能会改变屏幕抓取代码。
你也应该知道这些图像是受版权保护的,所以要小心只使用情况下良好的“合理使用”的理由形象。
如果拇指是不够的,你可以使用Facebook的图形API: http://graph.facebook.com/?ids=http://www.imdb.com/title/tt0438097/
让你的缩略图: http://profile.ak.fbcdn.net/hprofile-ak-ash2/50289_117058658320339_650214_s.jpg
我知道,这是太晚,但在我的项目,我用这个: -
omdbapi工作,但我发现你真的不能使用这些图片(因为屏幕抓取,并且如果你在一个img标签使用它们它们反正阻塞 )
最好的解决办法是使用tmdb.org :
1使用imdbid在这个API网址:
https://api.themoviedb.org/3/find/tt0111161?api_key=___YOURAPIKEY___&external_source=imdb_id
2检索JSON响应,并选择poster_path
属性:
"poster_path":"/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg"
3在前面加上这条道路"http://image.tmdb.org/t/p/original"
,你将有你可以在img标签使用海报URL :-)
4您可以甚至改变大小是这样的:
http://image.tmdb.org/t/p/original/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg
http://image.tmdb.org/t/p/w150/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg
您可以使用imdb-cli
工具下载电影的海报,如
omdbtool -t "Ice Age: The Meltdown" | wget `sed -n '/^poster/{n;p;}'`
注意强硬,该服务条款明确禁止屏幕抓取。 您也可以下载IMDB数据库作为一组的文本文件 ,但据我了解,在IMDB电影ID是无处这些文本文件中被发现。
您可以使用Trakt API,你必须与IMDB ID的搜索请求,并通过Trakt API给出的JSON结果包含该电影的两个图像链接(海报和风扇艺术) http://trakt.tv/api-文档/搜索电影
我已经做了使用phantomjs和wget类似的东西。 phantomjs的该位接受搜索查询,返回的第一个结果的电影海报网址。 你可以很容易地将其更改为您的需求。
var system = require('system');
if (system.args.length === 1) {
console.log('Usage: moviePoster.js <movie name>');
phantom.exit();
}
var formattedTitle = encodeURIComponent(system.args[1]).replace(/%20/g, "+");
var page = require('webpage').create();
page.open('http://m.imdb.com/find?q=' + formattedTitle, function() {
var url = page.evaluate(function() {
return 'http://www.imdb.com' + $(".title").first().find('a').attr('href');
});
page.close();
page = require('webpage').create();
page.open(url, function() {
var url = page.evaluate(function() {
return 'http://www.imdb.com' + $("#img_primary").find('a').attr('href');
});
page.close();
page = require('webpage').create();
page.open(url, function() {
var url = page.evaluate(function() {
return $(".photo").first().find('img').attr('src');
});
console.log(url);
page.close();
phantom.exit();
});
});
});
我下载使用wget为目录中的很多电影中使用这个bash脚本的形象。 MP4的文件具有与IMDB喜欢的名字,这就是为什么第一个搜索结果是几乎保证是正确的。 的名称,如 “爱的曝光(2008).MP4”。
for file in *.mp4; do
title="${file%.mp4}"
if [ ! -f "${title}.jpg" ]
then
wget `phantomjs moviePoster.js "$title"` -O "${title}.jpg"
fi
done
然后minidlna采用了电影海报,当它建立缩略图数据库,因为它具有相同的名称与视频文件。
$Movies = Get-ChildItem -path "Z:\MOVIES\COMEDY" | Where-Object {$_.Extension -eq ".avi" -or $_.Extension -eq ".mp4" -or $_.Extension -eq ".mkv" -or $_.Extension -eq<br> <br>".flv" -or $_.Extension -eq ".xvid" -or $_.Extension -eq ".divx"} | Select-Object Name, FullName | Sort Name <br>
#Grab all the extension types and filter the ones I ONLY want <br>
<br>
$COMEDY = ForEach($Movie in $Movies) <br>
{<br>
$Title = $($Movie.Name)<br>
#Remove the file extension<br>
$Title = $Title.split('.')[0] <br>
<br>
#Changing the case to all lower <br>
$Title = $Title.ToLower()<br>
<br>
#Replace a space w/ %20 for the search structure<br>
$searchTitle = $Title.Replace(' ','%20') <br>
<br>
#Fetching search results<br>
$moviesearch = Invoke-WebRequest "http://www.imdb.com/search/title?title=$searchTitle&title_type=feature"<br>
<br>
#Moving html elements into variable<br>
$titleclassarray = $moviesearch.AllElements | where Class -eq 'title' | select -First 1<br>
<br>
#Checking if result contains movies<br>
try<br><br>
{
$titleclass = $titleclassarray[0]<br>
}<br>
catch<br>
{<br>
Write-Warning "No movie found matching that title http://www.imdb.com/search/title?title=$searchTitle&title_type=feature"<br>
} <br>
<br>
#Parcing HTML for movie link<br>
$regex = "<\s*a\s*[^>]*?href\s*=\s*[`"']*([^`"'>]+)[^>]*?>"<br>
$linksFound = [Regex]::Matches($titleclass.innerHTML, $regex, "IgnoreCase")<br>
<br><br>
#Fetching the first result from <br>
$titlelink = New-Object System.Collections.ArrayList<br>
foreach($link in $linksFound)<br>
{<br>
$trimmedlink = $link.Groups[1].Value.Trim()<br>
if ($trimmedlink.Contains('/title/'))<br>
{<br>
[void] $titlelink.Add($trimmedlink)<br>
}<br>
}<br>
#Fetching movie page<br>
$movieURL = "http://www.imdb.com$($titlelink[0])"<br>
<br>
#Grabbing the URL for the Movie Poster<br>
$MoviePoster = ((Invoke-WebRequest –Uri $movieURL).Images | Where-Object {$_.title -like "$Title Poster"} | Where src -like "http:*").src <br>
<br>
$MyVariable = "<a href=" + '"' + $($Movie.FullName) + '"' + " " + "title='$Title'" + ">"<br>
$ImgLocation = "<img src=" + '"' + "$MoviePoster" + '"' + "width=" + '"' + "225" + '"' + "height=" + '"' + "275" + '"' + "border=" + '"' + "0" + '"' + "alt=" +<br> '"' + $Title + '"' + "></a>" + " " + " " + " "+ " " + " " + " "+ " " + " " + " "<br>
<br>
Write-Output $MyVariable, $ImgLocation<br>
<br>
}$COMEDY | Out-File z:\db\COMEDY.htm <br>
<br>
$after = Get-Content z:\db\COMEDY.htm <br>
<br>
#adding a back button to the Index <br>
$before = Get-Content z:\db\before.txt<br>
<br>
#adding the back button prior to the poster images content<br>
Set-Content z:\db\COMEDY.htm –value $before, $after<br>
这些海报图像不会出现不得不扉页任何关联,所以你必须首先检索标题页,然后检索页面img元素。 好消息是,img标签被包裹在一个与NAME =“海报”的标签。 你没有说你使用什么样的工具,但是这基本上是屏幕抓取操作。
下面是我的程序生成IMDB网页上找到的电影公司的人可读的HTML摘要页面。 最初的URL更改为自己的喜好,并生成一个HTML文件,你可以看到标题,摘要,得分和缩略图。
npm install -g phantomjs
这里是脚本,将其保存到imdb.js
var system = require('system');
var page = require('webpage').create();
page.open('http://www.imdb.com/company/co0026841/?ref_=fn_al_co_1', function() {
console.log('Fetching movies list');
var movies = page.evaluate(function() {
var list = $('ol li');
var json = []
$.each(list, function(index, listItem) {
var link = $(listItem).find('a');
json.push({link: 'http://www.imdb.com' + link.attr('href')});
});
return json;
});
page.close();
console.log('Found ' + movies.length + ' movies');
fetchMovies(movies, 0);
});
function fetchMovies(movies, index) {
if (index == movies.length) {
console.log('Done');
console.log('Generating HTML');
genHtml(movies);
phantom.exit();
return;
}
var movie = movies[index];
console.log('Requesting data for '+ movie.link);
var page = require('webpage').create();
page.open(movie.link, function() {
console.log('Fetching data');
var data = page.evaluate(function() {
var title = $('.title_wrapper h1').text().trim();
var summary = $('.summary_text').text().trim();
var rating = $('.ratingValue strong').attr('title');
var thumb = $('.poster img').attr('src');
if (title == undefined || thumb == undefined) {
return null;
}
return { title: title, summary: summary, rating: rating, thumb: thumb };
});
if (data != null) {
movie.title = data.title;
movie.summary = data.summary;
movie.rating = data.rating;
movie.thumb = data.thumb;
console.log(movie.title)
console.log('Request complete');
} else {
movies.slice(index, 1);
index -= 1;
console.log('No data found');
}
page.close();
fetchMovies(movies, index + 1);
});
}
function genHtml(movies) {
var fs = require('fs');
var path = 'movies.html';
var content = Array();
movies.forEach(function(movie) {
var section = '';
section += '<div>';
section += '<h3>'+movie.title+'</h3>';
section += '<p>'+movie.summary+'</p>';
section += '<p>'+movie.rating+'</p>';
section += '<img src="'+movie.thumb+'">';
section += '</div>';
content.push(section);
});
var html = '<html>'+content.join('\n')+'</html>';
fs.write(path, html, 'w');
}
而像这样运行
phantomjs imdb.js
$Title = $($Movie.Name)
$searchTitle = $Title.Replace(' ','%20')
$moviesearch = Invoke-WebRequest "http://www.imdb.com/search/title?title=$searchTitle&title_type=feature"
$titleclassarray = $moviesearch.AllElements | where Class -eq 'loadlate' | select -First 1
$MoviePoster = $titleclassarray.loadlate
以上@鹰的BASE64发现玩弄后,我发现BASE64代码后,一切都显示信息。 如果删除最后一个之间的一切@
和.jpg
它将在它具有最高的资源加载图像。
https://m.media-amazon.com/images/M/MV5BMjAwODg3OTAxMl5BMl5BanBnXkFtZTcwMjg2NjYyMw@@._V1_UX182_CR0,0,182,268_AL_.jpg
变
https://m.media-amazon.com/images/M/MV5BMjAwODg3OTAxMl5BMl5BanBnXkFtZTcwMjg2NjYyMw@@.jpg
现在是一个天,所有现代浏览器都“ 检查 ”部分:
100%正确的谷歌浏览器只:
尝试将它粘贴在任何地方以任何浏览器的网址,你只会得到的图像。