Ищу Скрипт удаления похожих новостей

Тема в разделе "DLE", создана пользователем Tadasi, 24 сен 2009.

Информация :
Актуальная версия DataLife Engine 11.2
( Final Release v.11.2 | Скачать DataLife Engine | Скачать 11.2 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.1 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Статус темы:
Закрыта.
Модераторы: killoff
  1. Tadasi

    Tadasi Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    145
    Симпатии:
    6
    Ищу скрипт удаления похожих новостей для DLE 7.5 по названию новости.
    p.s. Есть похожий скрипт, удаляющий дубликаты новостей на основании одинаковых ссылок на картинки:
    PHP:
    <?PHP
    //                          COPYRIGHT FDSTAR.NET
    @error_reporting(E_ALL E_NOTICE);
    @
    ini_set('display_errors'true);
    @
    ini_set('html_errors'false);
    @
    ini_set('error_reporting'E_ALL E_NOTICE);

    define('DATALIFEENGINE'true);

    $member_id FALSE;
    $is_logged FALSE;
    $content '';

    define('ROOT_DIR'dirname (__FILE__));
    define('ENGINE_DIR'ROOT_DIR.'/engine');
    define('DROP_IMAGES'false);


    @include (
    ENGINE_DIR.'/data/config.php');
    if (!
    $config['version_id']) die("Datalife Engine not installed. Please run install.php");
    require_once 
    ENGINE_DIR.'/classes/mysql.php';
    require_once 
    ENGINE_DIR.'/data/dbconfig.php';

    $sql "SELECT *,count(*) as `post_counter` 
            FROM `"
    PREFIX"_post` 
            GROUP BY `alt_name` 
            ORDER BY `post_counter` DESC"
    ;
    $res $db->query($sql);
    $row $db->get_row($res);

    if(
    $row && count($row))
    {
        if(
    $row['post_counter']<=1)
        {
            die(
    'COMPLETE !');
        }
        if(
    DROP_IMAGES)
        {
            
    $sql"SELECT * 
                    FROM `"
    PREFIX"_images` 
                    WHERE `news_id`='
    {$row['id']}' ";
        
            
    $res2 $db->query($sql);
            while(
    $row2 $db->get_row($res2))
            {
                
    $images_array split("\|\|\|"$row2['images']);
                foreach(
    $images_array as $image)
                {
                    if(
    $image trim($image))
                    {
                        
    $image ltrim($image'/');
                        if(
    preg_match('#([0-9]{4}\-[0-9]{2}/)(.*)$#'$image$match))
                        {
                            
    $img_date_dir $match[1];
                            
    $img_name basename($match[2]);
                            
                            
    $img_thumb_address ROOT_DIR'/uploads/posts/'$img_date_dir'thumbs/'$img_name;
                            
    $img_address ROOT_DIR'/uploads/posts/'$img_date_dir$img_name;
        
                            @
    $img_thumb_address_delete = (int)unlink($img_thumb_address);
                            @
    $img_address_delete = (int)unlink($img_address);
                            
                            
    $content.= "{$img_address} {$img_address_delete} <br /> {$img_thumb_address} {$img_thumb_address_delete}<hr />";
                        }
                        else
                        {
                            
    $content.= '<br />NO IMAGES FOUND<br />';
                        }
                    }
                }
                
    $sql "DELETE FROM `"PREFIX"_images` WHERE `id`='{$row2['id']}'";
                
    $db->query($sql);
                
    $content.= $sql"<hr />";
            }

        }    
        
        
    $sql"DELETE FROM `"PREFIX"_post` WHERE `id`='{$row['id']}' ";
        
    $db->query($sql);
        
    $content.= $sql"<hr />";
    }


    echo <<<HTML

    <html>
        <head>

    <script language="JavaScript" DEFER><!--
    function reload_page()
    {
             document.location.reload();
    }  
    --></script>

        </head>
        <body onload="reload_page();">
              
    {$content}    
        </body>
    </html>

    HTML;

    ?>
    Мож кто переделает под title?
     
  2. Tadasi

    Tadasi Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    145
    Симпатии:
    6
    Вопрос остался актуален. Странно что никто не отликнулся. Здесь же нет ничего сложного - если бы я разбирался хоть немного в пхп, уверен, что давно б уже сделал. Пожалуйста, помогите переделать.
     
  3. ddiimm

    ddiimm Постоялец

    Регистр.:
    29 дек 2007
    Сообщения:
    80
    Симпатии:
    28
    Присоеденясь к просьбе помочь с php. Очень нужная вещь когда сайт превращаеться с ГС в СДЛ появляеться необходимость почистить дубли новостей.
     
  4. AndreyKR

    AndreyKR Постоялец

    Регистр.:
    31 авг 2007
    Сообщения:
    110
    Симпатии:
    3
    юзал этото скрипт, неработает.. нужно его переписать...
    А вообще полезная вещь, можно будет скинуться всем вместе и заказать чтобы написали нормальный!
     
  5. andre740

    andre740

    Регистр.:
    17 апр 2006
    Сообщения:
    524
    Симпатии:
    156
    Вот нашел такое. Пробовал - сработало 1 раз нормально, но больше не работало....

    Автор - Fozzy. Вот что он предлагает:


    Давно задавал себе такой вопрос как удалить одинаковые новости с базы, если на ней около 50 тыщ новостей, и нашел способ. На форуме 4dle не раз поднимали этот вопрос, и четких ответов так и не было сказано, на сайте по этому поводу тоже ничего нет, и вот я двинулся в поиски данного чудо. Модуль не мой, не судите строго. Хочу лишь облегчить поиски тем кому тоже нужно почистить базу, ведь многие поисковики не любят повторов. Внимание каждый устанавливает данный модуль на свой страх и риск. Я не отвечаю за последствия причененных этим модулем.
    Установка:
    В блокнот вставляем код приведенный ниже, и сохраняем его в расширении php.
    Далее редактируем доступ к базе mysql
    Далее данный файл загружаем в корневую директорию вашего сайта.
    <?
    $user='root';
    $pass='';
    $base='3';
    #$rest=1;
    $tip='title';
    $pole='dle_post';
    $link = mysql_connect("localhost", "$user", "$pass")
    or die (mysql_error());
    mysql_select_db ("$base") or die (mysql_error());
    $sql = "SELECT $tip, id FROM $pole";
    $result = mysql_query($sql);
    while ($r = mysql_fetch_assoc($result))
    {
    if($real[$r[$tip]])
    {
    if($rest)
    {
    mysql_query("DELETE FROM $pole WHERE id=$r[id]");
    $info++;
    }
    else
    {
    $info.= $r[$tip]."n";
    }
    }
    else
    {
    $real[$r[$tip]]=$r[id];
    }
    }
    echo $info;
    ?>
    В строках:
    <?
    $user=''; Имя пользователя.
    $pass=''; Пароль
    $base='3'; Имя базы

    В строке:
    #$rest=1;
    Если оставим без изменений то модуль произведен поиск дубликатов по базе.
    $rest=1;
    Если уберем решетку, то модуль начнет свою работу, т.е удаление новостей дубликатов.
    И так, мы не хотим создавать нагрузку на сервер, ставим интервал.
    Ищем:
    mysql_query("DELETE FROM $pole WHERE id=$r[id]");
    После добавляем:
    sleep(3);
    Где значение 3 это интервал, соответсвенно можно выставить и 5 и 10 и 20.
    При начале работы модуля может выскачить gateway timeout, даже после этого у меня модуль продолжал работу. Следим лишь за уменьшением новостей в базе.
     
    kibi и Tadasi нравится это.
Статус темы:
Закрыта.