映画 ID tt0438097 は、http://www.imdb.com/title/tt0438097/で見つけることができます。
ポスター画像のURLは?
最善の解決策はtmdb.orgを使用することです:
次の後に、この API URL で imdbid を使用しますfind/
。
https://api.themoviedb.org/3/find/tt0111161?api_key=__YOURAPIKEY__&external_source=imdb_id
json 応答を取得し、poster_path
属性を選択します。
例えば"poster_path":"/9O7gLzmreU0nGkIB6K3BsJbzvNv.jpg"
このパスの先頭に を追加"http://image.tmdb.org/t/p/w150"
すると、img タグで使用できるポスターの URL が得られます :-)
omdbapi は機能しますが、実際にはこれらの画像を使用できないことがわかりました (スクリーン スクレイピングが原因で、img タグで使用するといずれにせよブロックされます) 。
ご存じのとおり、その画像の実際の URL は次のとおりです。
ただし、それがどのように生成されるかを理解するのは難しいでしょう。公開されている API はないようです。
スクリーンスクレイピングはおそらく最善の策です。
写真は通常、 class=photoの div 内にあるようで、タグの名前はposterです。
画像自体はaタグのすぐ内側にあります。
手遅れであることはわかっていますが、私のプロジェクトではこれを使用しました:-
私が知る限り、URL はランダムな文字列です。
今でも簡単に回収できます。img
という名前のアンカー内でのみposter
です。
ですから、ソースを読んでいる場合は、単に検索する<a name="poster"
と、そこから最初に続くテキストになりますsrc="
。
ただし、スクリーン スクレイピング コードは変更される可能性があるため、更新しておく必要があります。
また、画像は著作権で保護されていることにも注意する必要があります。そのため、適切な「公正使用」の根拠の下でのみ画像を使用するように注意してください。
親指で十分な場合は、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
Trakt API を使用できます。imdb ID を使用して検索要求を行う必要があります。Trakt API によって提供される Json の結果には、その映画の 2 つの画像 (ポスターとファン アート) へのリンクが含まれています http://trakt.tv/api- docs/search-movies
サービス利用規約ではスクリーンスクレイピングが明示的に禁止されていることに注意してください。IMDB データベースは一連のテキスト ファイルとしてダウンロードできますが、私が理解しているように、IMDB ムービー ID はこれらのテキスト ファイルのどこにもありません。
私は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 が好む名前が付けられているため、最初の検索結果が正しいことがほぼ保証されます。「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 はサムネイル データベースを構築するときに映画ポスターを使用します。これは、ビデオ ファイルと同じ名前を持っているためです。
これらのポスター画像はタイトル ページとの相関関係がないように見えるため、最初にタイトル ページを取得してから、ページの img 要素を取得する必要があります。良いニュースは、img タグが name="poster" の a タグでラップされていることです。使用しているツールの種類については言及されていませんが、これは基本的に画面のスクレイピング操作です。
これは、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
現在、すべての最新のブラウザには「検査」セクションがあります。
Google Chromeに対してのみ100%正しい:
任意のブラウザのURLとして任意の場所に貼り付けてみてください。画像のみが表示されます。