Перейти к содержимому
  • Внимание!!!
  • Базы нашего форума работали неправильно и с ошибками. Пришлось восстанавливать базы от 9.09.2017. Из-за этого пользователи и сообщения были утеряны с этого числа. Просьба пройти регистрацию еще раз. Сожалеем о случившемся.
micha86

Пишем плагин всем хором.

Рекомендуемые сообщения

Всем привет для начала предоставлю сайт для которого будем писать плагин.

Это будет h t t p ://lookmix.org

Ознакомьтесь с сайтом загляните в исходный код(если кто не умеет то покажу).
Материалы для написания плагина в скоре начну предоставлять, думаю это будет на выходных по вечерам :)

Удачи в изучении сайта ;)

 

Редакторы файлов Windows "Notepad++" , Linux "Kate".

По синтаксису php и отдельным функциям буду отвечать в теме.

 

10.12.2016

Так думаю все кто хотел немного посмотрели исходники сайта.

 

Но для на чала начнем с плагина smotrimultik . он будет за основу. конечно можно взять и демо плагин но для новичков он будет сложноват  так как нас интересует только знакомство с самыми простыми функциями. (для начала).

 

Первое что нужно сделать это отредактировать пару файлов в плагине для этого распакуйте его или же как делаю я что для меня более удобно устанавливаю плагин а потом из под самой дюны редактирую плагин при помощи filezilla и sftp  из ltu(это на любителя).

 

Есть еще один способ можно через samba закидывать на первый диск и от туда редактировать то есть делаем каталог dune_plugins на первом диске и распаковываем плагин туда. после чего переименовываем каталог "dune_plugin_smotrimultik_v1.13" на "lookmix".

 

если решились со способом установки и распаковки то переходим к редактированию файлов.

 

первый файл это dune_plugin.xml внем нам нужно изменить название плагина и название каталога после установки а так же главный файл php его мы тоже для приличия переименуем

 

1.)

файл dune_plugin.xml

в строке

<name>SmotriMultik.ru</name>

меняем на

<name>lookmix</name>

это будет название каталога после установки

 

теперь строку

<caption>Смотри мультик.ru</caption>

на

<caption>Lookmix</caption>

это отображаемое название плагина в Dune интерфейсе.

 

ну и конечно главный файл строка 33

<program>SmotriMultik.php</program>

меняем на

<program>lookmix.php</program>

желаюцие чтобы плагин отображался в видео должны поменять строку 6

<parent_media_url>root://applications</parent_media_url>

на

<parent_media_url>root://video</parent_media_url>

все с этим файлом закончили его можно сохранить.

2.)

назабываем переименовать главный файл так как мы это сделали в xml файле. ведь именно с него стартует плагин.

меняем название с SmotriMultik.php на lookmix.php.

3.)

теперь переходим к файлу utils.php нас на данный момент интересует только одна строка номер 3

там меняем

define('HOST_API_URL',   'http://smotrimultik.ru');

на

define('HOST_API_URL',   'http://lookmix.org');

здесь мы назначили по всему плагину что HOST_API_URL является h t t p : / / lookmix . org и нам ненужно в каждой строчке прописывать этот хост а будем использовать эту константу и если хост поменяется то его нужно поменять только в этом файле.

сохраняем файл.

4.)

теперь переходим к файлу lookmix.php

там мы ищем методом поиска редактора следуещее "SMultik" и заменяем все что находим на "lookmix".

таким образом мы переименовали class файла и его id все это делается в первую очередь для порядка. хотя можно было и работать и без этого но раз мы делаем плагин lookmix  то и называться все должно в соответствии. :)

 

после того ка все переименовли идем к строке 2794 там мы увидим функцию private function lookmix_main($media_url, &$plugin_cookies)

этой функцией мы и будем делать парсинг категорий.

я уже написал парсинг и просто его прокоментирую

    private function lookmix_main($media_url, &$plugin_cookies)
    {
        set_time_limit(0);
        $api = HOST_API_URL;
        
        // download main video page
        $doc = HD::http_get_document($api); //скачиваем исходник сайта
        $doc = iconv('windows-1251', 'UTF-8', $doc); // конвертируем кодировку для отображения кирилицы на dune
    
        // get list of categories
        $tmp = explode('<div class="menu">', $doc); //разбиваем исходник на на 3 части так как<div class="menu">
                                                    //встречается 2 раза на сайте
        $main_menu_block = strstr($tmp[1], '</div>', true); //отсекаем 1 и 3 часть они нам ненужны
        
        hd_print("--->>> main_menu_block: $main_menu_block");
        
        $videos = explode('<li><a href="', $main_menu_block);//разбиваем документ на массив и получаем в каждом 
                                                             //разделе категорию и название
        // exclude before first <li
        unset($videos[0]); // очищаем мусор который остался от меню
        $videos = array_values($videos); // нумерируем полученный массив

        $items = array();
    
        // push 'Последние поступления' category in to categories list

        hd_print('Before parsing: Categories count: ' . count($videos) + 1);

        // iterate through categories
        foreach($videos as $video) //перебираем массив
        {
            // get category view reference
//            $tmp = explode('<a href="', $video);  
            $category_ref = strstr($video, '"', true); // обрезаем лишнее и получаем кусок ссылки от категории
                                     
            hd_print("--->>> category_ref: $category_ref");

            // get category title 
            $tmp = explode('">', $video); // опять же разбиваем строку на части 
            $category_name = strstr($tmp[1], '<', true); //И отсекаем ненужное при этом получаем название категории
        
            hd_print("--->>> category_name: $category_name");
        
            // push category in to categories list
            array_push // заполняем полученное в массив для плагина
            (
                $items,
                array
                (
                    PluginRegularFolderItem::caption => $category_name,
                    PluginRegularFolderItem::view_item_params => self::$catalog_vip,
                    PluginRegularFolderItem::media_url =>
                            HD::encode_user_data
                            (
                                array
                                (
                                    'subcategory_ref' => $category_ref,
//                                    'category_id' => $category_id,
//                                    'category_items_count' => $category_items_count
                                )
                            )
                )
            );
        }

        hd_print('After parsing: Categories count: ' . count($items));
        
        return $items;
    }

можно просто скопировать  функциию от  первой { и до последней } и вставить в файл.

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

 

5.)

 

переходим к файлу cursor.php

ищем строку 81   private function parse_subcategory()

в этой функции меняем переключение страниц с 1 на вторуюю и так далее

строка 91 меняем

$url = $url . '?page=' . ($this->m_feed + 1);

на

$url = $url . 'page/' . ($this->m_feed + 1) . '/';

теперь переходим к функции парсинга фильмов то есть название, картинка, ссылка

 

 функция это на строке 27   private function parse_page($url)

опять же вставлю готовый парсинг и прокоментирую

    private function parse_page($url)
    {
        $api = HOST_API_URL;
        
        $items = array();

        $doc = HD::http_get_document($url); //скачиваем исходник сайта
        $doc = iconv('windows-1251', 'UTF-8', $doc); // конвертируем кодировку для отображения кирилицы на dune

        $tmp = explode("<div id='dle-content'>", $doc); // разбиваем сайт на части
        $content_block = strstr($tmp[1], ' <div class="menu">', true); // и вытаскиваем только часть с фильмами
        
        $videos = explode('<div class="shorttt">', $content_block); // разбиваем на фильмы
        unset($videos[0]); // очищаем мусор который остался от сайта
        $videos = array_values($videos); // нумерируем полученный массив

        foreach($videos as $video) //перебираем массив
        {
            // тут я решил что будет удобней обыскать строчки на совпадения и если такие имеются то назначаем переменные
            if(preg_match('/<img src="([^"]*)" alt="([^"]*)"\/>/i', $video, $matches))
            {
             $season_image = $api . $matches[1]; // получаем картинку
             $season_title = $matches[2]; //получаем название
            }
            if(preg_match('/<a href="([^"]*)" class="nnnz"/i', $video, $matches))
            {
             $season_ref = $matches[1]; // получаем ссылку
            }
            // таким образом пишем в лог файл dune чтобы увидеть что получили           
            hd_print("--->>> season_ref: $season_ref");
            hd_print("--->>> season_title: $season_title");
            hd_print("--->>> season_image: $season_image");
            
            array_push // Наполняем полученное
            (
                $items,
                HD::encode_user_data
                (
                    array
                    (
                        'video_id' => $season_ref,
                        'season_title' => $season_title,
                        'season_ref' => $season_ref,
                        'season_image' => $season_image,
                        'is_has_new' => false
                    )
                )
            );
            ++$this->m_items_count;
        }
        
        return $items;
    }

опять же можно просто скопировать  функциию от  первой { и до последней } и вставить в файл.

 сохранить и перезагрузить плагин чтобы измененные файлы обновились и код был задействован.

 

теперь увидим зайдя в категории что там находятся фильмы.

 

 

 

продолжение следует :) Удачи!!

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет объясните про исходный код пожалуйста.

Прошу прощения! Возможно это Вам поможет: http://linchakin.com/posts/post/89

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Привет объясните про исходный код пожалуйста.

Прошу прощения! Возможно это Вам поможет: http://linchakin.com/posts/post/89
Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

привет

поддерживаю

интересно

но 

лучше рассмотреть на примере более интересном  h t t p: //zerx.co/

Можно. Но для начало должно быть все очень просто . Не сильно заморачиваться на красоте а на основном функционале.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мужики изучаем я думаю пока хватит. потом будет еще.

 

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

незнаю как наш admin делает помоему через программу denwer там он кажись проверяет свои наработки :) что совершенно нормально.

я же злой буратино и делаю все на linux и некоторым покажется что через одно место.

опишу в кратце

 

создаю черновик в нем прописываю

#!/usr/bin/php
<?php

echo "test test lapuch";

?>

и потом просто исполняю этот файл в косоли на черниньком экране

 

./tshernowik

и получаю о чудо

 

test test lapuch

 

:D

 

короче дерзайте!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Именно так я начинал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если не затруднит для особо одаренных:-) немного поподробнее

Непонятно как это рассматривать и открывать в браузере или в php коде?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вечером подробно отвечу. Как у вас php выглядит где мне начинать объяснять с назначения переменных? Синтаксиса? Или работа с функциями?

Не в обиду просто хочется знать как подробно нужно объяснить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какие могут быть обиды,скорее всего чтобы вас не доставать дурными вопросами я откажусь от идеи научиться делать плагины.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какие могут быть обиды,скорее всего чтобы вас не доставать дурными вопросами я откажусь от идеи научиться делать плагины.

Так что я вас уже так быстро напугал? :) Эти дела требуют терпения и усидчивости.

Так насколько подробно мне разложить описание? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

К примеру здесь вы выложили готовые персинг к сайту а как добыть оригинал я не понял.

Попробую ответить. Из первого выложенного. Это категории.

Вам весь код не нужен, для этого и пишем парсинг. Т.е. отсекаем ненужный код.

$tmp = explode('<div class="menu">', $doc); //        <div class="menu"> //до начала меню в исходном коде
$main_menu_block = strstr($tmp[1], '</div>', true); //      </div>  чем закрывается код

Т.е. если в браузере открыли и видите кучу кода. Ищите меню.

Будет примерно так:

<div class="menu">
......
ЗДЕСЬ ВСЕ КАТЕГОРИИ
..........
</div>

Первый код (<div class="menu">) , желательно, чтобы не повторялся. На каждом сайте они могут быть разные.

Далее уже из отсеченного нами меню:

$videos = explode('<li><a href="' //    <li><a href="    начало ссылки на каждую категорию, в коде все одинаковы

Ниже вроде все понятно написано. В коде на сайте вы увидите.

<li><a href="ССЫЛКА">НАЗВАНИЕ КАТЕГОРИИ</a></li>
$tmp = explode('<a href="', $video); // начало
$category_ref = strstr($video, '"', true); // обрезаем лишнее и получаем кусок ссылки от категории

Тоже самое проделываем для названия категории

$tmp = explode('">', $video); // опять же разбиваем строку на части 
$category_name = strstr($tmp[1], '<', true); //И отсекаем ненужное при этом получаем название категории

Итог.

Нам для категорий нужны шесть "строчек" из исходного кода на сайте.

То, что вы далее видите в коде выложенном micha86, это "составление в кучу для Дюны".

В основном, всегда одинаково в подобных плагинах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да это объяснять не надо спасибо. Было бы не плохо одно видео на весь процесс изготовления плагина если такое возможно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


×