Дата выхода движка кинопортала

Работы по оптимизации бесплатного кинопортала ведутся, но очень медленно, так как нет времени и мотивации, но руки не опускаются, и с каждым днём на полном автомате пополняется база фильмов и сериалов.

По мимо скрипта кинопортала, у меня ещё есть несколько проектов, которые приходится поддерживать и раскручивать.

Думаю, что в конце мая, я выставлю движок кинопортала в открытый доступ, и постепенно буду создавать уже шаблоны для движка и разные дополнения. Идей много, но времени мало. 

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

Проблемы содержания кинопортала

Кинотеатр онлайн, берёт информацию и плеер с фильмами с базы данных, по api. Но бывает так, что фильмы в интернете появляются гораздо раньше, чем на больших экранах, и тогда начинаются проблемы с авторскими правами. 

Зачастую присылают письмо на email, с просьбой удалить контент нарушающий исключительные авторские права на фильм или сериал, в свою очередь вы удаляете информацию с плеером, по конкретному адресу урл, и уведомляете об этом право.

Позже можно возобновить данную страницу, но ваш сайт уже будет в чёрном списке Роспотребнадзора.

Подробнее о готовом движке кинопортала

Многие вебмастера выбирают движок для своего портала о кино из уже популярных пиратских CMS. Пример такого движка это DLE. Но подумайте, какие минусы этого решения?

Я же предлагаю рассмотреть бесплатное решение о использовании написанного мной скрипта для создания кинопортала, с просмотром фильмов онлайн. Рассмотрим возможности данного движка:

  1. Парсинг содержания о фильме с 2-х сторонних общедоступных баз данных.
  2. Автоматическое добавление фильмов на сайт по крону, например в примере добавляется один фильм в минуту.
  3. Добавление фильма по ID кинопоиска в ручную.
  4. Возмозность смотреть фильм онлайн.
  5. Добавление персон к фильму с фотографиями актёров, режиссёров, сценаристов и т.д
  6. Вывод фильмов по жанрам, актёрам и т.д

Вот уже работающий сайт на этом движке — newtvseries.ru и hdkinoportal.ru

Какие данные о фильме собираются, вы можете увидеть на сайте http://newtvseries.ru/

Сейчас в базе с фильмами более 20 тысяч кинофильмов и сериалов. С 99% гарантией могу заверить, что все новые фильмы появляются на сайте, как только они появляются в интернете.

Недавно сделал, но ещё не оптемизировал подбор похожих фильмов с тем который вы сейчас смотрите. Подбираются и сравниваются по жанрам, ещё хочу добавить блок с выводом фильмов с такими же актёрами.

Процесс разработки интересен и приносит не плохой результат. В итоге получился самонаполняемый кино портал

Подробнее

Кинопортал с нуля

Создание сайта о кино, с возможностью просмотра фильмов онлайн и автоматическим наполнением.

Цель данной статьи: Описать возможности движка и рассказать о реализации этих возможностей.

План создания кинопортала онлайн:

  1. Регистрация домена и хостинга, подходящего функционалу будущего сайта.
  2. Выбор программного  обеспечения и среды программирование. Framework Phancon.
  3. Создание структуры приложения, организация каталогов и создание начального приложения PHALCON.
  4. Определение маршрутов будущего приложения: сайта кино.
  5. Получение данных о фильме по id кинопоиска и обработка запроса.
  6. Создание моделей базы банных Фильма, Жанров и Персон, организация хранения данных в базе mysql.
  7. Отношение моделей базы данных многие ко многим.
  8. Сохранение информации о фильме в базе данных.
  9. Вывод информации из базы и отображение данных о фильме на сайте.
  10. Категоризация данных на сайте, жанры, типы, персоны, года, страны.

Регистрация домена и хостинга

Хостинг в первую очередь должен быть производительным и поддерживать расширение php phalcon. Phalcon производительный фреймворк и очень удобен в использовании. Есть хорошая и полная документация по этому Фреймворку.

Я не буду ходить вокруг и около, а лишь скажу что благодаря этому хостингу я и пишу эту статью. Знакомьтесь, не дорогой, но качественный хостинг сайтов — ПЕРЕЙТИ. На этом хостинге есть возможность подключить это расширение самостоятельно, к тому же возможно выбирать версию php. Нам подойдёт версия от 5.5 и выше.

Ну а домен легко зарегистрировать на сайте 2domains.ru , стоимость не будет превышать 100 рублей в год.

Выбор программного  обеспечения

Программное обеспечение это как раз и есть phalcon framework. Почему именно он? Это просто моя прихоть, на самом деле подойдёт любой php фрамеворк для создания онлайн кинотеатора, просто мне нравится что код этого программного обеспечения скрыт в php расширении и не отвлекает от организации структуры  своего приложения. Свобода действий и нет лишнего кода.

Создание структуры приложения

Тут достаточно просто и легко. Создаём файл .htaccess в корне вашего домена (сайта) и пишем следующий код.

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteRule ^$ public/ [L]
 RewriteRule (.*) public/$1 [L]
</IfModule>

Данный код будет перенаправлять все запросы к вашему сайту в папку public

Создайте папку public в корне вашего сайта, и внутри неё создайте папки css, js, images, и файлы .htaccess и index.php 

В файл .htaccess добавьте следующее содержание:

AddDefaultCharset UTF-8

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?_url=/$1 [QSA,L]
</IfModule>

Данный код позволит все запросы к вашему сайту отдавать на обработку в файл index.php . Но другие файлы и ресурсы будут доступны по прямым запросам. Это требование к использованию Phalcone.

Что касается файла index.php, его содержание ниже.

<?php
error_reporting(E_ALL);
try {
 define('APP_PATH', realpath('..') . '/');
 $config = include __DIR__ . "/../app/config/config.php";
 include __DIR__ . "/../app/config/loader.php";
 include __DIR__ . "/../app/config/services.php";
 $application = new \Phalcon\Mvc\Application();
 $application->setDI($di);
 echo $application->handle()->getContent();
} catch (Phalcon\Exception $e) {
 echo $e->getMessage();
} catch (PDOException $e) {
 echo $e->getMessage();
}

Что мы видим выше? Основное это подключение конфигурации приложения, автозагрузчика классов,  регистрация сервисов и инициализация самого приложения.

Теперь создадим структуру папок и файлов самого приложения

app/
-- config/
     -- config.php
     -- loader.php
     -- routes.php
     -- services.php
-- molels
      -- Films.php
-- controllers
       -- ControllerBase.php
       -- FilmController.php
-- views
        -- layouts/
              -- index.twig
        --  film/
               -- index.twig
               -- show.twig
-- cache
-- forms
-- library
-- plugins

На самом деле приложение очень простое, просто я немного забежал вперёд, в создании структуры приложения, думаю дальше вы поймёте почему.

И так, пойдём по порядку

Файл конфигурации приложения содержит в себе информацию о подключении к базе данных и список директорий приложения где хранятся файлы классов для автозагрузки. Содержимое файла config.php

<?php
use Phalcon\Config;
return new Config(
 [
 "database" => [
 "adapter" => "Mysql",
 "host" => "localhost",
 "username" => "имя пользователя базы",
 "password" => "пароль к базе",
 "dbname" => "имя базы данных",
 ],
 "application" => [
 "controllersDir" => __DIR__ . "/../../app/controllers/",
 "modelsDir" => __DIR__ . "/../../app/models/",
 "viewsDir" => __DIR__ . "/../../app/views/",
 "pluginsDir" => __DIR__ . "/../../app/plugins/",
 "libraryDir" => __DIR__ . "/../../app/library/",
 "cacheDir" => __DIR__ . "/../../app/cache/",
 "baseUri" => "/",
 'formsDir' => __DIR__ . "/../../app/forms/",
 "token" => "",
 ],
 ]
);

Думаю вопросы не появятся к этому файлу рассмотрев содержимое файла loader.php

<?php

use Phalcon\Loader;

$loader = new Loader();

$loader->registerDirs(
 [
 $config->application->controllersDir,
 $config->application->modelsDir,
 $config->application->pluginsDir,
 $config->application->libraryDir,
 $config->application->formsDir,

 ]
);
$loader->registerClasses([

]);

$loader->register();

Как уже видите мы указали данные конфигурации из файла в настройки автозагрузчика классов.

Но самое главное идёт в следующем файле services.php

<?php

use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Url as UrlResolver;
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
use Phalcon\Mvc\View\Engine\Volt as VoltEngine;
use Phalcon\Mvc\Model\Metadata\Memory as MetaDataAdapter;
use Phalcon\Session\Adapter\Files as SessionAdapter;
use Phalcon\Mvc\View\Engine\Php as PhpViewEngine;
//use Exception;
//use Phalcon\Dispatcher;
use Phalcon\Mvc\Dispatcher as Dispatcher;
use Phalcon\Events\Event;
use Phalcon\Events\Manager as EventsManager;
use Phalcon\Mvc\Dispatcher\Exception as DispatchException;

$di = new FactoryDefault();

$di->setShared('router', function () {
 return require __DIR__ . '/routes.php';
});

$di->set(
 "url", function () use ($config) {
 $url = new UrlResolver();
 $url->setBaseUri(
 $config->application->baseUri
 );
 return $url;
}, true
);

$di->set(
 "view", function () use ($config) {
 $view = new View();
 $view->setViewsDir(
 $config->application->viewsDir
 );
 $view->registerEngines(
 [
 ".twig" => function ($view, $di) use ($config) {
 $volt = new VoltEngine($view, $di);
 $volt->setOptions(
 [
 "compiledPath" => $config->application->cacheDir,
 "compiledSeparator" => "_",
 //'compileAlways' => true
 ]
 );
 return $volt;
 },
 // Generate Template files uses PHP itself as the template engine
 ".phtml" => PhpViewEngine::class,
 ]
 );
 return $view;
 }, true
 );

$di->set(
 'db', function () use ($config) {
 return new DbAdapter(
 [
 "host" => $config->database->host,
 "username" => $config->database->username,
 "password" => $config->database->password,
 "dbname" => $config->database->dbname,
 "options" => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'),
 ]
 );
 }
 );

$di->set(
 "modelsMetadata", function () use ($config) {
 return new MetaDataAdapter();
 }
 );
 /**
 * Start the session
 */
 $di->set('session', function() {
 $session = new \Phalcon\Session\Adapter\Files();
 $session->start();
 return $session;
 }, true);


 $di->setShared(
 "dispatcher", function () {
 $eventsManager = new EventsManager;
 /**
 * Check if the user is allowed to access certain action using the SecurityPlugin
 */
 //$eventsManager->attach('dispatch:beforeDispatch', new SecurityPlugin);
 /**
 * Handle exceptions and not-found exceptions using NotFoundPlugin
 */
 $eventsManager->attach('dispatch:beforeException', new NotFoundPlugin);
 $dispatcher = new Dispatcher;
 $dispatcher->setEventsManager($eventsManager);
 return $dispatcher;
 }
 );

use Phalcon\Flash\Direct as FlashDirect;
 use Phalcon\Flash\Session as FlashSession;

/**
 * Register the flash service with custom CSS classes
 */
 $di->set('flash', function() {
 return new FlashSession(array(
 'error' => 'alert alert-danger',
 'success' => 'alert alert-success',
 'notice' => 'alert alert-info',
 'warning' => 'alert alert-warning'
 ));
 });


Дело в том, что тут подключается вся функциональность нашего приложения, подробнее об этом будет описано далее, а пока что нам нужен файл маршрутизации нашего киносайта, создадим его в следующей статье…