Светозар
Участник тусовки
Зарегистрирован: 20.02.2010 Сообщения: 354 Откуда: Москва
|
|
|
|
В гудвине валяется граббер новостей для ДЛЕ. Он состоит из двух вайлов и двух папок. Я с другом написал скрипт который включает определённое действие при работе граббера. То есть очередной ламмер тырит новости с нашего портала, но когда он парсит сайт включается наш скрипт, и выполняет работу граббера, но с искажением. то есть: Шл; +\аш; по шо+\+\е.. (Шла Саша по Шоссе)
То есть мы встроили работу скрипта в 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">
<label for="auth">С авторизацией</label> <strong>Логин:</strong> <input type='text' class="pole" name='login'>
<strong>Пароль:</strong> <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>(.+)».+</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
|
А в папке лог краткая и полная спарсеная новость. Заранее спасибо. |
|