This is a script for www.dvd-inside.de, www.dvd-inside.ch
Antoine, you can include it in the next release, if you want.
Corrections/Errors/Bug-Reports: in this thread, please.
Have fun.
Download at:
http://www.dev-zero.ch/projects/amc_scr ... e_v0.2.zip
=============================================
Code: Select all
// GETINFO SCRIPTING
// dvd-inside (DE/CH) import
(***************************************************
* Movie importation script for: *
* DVD-Inside (www.dvd-inside.de) *
* *
* v0.1 - 2. Week 2005: "From scratch" *
* v0.2 - 16.January 2005: "Rewritten" *
* *
* (c) 2004 Tiziano Müller *
* *
* This script is based on the IMDB-script. *
* So, credits go to the authors of the *
* IMDB-script. *
* *
* For use with Ant Movie Catalog 3.4.3 *
* www.antp.be/software/moviecatalog *
* *
* This program is free software; you can *
* redistribute it and/or modify it under the *
* terms of the GNU General Public License as *
* published by the Free Software Foundation; *
* either version 2 of the License, or (at your *
* option) any later version. *
***************************************************)
program dvd_inside;
const
CRLF = #13#10;
var
MovieName: string;
MovieURL: string;
function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
i: Integer;
begin
result := -1;
if StartAt < 0 then
StartAt := 0;
for i := StartAt to List.Count-1 do
if Pos(Pattern, List.GetString(i)) <> 0 then
begin
result := i;
Break;
end;
end;
function MyTrim(str_: string): string;
var
chars: array of char;
StrLen, i, LastSpacePos: integer;
begin
result := '';
str_ := StringReplace(str_, #9, '');
str_ := StringReplace(str_, #10, '');
str_ := StringReplace(str_, #13, '');
while Pos(' ', str_) = 1 do
begin
Delete(str_, Pos(' ', str_), 1);
end;
StrLen := Length(str_);
SetArrayLength(chars, StrLen);
for i := 0 to StrLen-1 do
begin
chars[i] := Copy(str_,i+1,1);
end;
str_ := '';
LastSpacePos := StrLen - 1;
if LastSpacePos > -1 then
begin
while chars[LastSpacePos] = ' ' do
begin
LastSpacePos := LastSpacePos - 1;
end;
for i:= 0 to LastSpacePos do
begin
str_ := str_ + chars[i];
end;
end;
str_ := StringReplace(str_, ' ', ' ');
while result <> str_ do
begin
result := str_;
str_ := StringReplace(str_, ' ', ' ');
end;
result := StringReplace(result, ' ,', ',');
end;
procedure CutAfter(var str_: string; Pattern: string);
begin
str_ := Copy(str_, Pos(Pattern, str_) + Length(Pattern), Length(str_));
end;
procedure CutBefore(var Str: string; Pattern: string);
begin
Str := Copy(Str, Pos(Pattern, Str), Length(Str));
end;
function GetStringBetween(str_, StartTag, EndTag: string): string;
var
BeginPos, EndPos: integer;
begin
result := '';
if EndTag = '' then
begin
EndPos := Length(str_);
end
else
EndPos := Pos(EndTag, str_);
BeginPos := Pos(StartTag, str_) + Length(StartTag);
if StartTag = '' then BeginPos := 1;
if BeginPos > 0 then result := Copy(str_, BeginPos, EndPos - BeginPos);
end;
function GetTrimmedStringBetween(str_, StartTag, EndTag: string): string;
begin
result := MyTrim(GetStringBetween(str_, StartTag, EndTag));
end;
// Extracts single movie detail (like director, genre) from page
function GetStringFromHTML(Page, StartTag, CutTag, EndTag: string): string;
begin
Result := '';
// recognition tag - if present, extract detail from page, otherwise assume detail is not present
if Pos(StartTag, Page) > 0 then begin
CutBefore(Page, StartTag);
// optional cut tag helps finding right string in html page
if Length(CutTag) > 0 then
CutAfter(Page, CutTag);
// movie detail copied with html tags up to end string
Result := Copy(Page, 0, Pos(EndTag, Page) - 1);
// remove html tags and decode html string
// HTMLRemoveTags(Result);
HTMLDecode(Result);
end;
end;
function StripHTMLTags(str_: string): string;
var
temp_char : char;
StrLen, i, CharPos : integer;
DoCopy : boolean;
begin
DoCopy := true;
CharPos := 0;
result := '';
StrLen := Length(str_);
for i := 1 to StrLen do
begin
temp_char := Copy(str_,i,1);
if temp_char = '<' then
begin
DoCopy := false;
continue;
end
else if temp_char = '>' then
begin
DoCopy := true;
continue;
end
else
begin
if DoCopy then
begin
result := result + temp_char;
end;
end;
end;
end;
procedure AnalyzeIndexPage(Address, Params: string);
var
IndexPage: TStringList;
Page: string;
begin
IndexPage := TStringList.Create;
Address := URLEncode(Address);
Params := URLEncode(Params);
IndexPage.Text := PostPage(Address,Params);
PickTreeClear;
PickTreeAdd('Search results', '');
AddMoviesTitles(IndexPage);
if PickTreeExec(Address) then
begin
Page := GetPage(Address);
AnalyzeMoviePage(Page, Address);
end;
IndexPage.Free;
end;
procedure AnalyzeMoviePage(Page,Address: string);
var
StrPosition: Integer;
StrTemp: string;
OriginalTitle, Country, Year, Genre, Studio, Region, EAN_Number, Distributor, AFK, Duration: string;
VideoFormat, ScreenFormat, ScreenSystem, Language, AudioFormat, Subtitle, MediaType, Disks: string;
Comments, Bonusmaterial, Packaging, TranslatedTitle, Director, Cast, Producer, Description: string;
Music, Screenplay: string;
begin
// Initializing the very important Comments
Comments := '';
// URL
SetField(fieldURL, Address);
// Translated title
TranslatedTitle := MyTrim(GetStringFromHTML(Page,'<b class="ueberschrift">','">','</b>'));
SetField(fieldTranslatedTitle, TranslatedTitle);
// Original-Title, Country and Year
StrTemp := MyTrim(GetStringFromHTML(Page, 'Originaltitel:','<td>','</td>'));
StrTemp := StripHTMLTags(StrTemp);
OriginalTitle := GetTrimmedStringBetween(StrTemp,'','(');
StrTemp := GetTrimmedStringBetween(StrTemp,'(',')');
Country := Copy(StrTemp,1,Length(StrTemp)-4);
Year := Copy(StrTemp,Length(StrTemp)-4,Length(StrTemp));
SetField(fieldOriginalTitle, OriginalTitle);
SetField(fieldCountry, Country);
SetField(fieldYear, Year);
// EAN-Number
EAN_Number := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'EAN-Nummer:','<td>', '</td>')));
Comments := Comments + 'EAN-Nummer: ' + EAN_Number + CRLF;
// Genre
Genre := '';
Genre := MyTrim(GetStringFromHTML(Page, 'Genre:', '<td>', '</td>'));
Genre := MyTrim(StripHTMLTags(Genre));
setField(fieldCategory, Genre);
// Studio
Studio := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Studio:','</td>', '</tr>')));
Comments := Comments + 'Studio: ' + Studio + CRLF;
// Distributor
Distributor := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Vertrieb:','</td>', '</tr>')));
Comments := Comments + 'Vertrieb: ' + Distributor + CRLF;
// Altersfreigabe
AFK := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Altersfreigabe:','</td>', '</tr>')));
Comments := Comments + 'Altersfreigabe: ' + AFK + CRLF;
// CountryCode
Region := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Ländercode:','</td>', '</tr>')));
VideoFormat := 'DVD Zone '+Region;
setField(fieldVideoFormat,VideoFormat);
// Duration
Duration := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Filmlänge:','</td>', '</tr>')));
Duration := StringReplace(Duration,' min','');
setField(fieldLength,Duration);
// Description
Description := GetStringFromHTML(Page, 'Inhalt:','</td>', '</tr>');
Description := StringReplace(Description, '<br />','*');
Description := MyTrim(StripHTMLTags(Description));
Description := StringReplace(Description, '*',CRLF);
setField(fieldDescription,Description);
// Actors
Cast := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Schauspieler:','</td>', '</tr>')));
setField(fieldActors,Cast);
// Director
Director := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Regie:','</td>', '</tr>')));
setField(fieldDirector,Director);
// Production
Producer := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Produzent:','</td>', '</tr>')));
setField(fieldProducer,Producer);
// Music
Music := '';
Music := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Music:','</td>', '</tr>')));
Comments := Comments + 'Musik: ' + Music + CRLF;
// Screenplay
Screenplay := '';
Screenplay := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Drehbuch:','</td>', '</tr>')));
Comments := Comments + 'Drehbuch: ' + Screenplay + CRLF;
// Screen format & system
ScreenFormat := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Format:','</td>', '</tr>')));
ScreenSystem := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'System:','</td>', '</tr>')));
setField(fieldResolution,ScreenSystem + ' - ' + ScreenFormat);
// Audioformat/Language
AudioFormat := '';
Language := '';
StrTemp := GetStringFromHTML(Page, 'Tonformate / Sprachen:', '</td>', '</td>');
StrTemp := StringReplace(StrTemp, '<br />','*') + '*';
StrTemp := MyTrim(StripHTMLTags(StrTemp));
while Pos('*',StrTemp) > 0 do
begin
AudioFormat := AudioFormat + ', ' + MyTrim(Copy(StrTemp,1,Pos(' in ',StrTemp)));
Language := Language + ', ' + MyTrim(Copy(StrTemp,Pos(' in ',StrTemp)+4,Pos('*',StrTemp)-(Pos(' in ',StrTemp)+4)));
CutAfter(StrTemp,'*');
end;
AudioFormat := Copy(AudioFormat,3,Length(AudioFormat));
Language := Copy(Language,3,Length(Language));
setField(fieldAudioFormat, AudioFormat);
setField(fieldLanguages, Language);
// Subtitles
Subtitle := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Untertitel:', '</td>', '</tr>')));
if Subtitle = 'Keine Untertitel' then Subtitle := '';
setField(fieldSubtitles, Subtitle);
// Mediatype
MediaType := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medientyp:','</td>', '</tr>')));
setField(fieldMediaType, MediaType);
// Disks
Disks := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medienanzahl:','</td>', '</tr>')));
setField(fieldDisks, Disks);
// Package
Packaging := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Verpackung:', '</td>', '</tr>')));
Comments := Comments + 'Verpackung: ' + Packaging + CRLF;
// Bonusmaterial
Bonusmaterial := MyTrim(GetStringFromHTML(Page, 'Bonus-Matrial:', '</td>', '</tr>'));
Bonusmaterial := StringReplace(Bonusmaterial,'<br />','*');
Bonusmaterial := MyTrim(StripHTMLTags(Bonusmaterial));
Bonusmaterial := StringReplace(Bonusmaterial,'*',CRLF);
Comments := Comments + CRLF + 'Bonusmaterial' + CRLF + '===========' + CRLF + Bonusmaterial + CRLF;
setField(fieldComments,Comments);
DisplayResults;
end;
procedure AddMoviesTitles(ResultsPage: TStringList);
var
Page: string;
MovieTitle, MovieAddress: String;
begin
Page := ResultsPage.Text;
while Pos('details.php', Page) > 0 do
begin
CutBefore(Page, 'details.php');
MovieAddress := 'http://www.dvd-inside.de/db/' + GetStringFromHTML(Page, 'details.php', '', '"');
MovieTitle := MyTrim(GetStringFromHTML(Page, 'details.php', '">', '</tr>'));
MovieTitle := StringReplace(MovieTitle, '</td>', ' | ');
MovieTitle := MyTrim(StripHTMLTags(MovieTitle));
CutAfter(Page, '</tr>');
PickTreeAdd(MovieTitle, MovieAddress);
end;
end;
begin
if CheckVersion(3,4,3) then
begin
MovieName := GetField(fieldOriginalTitle);
if MovieName = '' then
MovieName := GetField(fieldTranslatedTitle);
if Input('dvd-inside import', 'Enter the title of the movie:', MovieName) then
begin
AnalyzeIndexPage('http://www.dvd-inside.de/db/search.php', 'action=new&title='+MovieName+'&suchen=Suchen');
end;
end
else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.3)');
end.