Учитывая идентификатор фильма IMDB, как мне программно получить изображение плаката? - PullRequest
15 голосов
/ 30 сентября 2008

идентификатор фильма tt0438097 можно найти на http://www.imdb.com/title/tt0438097/

Какая ссылка для изображения плаката?

Ответы [ 16 ]

16 голосов
/ 12 апреля 2011

Проверить http://www.imdbapi.com/, Возвращает URL-адрес плаката в строке.

Например, отметьте http://www.imdbapi.com/?i=&t=inception, и вы получите адрес автора: Poster":"http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1._SX320.jpg"

Обновление : похоже, владелец сайта поспорил с сотрудниками юридического отдела IMDB. Как упоминалось в оригинальном сайте, адрес нового сайта http://www.omdbapi.com/

9 голосов
/ 30 сентября 2008

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

http://ia.media -imdb.com / изображения / M / MV5BMTI0MDcxMzE3OF5BMl5BanBnXkFtZTcwODc3OTYzMQ @@ ._ V1._SX100_SY133_.jpg

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

Вероятно, лучшая ставка для вас - скрининг.

Изображение, как правило, внутри div с class = photo и именем тега a является poster

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

5 голосов
/ 23 февраля 2015

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", и у вас будет URL-адрес плаката, который можно использовать в теге img: -)

4 Вы даже можете изменить размеры следующим образом:

http://image.tmdb.org/t/p/original/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg
http://image.tmdb.org/t/p/w150/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg
5 голосов
/ 12 апреля 2014

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

  1. Используйте omdbapi, давайте возьмем пример Inception, используйте www.omdbapi.com /? T = inception это вернет объект json.
  2. В этом объекте json получен объект "Плакат", он содержит плакат для изображения.
5 голосов
/ 07 июля 2012

Если достаточно большого пальца, вы можете использовать Facebook Graph 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

5 голосов
/ 30 сентября 2008

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

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

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

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


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

2 голосов
/ 19 октября 2017

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

omdbtool -t "Ice Age: The Meltdown" | wget `sed -n '/^poster/{n;p;}'`
1 голос
/ 23 апреля 2016
$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>
1 голос
/ 29 ноября 2014

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

1 голос
/ 02 ноября 2013

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

...