Учитывая идентификатор фильма IMDB, как я программно получаю его изображение на плакате?

movie id tt0438097 можно найти на http://www.imdb.com/title/tt0438097/

Какой URL-адрес для изображения его плаката?

Ответы

Ответ 1

Как я уверен, вы знаете, фактический URL для этого изображения

http://ia.media-imdb.com/images/M/[email protected]@._V1._SX100_SY133_.jpg

Вам будет сложно понять, как он сгенерирован, и у них нет общедоступного API.

Скринсейвер, вероятно, лучший выбор.

Обычно изображение находится внутри div с class= фото, а тегом a является плакат.

Само изображение находится внутри тега a.

Ответ 2

Отъезд 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/

Ответ 3

URL-адрес - это случайная строка, насколько я могу судить.

Его все еще можно легко получить. Это единственный img внутри якоря с именем poster.

Итак, если вы читаете источник, просто выполните поиск <a name="poster" и это будет текст, следующий за первым src=" оттуда.

Однако вам нужно будет обновить код очистки экрана, потому что это, вероятно, изменится.


Вы также должны знать, что изображения защищены авторским правом, поэтому будьте осторожны, чтобы использовать изображение только при хорошем "справедливом использовании".

Ответ 5

Я знаю, что это слишком поздно, но в моем проекте я использовал это: -

  • Используйте omdbapi, Давайте возьмем пример Inception, используйте www.omdbapi.com/?t=inception, он вернет объект json.
  • В этом объекте json получить объект "Poster", он содержит плакат для изображения.

Ответ 6

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

Ответ 7

Вы можете использовать imdb-cli tool для загрузки плаката с фильмом, например

omdbtool -t "Ice Age: The Meltdown" | wget `sed -n '/^poster/{n;p;}'`

Ответ 8

Имейте в виду, что условия обслуживания явно запрещают скрипинг. Вы можете загрузить базу данных IMDB как набор текстовых файлов, но, как я понимаю, идентификатор фильма IMDB нигде не встречается в этих текстовые файлы.

Ответ 9

Вы можете использовать Trakt API, вам нужно сделать запрос поиска с идентификатором imdb, а результат Json, предоставленный Trakt API, содержит ссылки на два изображения этого фильма (плакат и фан-арт) http://trakt.tv/api-docs/search-movies

Ответ 10

Я сделал что-то подобное, используя 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 использует плакат фильма, когда он создает базу данных миниатюр, потому что он имеет то же имя, что и видеофайл.

Ответ 11

$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>" + "&nbsp;" + "&nbsp;" + "&nbsp;"+ "&nbsp;" + "&nbsp;" + "&nbsp;"+ "&nbsp;" + "&nbsp;" + "&nbsp;"<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>

Ответ 12

Эти изображения плаката не имеют никакой корреляции с титульной страницей, поэтому сначала вам нужно получить титульную страницу, а затем получить элемент img для страницы. Хорошей новостью является то, что тег img завернут в тег с плакатом name=. Вы не сказали, какие инструменты вы используете, но это в основном операция очистки экрана.

Ответ 13

Вот моя программа для создания общедоступной 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

Ответ 14

$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

Ответ 15

Теперь, во всех современных браузерах есть раздел Осмотреть:

100% Исправлено только для Google Chrome:

  • Наведите курсор на изображение.
  • Щелкните правой кнопкой мыши по нему, выберите " Проверить элемент".
  • В появившемся окне под вкладкой Элементы вы найдете выделенный текст как
  • Просто нажмите на него.
  • На вкладке Ресурс щелкните правой кнопкой мыши по изображению.
  • Выберите " Скопировать URL-адрес изображения".

Попробуйте вставить его где угодно в качестве URL-адреса в любом браузере, вы получите только изображение.