const //Parse results prError = 0; prFinished = 1; prList = 2; prListImage = 3; prDownload = 4; //Credits types ctActors = 0; ctDirectors = 1; ctWriters = 2; ctComposers = 3; ctProducers = 4; //Script data SCRIPT_VERSION = '0.1'; SCRIPT_NAME = 'DMM (Anime info.) [JP]'; SCRIPT_DESC = '[JP] Get anime information from dmm.co.jp'; SCRIPT_LANG = $11; //Japanese SCRIPT_TYPE = 0; //Movies CODE_PAGE = 20932; //EUC-JP RATING_NAME = 'Avg'; BASE_URL = 'http://unblockdmm.com'; SEARCH_STR = BASE_URL +'/browse.php?u=http%3A%2F%2Fwww.dmm.co.jp%2Fsearch%2F%3D%2Fsearchstr%3D%s%2Fsort%3Ddate%2Fview%3D%2F&b=0&f=norefer'; //also include VOD and Blu-ray (lots of duplicate search results) //SEARCH_STR = BASE_URL +'/allsearch/search?q=%s'; var ParsingMovie: Boolean; PosterURL: string; ScreenshotsURL: string; function GetScriptVersion: string; begin Result := SCRIPT_VERSION; end; function GetScriptName: string; begin Result := SCRIPT_NAME; end; function GetScriptDesc: string; begin Result := SCRIPT_DESC; end; function GetRatingName: string; begin Result := RATING_NAME; end; function GetScriptLang: Cardinal; begin Result := SCRIPT_LANG; end; function GetCodePage: Cardinal; begin Result := CODE_PAGE; end; function GetBaseURL: AnsiString; begin Result := BASE_URL; end; function GetDownloadURL: AnsiString; begin if PosterURL <> '' then Result := PosterURL else Result := SEARCH_STR; LogMessage(SEARCH_STR); end; function GetScriptType: Byte; begin Result := SCRIPT_TYPE; end; function GetCurrentMode: Byte; begin if ParsingMovie then Result := 1 else Result := 0; end; function HTMLValue(HTML: string; StartPos, EndPos: Integer; StartValue, EndValue: string): string; var ValueStart, ValueEnd: Integer; begin ValueStart := PosFrom(StartValue, HTML, StartPos); if (ValueStart > 0) and ((ValueStart < EndPos) or (EndPos = 0)) then begin ValueStart := ValueStart + Length(StartValue); ValueEnd := PosFrom(EndValue, HTML, ValueStart); Result := Trim(HTMLToText(RemoveTags(Copy(HTML, ValueStart, ValueEnd - ValueStart), True))); end else Result := ''; end; procedure AddHTMLValue(HTML, Field: string; StartPos, EndPos: Integer; StartValue, EndValue: string); var Value: string; begin Value := HTMLValue(HTML, StartPos, EndPos, StartValue, EndValue); if Value <> '' then begin LogMessage(Field +': '+ Value); AddFieldValueXML(Field, Value); end else LogMessage(Field +' not found'); end; procedure ParseMovie(URL, HTML: string); var CastURL, Cast, Genre, Year, Rdate, mLength, mRating: string; StartPos, EndPos: Integer; begin AddFieldValueXML('url', URL); //Poster StartPos := Pos('
', HTML); PosterURL := HTMLValue(HTML, StartPos, 0, '', HTML); EndPos := (PosFrom('
', HTML, StartPos)-25); while (StartPos > 0) and (StartPos < EndPos) do begin ScreenshotsURL := Trim(TextBetween(HTML, 'img src="', '"', False, StartPos)); ScreenshotsURL := StringReplace(ScreenshotsURL, '-', 'jp-', False, False, True); LogMessage('screenshots: '+ ScreenshotsURL); AddImageURL(1, ScreenshotsURL); StartPos := PosFrom('
', HTML, StartPos); end; //Title //AddHTMLValue(HTML, 'title', 0, 0, '', ''); AddFieldValueXML('country', 'Japan'); AddFieldValueXML('origlang', 'Japenese'); AddFieldValueXML('rip', 'DVDRip'); //Tagline & Description StartPos := Pos('
', HTML); if StartPos > 0 then begin AddHTMLValue(HTML, 'description', StartPos, 0, '

', '<'); end else LogMessage('tagline/description not found'); //Series add to writer item StartPos := Pos('

', HTML); StartPos := PosFrom('">シリーズ:', HTML, StartPos); Cast := Trim(TextBetween(HTML, '>', '<', False, StartPos)); if Cast <> '----' then begin CastURL := BASE_URL + Trim(TextBetween(HTML, 'href="', '"', False, StartPos)); Cast := Trim(TextBetween(HTML, '">', '<', False, StartPos)); LogMessage('writer: '+ Cast +', url: '+ CastURL); AddMoviePerson(Cast, '', '', CastURL, 2); end else LogMessage('writer not found'); //Studio StartPos := Pos('
', HTML); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', ''); //Label StartPos := Pos('
', HTML); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', '<', False, StartPos)); if Cast <> '----' then begin CastURL := BASE_URL + Trim(TextBetween(HTML, 'href="', '"', False, StartPos)); Cast := Trim(TextBetween(HTML, '">', '<', False, StartPos)); LogMessage('producer: '+ Cast +', url: '+ CastURL); AddMoviePerson(Cast, '', '', CastURL, 4); StartPos := PosFrom('', HTML, StartPos); end else LogMessage('producer not found'); //Rating StartPos := Pos('
', HTML); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); mRating := Trim(TextBetween(HTML, 'alt="', '"', False, StartPos)); if Length(mRating) = 2 then begin Delete(mRating, 2, 1); end else Delete(mRating, 4, 1); if mRating <> '0' then begin mRating := FloatToStr(StrToFloat(mRating)*2); LogMessage('imdbrating: '+ mRating); AddFieldValueXML('imdbrating', mRating); end else LogMessage('imdbrating not found'); //Duration StartPos := Pos('
', HTML); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); mLength := Trim(TextBetween(HTML, '', '', False, StartPos)); if mLength <> '----' then begin if Length(mLength) <> 4 then begin Delete(mLength, 3, 1); end else Delete(mLength, 4, 1); LogMessage('length:'+ mLength); AddFieldValue(14, mLength); end else LogMessage('duration not found'); //Year & Date StartPos := Pos('
', HTML); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); Rdate := Trim(TextBetween(HTML, '', '', False, StartPos)); LogMessage('rdate:'+ Rdate); Year := Rdate Delete(Year, 5, 6); Delete(Rdate, 1, 5); LogMessage('year:'+ Year); Rdate := (Rdate + '/' + Year); LogMessage('rdate:'+ Rdate); AddFieldValueXML('year', Year); AddFieldValueXML('rdate', Rdate); //Genre StartPos := Pos('
', HTML); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); StartPos := PosFrom('', HTML, StartPos); EndPos := (PosFrom('', HTML, StartPos)-25); while (StartPos > 0) and (StartPos < EndPos) do begin Genre := Trim(TextBetween(HTML, '>', '', False, StartPos)); LogMessage('genre: '+ Genre); AddFieldValue(5, Genre); StartPos := PosFrom('', HTML, StartPos); end; end; procedure ParseSearchResults(HTML: string); var ItemStart, ItemEnd: Integer; Title, Studio, Year, URL, Preview: string; begin ItemStart := Pos('

', HTML); while ItemStart > 0 do begin ItemEnd := PosFrom('

', HTML, ItemStart+1); URL := BASE_URL + HTMLValue(HTML, ItemStart, ItemEnd, '', HTML) > 0 then begin LogMessage('movies found'); ParseSearchResults(HTML); Result := prList; end // If no movies are found else if Pos('

', HTML) > 0 then begin LogMessage('No movie found'); Result := prError; end // If page contains a movie else if Pos('