Как писать скрипты для Movienizer?

Добавление новых сайтов в Movienizer. Индивидуальная настройка программы.
Locked
User avatar
maniac
Developer
Posts: 4407
Joined: Wed Jan 23, 2008 11:06 am
Location: La Prairie, Canada
Contact:

Как писать скрипты для Movienizer?

Post by maniac » Wed Jan 23, 2008 4:35 pm

Вы можете самостоятельно добавить импорт данных с любых сайтов. Получение данных можно разбить на 2 типа: скачивание информации о человеке или фильме. Скрипты написаны на Паскале и хранятся в каталоге %APP_DATA%\Movienizer\Scripts. Для скачивания информации о фильме файлы носят имя типа site_movie.pas, по людям - site_person.pas, где _movie.pas и _person.pas служит для программы признаком типа скрипта.

Написание скрипта для получения информации о фильме.

Условно можно выделить несколько функций, которые вызываются из основной программы:

//получение название фильма по штрих-коду
function GetMovieNameByUPC(barcode: string): string;

//формирование URL для поиска фильма на сайте по названию
function GetSearchURLbyName(MovieName: string): string;

//загрузка html-документа по поисковому URL
function DownloadSearchURL(url: string): integer;

//формирование URL с информацией о фильме по коду фильма в формате сайта
function GetMovieURL(code: string; images_only: boolean): string;

//сохранение картинки по ее URL в выбранный файл
function SaveFrontCover(url, FileName: string): boolean;

//загрузка картинок
procedure GetImages;

//получение данных по фильму по URL
//images_only - признак закачки только картинок
function GetInfo(url: string; images_only: boolean): string;

При вызове этой функции устанавливаются след. переменные:
title - название фильма
year - год выпуска
country - страна
description - описание фильма
duration - продолжительность в минутах
imdb_code - IMDB код фильма
movie_code - код фильма в формате сайта
movie_site_url - URL сайта по фильму
imdb_rating - IMDB рейтинг
script_name - название скрипта

Кроме этого из скрипта могут вызываться функции для задания данных в самой программе:

//задание жанра
procedure SetGenre(name: string);

//задание страны
procedure SetCountry(name: string);

//задание людей, которые приняли участие в фильме
procedure SetPersonName(name, character: string; mode: integer; code: string);
name - имя человека
character - кого играл
mode - режим человека, 1=директор, 2=сценарист, 3=актер
code - код человека в формате сайта

//установка результатов поиска
procedure SetSearchResult(name, code: string; ind: integer);
name - название того, что найдено
code - код в формате сайта
ind - номер результата (в будущем не будет использоваться)

//задание фильмов, в которых участвовал человек
procedure SetMovieName(name, character: string; mode: integer; code, year: string);
name - название фильма
character - кого играл
mode - кем был, 1=директор, 2=сценарист, 3=актер
code - код человека в формате сайта
year - в каком году вышел фильм

//задание списка картинок
procedure SetImageName(path, url, description: string; mode: integer);
path - имя файла
url - URL картинки
description - описание картинки
mode - вид картинки:
1=Front cover
2=Back cover
3=Shot from the movie
4=Poster
5=User image
6=Photo

В скриптах можно использовать свои функции для обработки строк и т.п.

Про возможности FastScript можно найти информацию на официальном сайте:
http://fast-report.com/ru/products/fast-script.html

Перед написанием своих скриптов изучите стандартные, которые идут с программой. Опыт показал, что на программирование скрипта человеку, незнакомому с Паскалем, но разбирающимся в языках высокого уровня, требуется 2-3 часа.

Из скриптов можно вызывать переменные и функции основной программы:

//символ дробной части
var DecimalSeparator: char;

//работа с регулярными выражениями, часто глючит,
//поэтому лучше переписать своими ф-ми
function ParseString(all, s: string; nom: integer): string;

//удаление конца строк с помощью регулярных выражений
//лучше не использовать
function RemoveEndLines(all: string): string;

//преобразование html-текста в plain-text
function RemoveTags(all: string): string;

//переводит строку вида Jean-François Richet в нормальный текстовый вид
function DecodeHTML(all: string): string;

//скачивает URL и возвращает его в виде строки.
//если не удалось скачать, то возвращает -1
//код ответа сервере хранит в глобальной переменной GetResponseCode
function DownloadURL(URL: string): string;

//скачивает заданный URL и указывает HTTP_REFERER
//если referer=post, то запрос из URL, составленный по методу GET,
//передается по методу POST
function DownloadURLWithReferer(url, referer: string): string;

//в строке s ищет s1 и заменяет на s2
//например, для замены пробелов на плюс надо написать
//url:=ReplaceStr(url, ' ', '+', -1);
function ReplaceStr(s, s1, s2: string; ind: integer): string;

//поиск подстроки substr в строке s начиная с позиции ind
function MyPos(substr, s: string; ind: integer): Integer;

//удаление начальных и конечных пробелов
function ClearExtraSpaces(s: string): string;

//удаление начальных и конечных кодов <32
function ClearExtraCharacters(s: string): string;

===
Получение данных можно разбить на подзадачи.

1. Поиск фильма.
2. Загрузка данных по фильму.

1. Поиск фильма.
Если задали штрих-код, то ищем по нему название фильма с помощью GetMovieNameByUPC.

Когда название фильма известно, то надо сформировать URL для обращения к поиску на сайте. Для этого вызывается GetSearchURLbyName.

Потом нужно вызвать DownloadSearchURL, чтобы получить список фильмов, которые похожи на то название, что ищем. В этой функции скрипт должен
сформировать список при помощи SetSearchResult.

2. Загрузка данных по фильму.
Загрузка данных по фильму происходит при помощи функции GetInfo. Там должны быть установлены переменные, относящиеся к фильму, сформированы списки жанров, актеров и т.п., скачаны картинки.

===
Вопросы по написанию скриптом задавайте в новых топиках.
ImageImage

Locked