movie id tt0438097 можно найти на http://www.imdb.com/title/tt0438097/
Какой URL-адрес для изображения его плаката?
movie id tt0438097 можно найти на http://www.imdb.com/title/tt0438097/
Какой URL-адрес для изображения его плаката?
Как я уверен, вы знаете, фактический URL для этого изображения
http://ia.media-imdb.com/images/M/[email protected]@._V1._SX100_SY133_.jpg
Вам будет сложно понять, как он сгенерирован, и у них нет общедоступного API.
Скринсейвер, вероятно, лучший выбор.
Обычно изображение находится внутри div с class= фото, а тегом a является плакат.
Само изображение находится внутри тега a.
Отъезд http://www.imdbapi.com/, Он возвращает URL-адрес плаката в строке.
Например, отметьте http://www.imdbapi.com/?i=&t=inception, и вы получите адрес плаката: Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1._SX320.jpg"
Обновление. Похоже, у владельца сайта были некоторые аргументы в отношении юридического персонала IMDB. Как упоминалось в исходном сайте, новый адрес сайта http://www.omdbapi.com/
URL-адрес - это случайная строка, насколько я могу судить.
Его все еще можно легко получить. Это единственный img
внутри якоря с именем poster
.
Итак, если вы читаете источник, просто выполните поиск <a name="poster"
и это будет текст, следующий за первым src="
оттуда.
Однако вам нужно будет обновить код очистки экрана, потому что это, вероятно, изменится.
Вы также должны знать, что изображения защищены авторским правом, поэтому будьте осторожны, чтобы использовать изображение только при хорошем "справедливом использовании".
Если большого пальца достаточно, вы можете использовать API-интерфейс Facebook: 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 url:
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"
, и у вас будет URL-адрес плаката, который вы можете использовать в теге img: -)
4 Вы можете даже изменить размеры:
http://image.tmdb.org/t/p/original/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg
http://image.tmdb.org/t/p/w150/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg
Вы можете использовать imdb-cli
tool для загрузки плаката с фильмом, например
omdbtool -t "Ice Age: The Meltdown" | wget `sed -n '/^poster/{n;p;}'`
Имейте в виду, что условия обслуживания явно запрещают скрипинг. Вы можете загрузить базу данных IMDB как набор текстовых файлов, но, как я понимаю, идентификатор фильма IMDB нигде не встречается в этих текстовые файлы.
Вы можете использовать Trakt API, вам нужно сделать запрос поиска с идентификатором imdb, а результат Json, предоставленный Trakt API, содержит ссылки на два изображения этого фильма (плакат и фан-арт) http://trakt.tv/api-docs/search-movies
Я сделал что-то подобное, используя phantomjs и wget. Этот бит phantomjs принимает поисковый запрос и возвращает первый URL-адрес плаката фильма результата. Вы можете легко изменить его на свои нужды.
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 script. Файлы mp4 имеют имена, которые нравится IMDB, и почему первый результат поиска почти гарантированно корректен. Такие имена, как "Love Exposure (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=. Вы не сказали, какие инструменты вы используете, но это в основном операция очистки экрана.
Вот моя программа для создания общедоступной html-страницы для мобильных компаний, найденной на странице imdb. Измените исходный url по своему вкусу и создайте html файл, где вы можете увидеть заголовок, сводку, оценку и миниатюру.
npm install -g phantomjs
Вот script, сохраните его в 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
Теперь, во всех современных браузерах есть раздел Осмотреть:
100% Исправлено только для Google Chrome:
Попробуйте вставить его где угодно в качестве URL-адреса в любом браузере, вы получите только изображение.