Gå til innhold

DVD bibliotek program.


r2d290

Anbefalte innlegg

Videoannonse
Annonse

Skal prøve å skrive kjappt hva du må gjøre for å komme igang:

 

-Installer perl (jeg anbefaler ActivePerl distribusjonen på windows)

-Lagre scriptet i en fil. F. eks. c:\scripts\brafilmripper.pl

-Lag en ny mappe som heter output i mappen hvor skriptet ligger. (f. eks. c:\scripts\output)

-Bytt ut '/tmp/rippercookiejar' med 'c:\tmp\rippercookiejar'

 

-Start kommandolinjen. (Velg start->kjør. Skriv inn cmd og trykk enter)

-Skriv perl c:\scripts\brafilmripper.pl og trykk enter.

Lenke til kommentar

litt problemer dukket opp

 

kopierte det scriptet du hadde laget, inn i notepad, endret på adressen, og lagret det som en .pl fil i script-mappa i C:\

 

Deretter lagde jeg en output-mappe i denne mappa.

 

deretter kjørte jeg .pl fila med cmd, og fikk da opp et vindu der det stod: "Enter a valid film ID".

 

Når jeg skrev inn "click", skjedde det ikke noe annet enn at det kom en ny linje der det stod "enter a valid film ID".

 

Av det jeg har gjort nå, tror jeg ikke jeg brukte activePerl (jeg startet programmet, men fikk ikke helt forståelse av hva jeg skulle med den).

 

edit: output-mappa er tom...

Endret av r2d290
Lenke til kommentar

FilmID er ID nummeret på filmen hos brafilm. Om du går inn på en film på siden deres og klikker på en film, og deretter ser på URLen, finner du ID. F. eks.

 

http://www.brafilm.no/film/310825-Man+of+the+Year.do

 

Tallet jeg markerte rødt er da IDen du skal skrive inn. (Jeg gjorde det slik fordi det rett og slett var mest praktisk for min egen del)

 

ActivePerl trenger du ikke starte. ActivePerl er bare en distribusjon av perl (som du trenger for å kunne kjøre scriptet). Programmet som legger seg i menyen som heter activeperl er programmet du kan bruke for å installere nye perl-moduler.

Endret av cyclo
Lenke til kommentar

og hvis den ikke gjør det?

 

du sa jeg skulle skrive:

$cookies = HTTP::Cookies->new(file=>'c:\tmp\rippercookiejar',autosave => 1,);

 

jeg opprettet derfor mappen tmp (?), er det riktig?

 

 

du sa at hvis jeg hadde windows, måtte jeg endre på noen linjer; er det DEN linja du snakket om, eller er det mer jeg må forandre på`?

 

 

 

edit: fikk det til (med takk fra en som kan detta ganske mye bedre enn meg).

 

er likavel en del ting som ikke funket helt:

- bildet ble helt rart (mange fargerike firkanter)

 

- Regissør

- Produsent

- Kategori (sjanger)

- language

- skuespillere (RL and in film)

- Filstørrelse

- (oppløsning)

- (kommentarer som folk har skrevet)

 

 

syntes spesielt det var rart det med bildet... Han som hjalp meg, hadde også det samme problemet. Bildet som lagres i output ser like kornete og dårlig ut, men orginalbildet inne på linken som den henter fra er bra...

Endret av r2d290
Lenke til kommentar

Gardermoen ble stengt på grunn av tåke i går (hvorfor i h** måtte de bygge på gardermoen, norges tåkehovedstad?). Så da er jeg visst fortsatt her.

 

Ser visst at noen av tingene ikke blir lastet ned korrekt. Det skyldes at brafilm endret strukturen sin for en måned eller to siden. Jeg fikser det jeg kan nå etterpå.

 

- Regissør

- Produsent

- Kategori (sjanger)

- skuespillere

Skal være med, jeg skal ordne det.

 

- Land fungerer som det skal, men om du ser etter så er det en feil hos brafilm. Alle filmene får oppgitt land som null. Ikke noe jeg får gjort med det.

 

- Oppløsning og filstørrelse er ikke noe som ligger hos brafilm. Det får du ordne selv etterpå i ANT programmet.

 

- Kommentarer fra folk har jeg ikke lastet ned. Ser ingen poeng i det ;) Du må gjerne endre scriptet selv.

 

 

Hva angår bildene vet jeg ikke helt hva jeg skal si. Jeg kjører på linux her, og har ikke noe som helst problemer med bildene...

 

 

PS! Du skriver

skuespillere (RL and in film)
Vell. Man kan ikke hente ut annet enn det brafilm fraktisk presenterer av data... Endret av cyclo
Lenke til kommentar

Legger ut ny fungerende versjon:

 

#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use HTTP::Cookies;

$DEBUG = 0;

$cookies = HTTP::Cookies->new(file=>'/tmp/rippercookiejar',autosave => 1,);
$ua = new LWP::UserAgent;
$ua->cookie_jar($cookies);

while ($filmID !~ /\d+/) {
print "Enter a valid film ID: ";
$filmID = <>;
}
chop($filmID);

$request = new HTTP::Request 'GET', 'http://www.brafilm.no/browse.do?show=movie&id='.$filmID;
$ua->prepare_request($request);
$response = $ua->request($request);
if ($response->is_success) {
$html = $response->content;
($garbage,$movie) = split(/<div id="browseMovieInfo">/,$html);
if ($movie =~ /<h1>(.+)<\/h1>/i) {
	$title = $1;
	debug("TITLE: ".$title);
}	
if ($movie =~ /\((\d{4})\)/i) {
	$filmyear = $1;
	debug("YEAR: ".$filmyear);
}
if ($movie =~ /stars_1_(\d{2})\.gif/i) {
	$rating = $1;
	$rating = $rating*2/10;
	debug("RATING: ".$rating);
}
if ($movie =~ /<p class="movieDescription">([^<]+)/i) {
	$description = $1;
$description =~ s/[\t\n\r]//g;
	debug("DESCRIPTION: ".$description);
}
if ($movie =~/Originaltittel[\n\t]+<\/th>[\n\t]+<td>[\n\t]+(.+)[\n\t]+<\/td>/i) {
	$originaltitle = $1;
	debug("ORIGINALTITLE: ".$originaltitle);
}
($garbage,$temp) = split(/Sjanger/,$movie);
($sjangersource,$garbage) = split(/kkelord/,$temp);
while ($sjangersource =~ /href="\/category\/\d+.+\.do" title="Les mer: .+"  >(.+)<\/a>/gi) {
	push (@s,$1);
}
foreach (@s) {
	$sjanger .= $_.", ";
}
chop($sjanger);
chop($sjanger);
debug("SJANGER: ".$sjanger);
($garbage,$temp) = split(/Manus/,$movie);
($manussource,$garbage) = split(/Skuespillere/,$temp);
while ($manussource =~ /href="\/person\/\d+.+\.do" title="Les mer: .+"  >(.+)<\/a>/gi) {
	push (@m,$1);
}
foreach (@m) {
	$manus .= $_.", ";
}
chop($manus);
chop($manus);
debug("MANUS: ".$manus);
($actorsource,$garbage) = split(/Regis/,$garbage);
while ($actorsource =~ /href="\/person\/\d+.+\.do" title="Les mer: .+"  >(.+)<\/a>/gi) {
	push (@a,$1);
}
foreach (@a) {
	$actor .= $_.", ";
}
chop($actor);
chop($actor);
debug("SKUESPILLERE: ".$actor);
($directorsource,$garbage) = split(/Premieredato/,$garbage);
while ($directorsource =~ /href="\/person\/\d+.+\.do" title="Les mer: .+"  >(.+)<\/a>/gi) {
	push (@d,$1);
}
foreach (@d) {
	$director .= $_.", ";
}
chop ($director);
chop ($director);
debug("DIRECTOR: ".$director);
if ($movie =~/Spilletid:[\n\t]+<\/th>[\n\t]+<td>[\n\t]+(\d+) tim (\d+) min/gi) {
	$playtime = $1*60 + $2;
	debug("PLAYTIME: ".$playtime);
}
if ($movie =~/Land:[\n\t]+<\/th>[\n\t]+<td>[\n\t]+(.+)[\n\t]+<\/td>/gi) {
	$country = $1;
	$country =~ s/,/, /g;
	debug("COUNTRY: ".$country);
}
if ($movie =~/Tale\):[\n\t]+<\/th>[\n\t]+<td>[\n\t]+([^<]+)/gi) {
	$tale = $1;
	$tale =~ s/[\n\t]//g;
	chop($tale);
	$tale =~ s/,/, /g;
	debug("TALE: ".$tale);
}
if ($movie =~/Lydformat:[\n\t]+<\/th>[\n\t]+<td>[\n\t]+([^<]+)/gi) {
	$audio = $1;
	$audio =~ s/[\n\t]//g;
	chop($audio);
	$audio =~ s/,/, /g;
	debug("LYDFORMAT: ".$audio);
}
if ($movie =~/Undertekster\):[\n\t]+<\/th>[\n\t]+<td>[\n\t]+([^<]+)/gi) {
	$subtitle = $1;
	$subtitle =~ s/[\n\t]//g;
	chop($subtitle);
	$subtitle =~ s/,/, /g;
	debug("SUBTITLE: ".$subtitle);
}
if ($movie =~/Bild:[\n\t]+<\/th>[\n\t]+<td>[\n\t]+([^<]+)/gi) {
	$video = $1;
	$video =~ s/[\n\t]//g;
	chop($video);
	$video =~ s/,/, /g;
	debug("VIDEO: ".$video);
}
while ($path eq "") {
	print "Enter the movie path:";
	$path = <>;
	chop($path);
}
$path =~ s/VIDEO_TS.IFO//i;
if ($path !~ /\\$/) {
	$path .= "\\";
}
$path .= "VIDEO_TS.IFO";
while ($type !~ /[123]/) {
	print "Enter type:\n\t1) DVD on Hard-drive\n\t2) DVD\n\t3) DivX\n";
	$type = <>;
}
@moviestypes = ("DVD on Hard-drive","DVD","DivX");
chop($type);
$request = new HTTP::Request 'GET', 'http://www.brafilm.no/img/cover/movie/huge/'.$filmID.'.jpg';
$ua->prepare_request($request);
$response = $ua->request($request);
if ($response->is_success) {
	open IMAGE , ">output/$filmID.jpg";
	print IMAGE $response->content;
	close IMAGE;
} else {
	die "Error retrieving picture";
}
} else {
die "Error retrieving movie with ID $filmID";
}

open OUTPUTFILE, "output/dvddatabase.xml";
@outputfile = <OUTPUTFILE>;
close OUTPUTFILE;

foreach $line(@outputfile) {
if ($line =~ /<Movie/) {
	push (@movies,$line);
}
}
$noofmovies = @movies;

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);

open BF, ">output/dvddatabase.xml";
print BF "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<AntMovieCatalog Format=\"35\" Version=\"3.5.0 (2005-05-29)\" Date=\""
.sprintf("%02d.%02d.%04d %02d:%02d:%02d",$mday,$mon+1,$year+1900,$hour,$min,$sec)
."\">\n\t<Catalog>\n\t\t<Properties/>\n\t\t<Contents>\n";
foreach $line(@movies) {
print BF $line;
}
print BF "\t\t\t<Movie Number=\"".($noofmovies+1)."\" Checked=\"True\" MediaType=\"".$moviestypes[$type-1]."\" Date=\""
.sprintf("%02d.%02d.%04d",$mday,$mon+1,$year+1900)."\" Rating=\"$rating\" OriginalTitle=\"$originaltitle\""
." TranslatedTitle=\"$title\" FormattedTitle=\"$title\" Director=\"$director\" Producer=\"$manus\" Country=\"$country\""
." Category=\"$sjanger\" Year=\"$filmyear\" Length=\"$playtime\" Actors=\"$actor\" URL=\"$path\" Description=\"$description\""
." VideoFormat=\"$video\" AudioFormat=\"$audio\" Languages=\"$tale\" Subtitles=\"$subtitle\" Size=\"0\" Disks=\"1\""
." Picture=\"$filmID.jpg\"/>\n";
print BF "\t\t</Contents>\n\t</Catalog>\n</AntMovieCatalog>";	

close BF;

sub debug {
local ($toprint) = @_;
if ($DEBUG==1) {
	print $toprint."\n";
}
}

 

Så nå gjennstår det bare å legge inn de siste 30 filmene mine på ny. Sukk.

Endret av cyclo
Lenke til kommentar

Jeg har brukt Readerware en del og det fungerer fint. Bruker ikke delen som har med DVDer men den med bøker. Det finne er at man kan bruke strekkoder til å lese inn det du skal lese inn. En kan om en har bruke strekkode leser også. Det jeg så som problem da jeg så på minne DVDer at ganske mange av dem ikke lest inn siden de var Norsk eller ikke Engelsk. Det går an å lese inn fra eksterne kilder selv om etter det jeg husker var det ikke fra så mange kilder på DVDer. For bøker var det langt flere og til og med et norskt sted. Hvis en vil og kan så kan en sette det opp til å hente fra nye steder.

Lenke til kommentar

hehe... kammeraten min kom fra egypt igår, og han var vel ett av de siste flyene som fikk lov til å lande der pga været... dette var omtrent i 21-22 tiden. Var det da du også skulle ta flyet?

 

 

Jeg skjønner poengene dine i den første av de to siste poengene. Grunnen til at jeg skrev opp en del ting som "manglet" uten at det eksisterte på bra film, var egentlig fordi jeg var litt trøtt da jeg skrev det. Jeg snakket nemlig med en kammerat om de tingene, og laget en liste over hva som kanskje kunne forbedres (da gjort av han, og ikke deg), men så glemte jeg å fjerne det da jeg lagde lista til deg...

 

Men tusen takk for at du endret på scriptet... skal teste det nå...

 

 

edit: så vidt jeg har forstått (uten å ha prøvd) funker strekkodeleser i ant movie også...

Endret av r2d290
Lenke til kommentar

bra jobba, nå funka det veldig mye bedre...

 

men hadde det ikke vært en idè å få til en loop i det scriptet ditt, så du slipper å kjøre programmet hver gang du legger inn en ny film?

 

edit: sånn å forstå at ant movie funker i linux?

Endret av r2d290
Lenke til kommentar
hehe... kammeraten min kom fra egypt igår, og han var vel ett av de siste flyene som fikk lov til å lande der pga været... dette var omtrent i 21-22 tiden. Var det da du også skulle ta flyet?

Jupp. 21:40 skulle flyet gå. Stod på Gardermoen i en og en halv time før de sa at ingen flere fly ville lette. Gøy å bruke 300 kr på flytoget til ingen nytte.

Jeg skjønner poengene dine i den første av de to siste poengene. Grunnen til at jeg skrev opp en del ting som "manglet" uten at det eksisterte på bra film, var egentlig fordi jeg var litt trøtt da jeg skrev det. Jeg snakket nemlig med en kammerat om de tingene, og laget en liste over hva som kanskje kunne forbedres (da gjort av han, og ikke deg), men så glemte jeg å fjerne det da jeg lagde lista til deg...

Om han gidder kan du jo få fikset det slik at det henter infoen som mangler fra imdb eller lignende. Selv bruker jeg bare infoen på TV-skjermen og der vil jeg for mye info heller. Blir fort uoversiktelig.

Men tusen takk for at du endret på scriptet... skal teste det nå...

Joda, ikke noe problem. (Jeg måtte jo uansett endre det for min egen del)

edit: så vidt jeg har forstått (uten å ha prøvd) funker strekkodeleser i ant movie også...

Jupp. Det skal fungere ja, men jeg har ikke testet det selv heller.

Lenke til kommentar
bra jobba, nå funka det veldig mye bedre...

Hehe. Det tok hele 5 minutter å fikse :)

men hadde det ikke vært en idè å få til en loop i det scriptet ditt, så du slipper å kjøre programmet hver gang du legger inn en ny film?

Satt og tenkte på det selv mens jeg la inn alle filmene som manglet info her. Du kan egentlig gjøre det selv. Over linjen while ($filmID !~ /\d+/) { skriver du inn en ny linje: while ($filmID ne "exit") {

 

og under linjen close BF; skriver du inn en }

 

Da vil scriptet loope til du skriver exit når den ber om filmID.

edit: sånn å forstå at ant movie funker i linux?

Nope. Jeg bruker ikke ant movie i det hele tatt. Men min PVR (altså PC-en jeg kjører TV gjennom) støtter filmlister i ant movie databaseformatet. Så jeg bare genererer xml filen på linux og kopierer den rett over på PVR maskinen, uten å være innom ant movie i det hele tatt.

Lenke til kommentar

Jeg har i det siste lagt inn alle mine nyanskaffede DVDer på filserveren. Path blir da sti til VIDEO_TS.IFO fila. F. eks.

 

z:\DVD\LOTR\VIDEO_TS\VIDEO_TS.IFO

 

Og om det er en DVD jeg ikke har kopiert inn på filserveren blir det da sti til samme fil på DVD-ROMEN. F. eks.

 

e:\VIDEO_TS\VIDEO_TS.IFO

 

OBS! For at dette funker trenger man et program som fjerner CSS realtime. Selv har jeg kjøpt DVDidle DVD Region+CSS Free

 

Det kan også være sti til f. eks. .avi eller .mpeg filer

Endret av cyclo
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...