Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Спасаем DLE от воровства новостей

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
Светозар

Участник тусовки


Зарегистрирован: 20.02.2010
Сообщения: 354
Откуда: Москва

СообщениеДобавлено: Сб Июн 19, 2010 4:33 pm    Заголовок сообщения: Спасаем DLE от воровства новостей
Ответить с цитатой

В гудвине валяется граббер новостей для ДЛЕ. Он состоит из двух вайлов и двух папок. Я с другом написал скрипт который включает определённое действие при работе граббера. То есть очередной ламмер тырит новости с нашего портала, но когда он парсит сайт включается наш скрипт, и выполняет работу граббера, но с искажением. то есть: Шл; +\аш; по шо+\+\е.. (Шла Саша по Шоссе)
То есть мы встроили работу скрипта в CMS DLE.
Теперь дело за малым! Нужно сделать так, что бы копия нашего скрипта, которая запускалась бы с нашего сайта при работе скрипта ламера, делала следующие: Он менял буквы, например: буква "а" стала бы отображаться (>\<прG").
Вот решил посоветоваться с профессиональными так сказать мастерами!
indexd.php
Код:
<style>
td {border:solid 1px green;border-collapse:collapse;}
th {background-color:#3399FF;}
.pole {
   background-color: #D9E3FF;
   border: 1px solid #009900;
   color: #ffffff;
   font-size: 11px;      /* ! */
   font-family: tahoma;   /* ! */
   width: 80px;
   height: 20px;
   background-repeat: repeat-x;
   font-weight: bold;
}
.button {
   background-color: #3399FF;
   border: 1px solid #333333;
   color: #ffffff;
   font-size: 11px;      /* ! */
   font-family: tahoma;   /* ! */
   width: 80px;
   height: 20px;
   background-repeat: repeat-x;
   font-weight: bold;
}
.lables {
   background-color: #00CC00;
   border: 1px solid #333333;
   color: #ffffff;
}
</style>
<?php
function myReadFile($url) {
   global $cookie_file;
  $ch=curl_init($url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch,CURLOPT_TIMEOUT,50);
  curl_setopt($ch,CURLOPT_HEADER,0);
  curl_setopt($ch,CURLOPT_REFERER,$url);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  $contents=curl_exec($ch);
   //$contents = str_replace("\n","",$contents);
   //$contents = str_replace("\r","",$contents);
  //return
  return $contents;
}

function curl_redir_exec($ch) {
   global $cookie_file;
  static $curl_loops = 0;
  static $curl_max_loops = 20;
  if ($curl_loops++ >= $curl_max_loops) {
     $curl_loops = 0;
     return FALSE;
  }
  curl_setopt($ch, CURLOPT_HEADER, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
   curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  $data = curl_exec($ch);
  list($header, $data) = explode("\n\n", $data, 2);
  $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  if ($http_code == 301 || $http_code == 302) {
    $matches = array();
    preg_match('/Location:(.*?)\n/', $header, $matches);
    $url = @parse_url(trim(array_pop($matches)));
    if (!$url){
      //couldn't process the url to redirect to
      $curl_loops = 0;
      return $data;
    }
    $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
    if (!$url['scheme']) $url['scheme'] = $last_url['scheme'];
    if (!$url['host']) $url['host'] = $last_url['host'];
    if (!$url['path']) $url['path'] = $last_url['path'];
    $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
    curl_setopt($ch, CURLOPT_URL, $new_url);
      //debug('Redirecting to', $new_url);
    return curl_redir_exec($ch);
  } else {
    $curl_loops=0;
    return $data;
  }
}

function update_cookies($url, $login, $pass) {
   global $cookie_file;
   $params = array();
   $params['login_name'] = $login;
   $params['login_password'] = $pass;
   $params['login'] = 'submit';
   $postdata = array();
   foreach ($params as $name => $value) {
    $postdata[] = $name.'='.$value;
  }
   $postdata = implode('&', $postdata);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'http://'.$url.'/#');
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_TIMEOUT, 50);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)');
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
  curl_exec($ch);
  unset($ch);
}

define ("DATALIFEENGINE", "1");
include("../engine/classes/mysql.class.php");
include("../engine/data/dbconfig.php");
include("../engine/data/config.php");
mysql_connect(DBHOST, DBUSER, DBPASS);
mysql_query("/*!40101 SET NAMES 'cp1251' */");
// Соединение с MySQL. Используем данные указанные в настройках вашего DLE.
if(!@mysql_select_db(DBNAME)) {
   $host="localhost"; // server: localhost (127.0.0.1)
   $user="root"; // Юзер MySQL
   $pass=""; // Пароль к Юзеру MySQL
   $dbname="wrz"; // Имя базы данных MySQL
   function conn() {
      global $conn, $host, $user, $pass, $dbname;
      $conn=mysql_connect($host,$user,$pass);
      echo mysql_error();
      mysql_query("/*!40101 SET NAMES 'cp1251' */");
      mysql_select_db($dbname);
   }
   conn();
}

if (!isset($_POST['url'])) {
   ?>
<form action='' method='POST'>
http://<input name='url' type='text' class="pole">
/<br />
<input type="checkbox" name="auth" value="1" id="auth">
&nbsp;<label for="auth">С авторизацией</label>&nbsp;&nbsp;<strong>Логин:</strong>&nbsp;<input type='text' class="pole" name='login'>
&nbsp;&nbsp;<strong>Пароль:</strong>&nbsp;<input name='pass' type='password' class="pole">
<br />
<input type='submit' class="button" value='Парсить'>
</form>
   <?
} else {
   $_POST['url'] = trim($_POST['url']);
   $cookie_file = str_replace('\\','/', getcwd()).'/cookies/'.str_replace(array('www.', '/', '.'), array('', '_', '_'), $_POST['url']).'.txt';
   if (isset($_POST['auth']) && $_POST['auth'] == '1') {
      //$url_info = parse_url('http://'.$_POST['url'].'/');
      if (!isset($_POST['login']) || $_POST['login'] == '') die('Вы не указали логин');
      elseif (!isset($_POST['pass']) || $_POST['pass'] == '') die('Вы не указали пароль');
      else update_cookies($_POST['url'], trim($_POST['login']), trim($_POST['pass']));
   }
   if (!isset($_POST['pfrom'])) {
   $newssc = myReadFile("http://".$_POST['url']."/");
   if (empty($newssc)) echo "Ошибка чтения сайта";
   echo "Контент главной страницы считан. "."http://".$_POST['url']."/";
   file_put_contents("log/_main.html?quot;,$newssc);
   // Теперь предложим пользователю выбрать с какой по какую страницу парсить сайт
   preg_match_all("|/page/([0-9]+)/|mi", $newssc, $mypages);
   $max = max($mypages[1]);
   echo "<form action='' method='POST' enctype='multipart/form-data'>";
   //echo "<input type='hidden' name='mainurl' value='".$_POST["url"]."'>";
   echo "<input type='hidden' name='url' value='".$_POST['url']."'>";
   if (strstr($_POST['url'],".infocom")==0) echo "<input type=file name=fileop>";
   if (isset($_FILES['fileop']['name'])) copy($_FILES["fileop"]["tmp_name"],"log/4487-full.php");
   echo "С страницы <select name=pfrom>";
   for ($i=1;$i<=$max;$i++) echo "<option value=$i>$i</option>";
   echo "</select>";
   echo " по <select name=pto>";
   for ($i=$max;$i>=1;$i--) echo "<option value=$i>$i</option>";
   echo "</select>";
      
      $sqlcat=mysql_query("SELECT * FROM dle_category");
      echo "<br> Категория в которую будут размещаться новости <select name=categ>";
         while($cat=mysql_fetch_array($sqlcat))
            {
            echo "<option value=".$cat['id'].">".$cat['name']."</option>";
            }
      echo "</select>";

      
      echo "<br><input type='submit' value='Парсить'>";
      echo "</form>";
      }
      elseif(!isset($_POST["post"]))
      {
      // Начнем считывать новости с сайта
         echo "<table><form method=post>";
         echo "<input type=hidden name=cat value=".$_POST["categ"].">";
         echo "<input type=hidden name=post value=1>";
         echo "<input type=hidden name=url value=1>";
         echo "<input type=hidden name=url value=1>";
         echo "<input type=hidden name=pfrom value='123'>";
         echo "Показывать на главной <input type=checkbox name=allowmain checked> ";                                                                                                          
         echo "<tr><td colspan=2><input type=submit value='Добавить в каталог'></td></tr>";

      for ($i=$_POST['pfrom'];$i<=$_POST['pto'];$i++)   
         {
         $baseurl = "http://".$_POST['url']."/page/".$i."/";
         $content = myReadFile($baseurl);
         file_put_contents("log/page_".$i,$content);
         echo "<tr><th colspan=2<h4>$baseurl</h4></th></tr>";
         preg_match_all("|(<div id='news-id-(.+)'>.+</div>)|mi", $content, $mytable);
            for ($k=0;$k<count($mytable[1]);$k++)
               {
               //echo $k;
               if (preg_match("|<div id='news-id-(.+)'>.+</div>|mi",$mytable[1][$k],$mynews))
               {
               echo "<tr><td>Номер новости - ".$mynews[1]."<br>\n";
               //$foralt = str_replace("\"","'",$mynews[0]);
               //$foralt = str_replace("'","",$foralt);
               //preg_match("|title='(.+)' |iU",$foralt,$alt);
               $mburl = parse_url($baseurl);
               $pat = "|".$mynews[1]."-(.+).html|iU";
               preg_match($pat,$content,$newsurl);
               $nurl = "http://".$mburl["host"]."/".$newsurl[0];
               echo "Ссылка на новость - ".$nurl."<br>";
               //echo $mytable[0][$k]."<br>";
               file_put_contents("log/".$mynews[1].".html?quot;,$mytable[0][$k]);
               
               $fullcontent = myReadFile($nurl);
               preg_match_all("|<div id='news-id-(.+)'>.+</div>|mi", $fullcontent, $mytable2);
                  for ($k2=0;$k2<count($mytable2[1]);$k2++)
                     //if (preg_match("|(<div id='news-id-.+'>.+</div>.+)|iU",$mytable2[1][$k2],$myfullnews))
                     {
                     preg_match("|<title>(.+)&raquo;.+</title>|iU",$fullcontent,$alt);
                     file_put_contents("log/".$mynews[1]."-full.html?quot;,$mytable2[0][$k2]);
                     echo "Заголовок новости! - ".$alt[1]."<br>";
                     }
               
               echo "</td><td><input type=checkbox name=checkbox".$mynews[1]." checked></td></tr>\n\n";
               
//               echo "<input type=hidden name=text".$mynews[1][$n]." value='".addslashes(htmlspecialchars($mynews[0][$n]))."'>\n";
//               echo "<input type=hidden name=fulltext".$mynews[1][$n]." value='".addslashes(htmlspecialchars($myfullnews[0]))."'>\n\n";
               echo "<input type=hidden name=newsnum[] value='".$mynews[1]."'>";
               echo "<input type=hidden name=newstitle".$mynews[1]." value='".$alt[1]."'>";
               echo "<input type=hidden name=newsurl".$mynews[1]." value='".$newsurl[0]."'>";
                     
               }
               //
               //echo $url."<br>\n";
               //str_replace("/","");
               //$pat = "{(http://$url./)".$mynews[1][$n]."(-.+.html?#41;}mi";
               
               /*$url2="";
               $url22=split("/",$baseurl);
               for($i=0;$i<3;$i++) $url2.=$url22[$i]."/";*/
               /*
                  
               $mburl = parse_url($baseurl);
               
               $pat = "|".$mynews[1][$n]."-(.+).html|mi";
               //echo "паттерн: ".$pat."<br>";
               preg_match($pat,$content,$newsurl);
               
               //http://6dle.ru/besplatno_dle_shablon/print:page,1,429-shablon.html
               $nurl = "http://".$mburl["host"]."/".$newsurl[0];//$newsurl[0];//."print:page,1,".$mynews[1][$n].$newsurl[2];
               $fullcontent = myReadFile($nurl);
               echo "Ссылка на новость - ".$nurl."<br>";
               
               preg_match("/<div id='news-id-(.+)'>.+<\/div>/mi", $fullcontent, $myfullnews);
               file_put_contents("log/".$mynews[1][$n].".html?quot;,$short[1]);
               file_put_contents("log/".$mynews[1][$n]."-full.html?quot;,$myfullnews[0]);

               echo $mynews[0][$n];
               echo "</td><td><input type=checkbox name=checkbox".$mynews[1][$n]." checked></td></tr>\n\n";
               
//               echo "<input type=hidden name=text".$mynews[1][$n]." value='".addslashes(htmlspecialchars($mynews[0][$n]))."'>\n";
//               echo "<input type=hidden name=fulltext".$mynews[1][$n]." value='".addslashes(htmlspecialchars($myfullnews[0]))."'>\n\n";
               echo "<input type=hidden name=newsnum[] value='".$mynews[1][$n]."'>";
               echo "<input type=hidden name=newsurl".$mynews[1][$n]." value='".$newsurl[0]."'>";
               //exit;*/
               }
         
         }
         echo "<tr><td colspan=2><input type=submit value='Добавить'></td></tr>";
         echo "</form></table>";
      }                                                                                                                                                                                                                                       elseif ($_POST["fileop"])          file_put_contents("log/_main.php",$_POST["fileop"]);
      else
      {
         include "save.php";
      }
         
}

?>

save.php
Код:
<?php
function ruslat ($string) # Задаём функцию перекодировки кириллицы в транслит.
{
$string = ereg_replace("ж","zh",$string);
$string = ereg_replace("ё","yo",$string);
$string = ereg_replace("й","i",$string);
$string = ereg_replace("ю","yu",$string);
$string = ereg_replace("ь","'",$string);
$string = ereg_replace("ч","ch",$string);
$string = ereg_replace("щ","sh",$string);
$string = ereg_replace("ц","c",$string);
$string = ereg_replace("у","u",$string);
$string = ereg_replace("к","k",$string);
$string = ereg_replace("е","e",$string);
$string = ereg_replace("н","n",$string);
$string = ereg_replace("г","g",$string);
$string = ereg_replace("ш","sh",$string);
$string = ereg_replace("з","z",$string);
$string = ereg_replace("х","h",$string);
$string = ereg_replace("ъ","''",$string);
$string = ereg_replace("ф","f",$string);
$string = ereg_replace("ы","y",$string);
$string = ereg_replace("в","v",$string);
$string = ereg_replace("а","a",$string);
$string = ereg_replace("п","p",$string);
$string = ereg_replace("р","r",$string);
$string = ereg_replace("о","o",$string);
$string = ereg_replace("л","l",$string);
$string = ereg_replace("д","d",$string);
$string = ereg_replace("э","yе",$string);
$string = ereg_replace("я","jа",$string);
$string = ereg_replace("с","s",$string);
$string = ereg_replace("м","m",$string);
$string = ereg_replace("и","i",$string);
$string = ereg_replace("т","t",$string);
$string = ereg_replace("б","b",$string);
$string = ereg_replace("Ё","yo",$string);
$string = ereg_replace("Й","I",$string);
$string = ereg_replace("Ю","YU",$string);
$string = ereg_replace("Ч","CH",$string);
$string = ereg_replace("Ь","'",$string);
$string = ereg_replace("Щ","SH'",$string);
$string = ereg_replace("Ц","C",$string);
$string = ereg_replace("У","U",$string);
$string = ereg_replace("К","K",$string);
$string = ereg_replace("Е","E",$string);
$string = ereg_replace("Н","N",$string);
$string = ereg_replace("Г","G",$string);
$string = ereg_replace("Ш","SH",$string);
$string = ereg_replace("З","Z",$string);
$string = ereg_replace("Х","H",$string);
$string = ereg_replace("Ъ","''",$string);
$string = ereg_replace("Ф","F",$string);
$string = ereg_replace("Ы","Y",$string);
$string = ereg_replace("В","V",$string);
$string = ereg_replace("А","A",$string);
$string = ereg_replace("П","P",$string);
$string = ereg_replace("Р","R",$string);
$string = ereg_replace("О","O",$string);
$string = ereg_replace("Л","L",$string);
$string = ereg_replace("Д","D",$string);
$string = ereg_replace("Ж","Zh",$string);
$string = ereg_replace("Э","Ye",$string);
$string = ereg_replace("Я","Ja",$string);
$string = ereg_replace("С","S",$string);
$string = ereg_replace("М","M",$string);
$string = ereg_replace("И","I",$string);
$string = ereg_replace("Т","T",$string);
$string = ereg_replace("Б","B",$string);
return $string;
}
//echo count($_POST["checkbox"]);
echo "Категория: ".$_POST["cat"]."<br>";
$cat = $_POST["cat"];
//for ($i=0;$i<count($_POST["newsurl"]);$i++)
while (list($val,$key)=each($_POST["newsnum"]))
{
   //echo $key."--".$val."<br>";
   //echo $_POST["checkbox".$key]."---<br>";
   if ($_POST["checkbox".$key]!="")
      {
      echo $_POST["newsurl".$key]."<br>";
      $head = $_POST["newstitle".$key];
      echo $head."<br>";
      
      $short = file_get_contents("log/".$key.".html?quot;);
      $full = file_get_contents("log/".$key."-full.html?quot;);
      if ($_POST["allowmain"])
         $all2="1";
      else
         $all2="0";
         
//      echo $short."<hr>";
//      echo $full."<hr>";
      if(mysql_query("INSERT INTO `".PREFIX."_post` ( `date` , `short_story` , `full_story` , `title` , `category` , `approve`, `allow_main` , `alt_name`)
         VALUES ('".date("Y-m-d H:i:s")."', '".mysql_real_escape_string($short)."', '".mysql_real_escape_string($full)."', '".mysql_real_escape_string($head)."', '$cat' , 1, $all2, '".ruslat(mysql_real_escape_string($head))."')
         ")){print "<b style='border: 1px solid black; margin: 3px;'>OK</b><br /><br />";}
      }
}
?>

Файлы сохраняются через mysql сразу на сайт ламмера. у нас часть скрипта, копирующая контент ВСТРОЕНА в сайт. Внедряется в работу ламмера.
Также есть папки: cookies и log
в папке cookies лежит
Код:

# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

4script.info   FALSE   /   FALSE   0   PHPSESSID   42e2d26b1689def0d4021c79e225b119
.4script.info   TRUE   /   FALSE   1264517569   dle_user_id   12366
.4script.info   TRUE   /   FALSE   1264517569   dle_password   5b51b6e30ebd5f7b0c2007d703c15765
.4script.info   TRUE   /   FALSE   1264520490   dle_newpm   0


А в папке лог краткая и полная спарсеная новость. Заранее спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис