web-dev-qa-db-ja.com

IMDBムービーIDを指定した場合、プログラムでポスター画像を取得するにはどうすればよいですか?

映画IDtt0438097は http://www.imdb.com/title/tt0438097/ にあります。

ポスター画像のURLは何ですか?

16
user126593

ご存知のとおり、その画像の実際のURLは

http://ia.media-imdb.com/images/M/MV5BMTI0MDcxMzE3OF5BMl5BanBnXkFtZTcwODc3OTYzMQ@@._V1._SX100_SY133_.jpg

しかし、それがどのように生成されるかを理解するのは難しいでしょうし、彼らは公に利用可能なAPIを持っていないようです。

スクリーンスクレイピングはおそらくあなたの最善の策です。

写真は一般的にclass = photoのdiv内にあるようで、aタグの名前はposterです。

画像自体はaタグのすぐ内側にあります。

9
Mark Biek

チェックアウト 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/

16
Kamyar

親指で十分な場合は、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
Bob Belderbos

omdbapiは機能しますが、これらの画像を実際に使用できないことがわかりました(画面のスクレイピングと imgタグで使用するとブロックされるため

最善の解決策は、 tmdb.org :を使用することです。

1このAPIURLでimdbidを使用します。

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
5
stallingOne

私の知る限り、URLはランダムな文字列です。

それでも簡単に取得できます。これは、imgという名前のアンカー内の唯一のposterです。

したがって、ソースを読んでいる場合は、<a name="poster"を検索するだけで、そこから最初のsrc="に続くテキストになります。

ただし、画面スクレイピングコードはおそらく変更されるため、最新の状態に保つ必要があります。


また、画像は著作権で保護されていることに注意する必要があります。そのため、適切な「フェアユース」の根拠の下でのみ画像を使用するように注意してください。

5
Vincent McNabb

手遅れであることはわかっていますが、私のプロジェクトではこれを使用しました:-

  1. Omdbapiを使用します。Inceptionの例を見てみましょう。 www.omdbapi.com/?t=inception を使用してjsonオブジェクトを返します。
  2. そのjsonオブジェクトで「Poster」オブジェクトを取得すると、画像のポスターが含まれます。
5
Mr_Hmp

imdb-cli tool 映画のポスターをダウンロードします。例:.

omdbtool -t "Ice Age: The Meltdown" | wget `sed -n '/^poster/{n;p;}'`
2
kenorb
$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
Paul Havens

利用規約 はスクリーンスクレイピングを明示的に禁止していることに注意してください。 IMDBデータベースは テキストファイルのセット としてダウンロードできますが、私が理解しているように、IMDBムービーIDはこれらのテキストファイルのどこにも見つかりません。

1
Peter V. Mørch

Trakt APIを使用でき、imdb IDを使用して検索リクエストを行う必要があります。また、Trakt APIによって提供されるJsonの結果には、その映画の2つの画像(ポスターとファンアート)へのリンクが含まれています http:// trakt。 tv/api-docs/search-movies

1
Namila

私は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();
    });
  });
});

このbashスクリプトを使用して、ディレクトリ内の多くの映画のwgetを使用して画像をダウンロードします。 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は、サムネイルデータベースを構築するときに、ビデオファイルと同じ名前であるため、映画のポスターを使用します。

1
Brad Soto

これは、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
0
Ako
$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
0
Paul Havens

上記の@Hawkの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
0
Bissquitt

これらのポスター画像はタイトルページと相関関係がないように見えるため、最初にタイトルページを取得してから、ページのimg要素を取得する必要があります。良いニュースは、imgタグがname = "poster"のタグでラップされていることです。使用しているツールの種類はわかりませんが、これは基本的に画面のスクレイピング操作です。

0
Chris Noe