Перейти к содержимому


Фотография
* * * * * 1 Голосов

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

Обучение php

Сообщений в теме: 99

#1 OFFLINE   micha86

micha86

    Пользователь

  • Moderators
  • 429 сообщений

Отправлено 06 December 2016 - 23:01

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

Это будет 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;
    }

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

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

 

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

 

 

 

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

 

 

 

 


  • miouser и gorr это нравится

#2 OFFLINE   maloj123

maloj123

    Пользователь

  • Advanced
  • 53 сообщений

Отправлено 07 December 2016 - 07:45

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

#3 OFFLINE   gorr

gorr

    Новичок

  • Members
  • 43 сообщений

Отправлено 07 December 2016 - 12:35

привет

поддерживаю

интересно

но 

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



#4 OFFLINE   braverheart74

braverheart74

    Пользователь

  • Advanced
  • 163 сообщений

Отправлено 07 December 2016 - 12:38

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

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



#5 OFFLINE   maloj123

maloj123

    Пользователь

  • Advanced
  • 53 сообщений

Отправлено 07 December 2016 - 14:06


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

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

#6 OFFLINE   micha86

micha86

    Пользователь

  • Moderators
  • 429 сообщений

Отправлено 07 December 2016 - 19:16

привет

поддерживаю

интересно

но 

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

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


  • gorr это нравится

#7 OFFLINE   micha86

micha86

    Пользователь

  • Moderators
  • 429 сообщений

Отправлено 11 December 2016 - 00:25

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

 

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

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

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

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

 

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

#!/usr/bin/php
<?php

echo "test test lapuch";

?>

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

 

./tshernowik

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

 

test test lapuch

 

:D

 

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



#8 OFFLINE   Limpopo1967

Limpopo1967

    Новичок

  • Members
  • 18 сообщений

Отправлено 11 December 2016 - 10:57

Cпасибо, кажись началось получатся! Только пока видео смотреть нельзя, и настроек плагина нет.

#9 OFFLINE   micha86

micha86

    Пользователь

  • Moderators
  • 429 сообщений

Отправлено 11 December 2016 - 11:03

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

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



#10 OFFLINE   micha86

micha86

    Пользователь

  • Moderators
  • 429 сообщений

Отправлено 11 December 2016 - 22:25

Ну мужики как успехи?



#11 OFFLINE   maloj123

maloj123

    Пользователь

  • Advanced
  • 53 сообщений

Отправлено 12 December 2016 - 07:26

Не совсем понял как скачать исходный код сайта

#12 OFFLINE   maloj123

maloj123

    Пользователь

  • Advanced
  • 53 сообщений

Отправлено 12 December 2016 - 07:48

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

#13 OFFLINE   micha86

micha86

    Пользователь

  • Moderators
  • 429 сообщений

Отправлено 12 December 2016 - 07:50

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

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



#14 OFFLINE   maloj123

maloj123

    Пользователь

  • Advanced
  • 53 сообщений

Отправлено 12 December 2016 - 10:13

Открыть в браузере смог,а дальше ступор

#15 OFFLINE   maloj123

maloj123

    Пользователь

  • Advanced
  • 53 сообщений

Отправлено 12 December 2016 - 10:18

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

#16 OFFLINE   micha86

micha86

    Пользователь

  • Moderators
  • 429 сообщений

Отправлено 12 December 2016 - 12:09

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

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



#17 OFFLINE   maloj123

maloj123

    Пользователь

  • Advanced
  • 53 сообщений

Отправлено 12 December 2016 - 12:32

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

#18 OFFLINE   micha86

micha86

    Пользователь

  • Moderators
  • 429 сообщений

Отправлено 12 December 2016 - 12:39

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

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

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



#19 OFFLINE   maloj123

maloj123

    Пользователь

  • Advanced
  • 53 сообщений

Отправлено 12 December 2016 - 12:44

Захожу на сайт смотрю на исходный код и он сильно отличается от того который выложили вы .или я что-то не так делаю

#20 OFFLINE   admin

admin

    Administrator

  • Administrator
  • 1550 сообщений
Участник

Отправлено 12 December 2016 - 13:00

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

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

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

$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, это "составление в кучу для Дюны".

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


  • altifer это нравится