PDA

View Full Version : ربات دسته بندی و پوشه بندی فایل های دانلود شده از سایت مقالات gigapars



$ M 3 H R D A D $
جمعه 16 فروردین 1392, 01:40 صبح
سلام
من یک ربات نوشتم که کل لینکهای دانلودی سایت گیگاپارس به آدرس زیر و لیست کرده و ریختمش تو یک فایل تکستtxr
http://gigapaper.ir/Articles/

و اونو دادم به internet download manager و دانلود کرد و 34 گیگابایت شد جحم فایل ها

مورد اول : خوب IDM فایل های تکراری و یک عدد _2 _3 _4 اضافه میکنه و موقع کپی پیست شدن (چون همه جور پسوند هست توش (داکت / زیپ و آهنگ و ورد و و و ) ) شاید یک متن copy off بزاره اول یا آخرش

در نهایت عرض بنده :
من همه این فایل ها و زیختم یک جا
میخوام با یک برنامه این فیال ها و به کمک لیست آدرس اصلی اونا بزارم تو فولدر هاشون یعنی دسته بندی کنم که فلان فایل باید تو کدوم فولدر باشه مثال :

http://gigapaper.ir/Articles/..Standards/ASE/sasanghom/Flow%20Visualization%20Study%20of%20the%20Intake%2 0Process%20of%20an%20Internal%20Combustion%20Engin e.pdf

آدرس :
http://gigapaper.ir/Articles/
این روت سایت بوده پس اینو بیخیال
از اون به بعد :
فولد : ..Standards
و بعدش تو اون فولدر : ASE و تو اون sasanghom و در نهایت فایل Flow%20Visualization%20Study%20of%20the%20Intake%2 0Process%20of%20an%20Internal%20Combustion%20Engin e.pdf
تو اون قولدر آخری باید باشه

سوال اول اینکه باید یک برنامه باشه که این فولدر ها تو در تو و با رعایت اینکه فولدر های تکراری و نادیده بگیرو و بسازه
و این فایل ها و تو فایلهای موجود جستجو کنه و نام های دقیقا یکی ( نام اصلی فیال در لینک اصلی و نا فایل موجود در کامپیوتر من که دانلود شده ) و انتفقال بده به مسیر واقعی خودش

نام و فولدر و فایل های دارای نام فارسی موجود در لیست یا فولدر ساخته نمیشن یا اینکه بعضی از کاراکتر ها اصلا قابل استفاده نیستند و php اونا و علامت سوال میزاره

من لینک فایل ها و میزارم براتون کسی میتونه چک کنه چیکار باید کنم ؟
این برنامه میخواد تو لوکال اجرا بشه تا فایل هام دسته بندی بشن


برنامه ها که نوشتم و میزارم تا کسی خواست استفاده کنه :

این واسه لیست کردن (جمع کردن لینک دانلود ) :

<?php
mb_detect_order("ASCII,UTF-8,ISO-8859-1,windows-1252,iso-8859-15");
function loadNprepare($url,$encod='') {
$content = file_get_contents($url);
if (!empty($content)) {
if (empty($encod))
$encod = mb_detect_encoding($content);
$headpos = mb_strpos($content,'<head>');
if (FALSE=== $headpos)
$headpos= mb_strpos($content,'<HEAD>');
if (FALSE!== $headpos) {
$headpos+=6;
$content = mb_substr($content,0,$headpos) . '<meta http-equiv="Content-Type" content="text/html; charset='.$encod.'">' .mb_substr($content,$headpos);
}
$content=mb_convert_encoding($content, 'HTML-ENTITIES', $encod);
}
$dom = new DomDocument;
$res = $dom->loadHTML($content);
if (!$res) return FALSE;
return $dom;
}

function get_files($link)
{

$dom = loadNprepare($link);
foreach($dom->getElementsByTagName('table') as $info_table) {
$atr_class = $info_table->getAttribute('class');
if($atr_class == 'table') {
foreach( $info_table->getElementsByTagName( 'tr' ) as $tr ) {
foreach( $tr->getElementsByTagName( 'a' ) as $a ) {

if($a->getAttribute('class')=='item dir') {
get_files('http://gigapaper.ir/Articles/'.$a->getAttribute('href'));
}
elseif($a->getAttribute('class')=='item file')
{
echo 'http://gigapaper.ir/Articles/'.$a->getAttribute('href');
}
}



}
}
}


}

$ar = get_files('http://gigapaper.ir/Articles/?m');
?>

از نسخه موبایل بروز کردم که حجم صفحات کم بشه و سرور این و لیست کرد تا سرعت بالابره و زود لیست تموم بشه
چون نزدیک به 16 هزار لینک دانلود تولید کرده
و 34 گیگ حجم

با این خواستم خودش تو سرور هم دانلود کنه هم بزاره تو فولدر خودش ( سرجاش ) اما به نتیجه نرسیدم و با دانلود منیجر دانلود کردم

<?php
$sp = "\\";
set_time_limit(0);
$link = file('link.txt');
for($i=0;$i<count($link);$i++)
{
$url = str_replace("http://gigapaper.ir/","",$link[$i]);
$file_data = folders($url);
if(!file_exists( $file_data['save_dir'].$sp.$file_data['file_name']) )
{
/*
if(getfile($link[$i],$file_data['save_dir'].$sp.$file_data['file_name'])) {
?>
<a href="http://ppage.ir/robo/<?php echo $url; ?>"><?php echo end(explode("/",$url)); ?></a><br/>
<?php
}
*/
}

}


function getfile($url, $dir){
return file_put_contents($dir, file_get_contents($url));
}
function folders($url)
{
global $sp;
$parts = explode("/",$url);
chdir(dirname(__FILE__));
$dir = dirname(__FILE__);
$url2 = dirname(__FILE__);
$data = array();
$data['file_name'] = $parts[count($parts)-1];
for($i=0;$i<count($parts)-1;$i++)
{
if(is_dir($parts[$i]))
{
chdir($dir.$sp.$parts[$i]);
$dir = $dir.$sp.$parts[$i];
}
else
{

if(!mkdir($parts[$i]))
{
echo "DIR : ".$dir."<br/";
echo "File : ".$parts[$i]."<br/>";
}
chdir($dir.$sp.$parts[$i]);
$dir = $dir.$sp.$parts[$i];
}
$url2 .= $sp.$parts[$i];
}
$data['save_dir'] = $url2;
return $data;


}


?>

نهایتا
من یک فایل دارم به نام ایکس تو حلقه خودم چک میکنم با دستور file_exists
اما پیدا نمیکنه اما خارج از حلقه میگه هست !

<?php
header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding('utf-8');
set_time_limit(0);
$sp = "\\";
$loc = dirname(__FILE__).'\\gigapars';

$link = file('link.txt');

function decode_characters($info)
{
// $info = mb_convert_encoding(, "HTML-ENTITIES", "UTF-8");
//$info = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$info);
return(urldecode($info));
}

function files($path,&$files = array())
{
$dir = opendir($path."/.");
while($item = readdir($dir))
if(is_file($sub = $path."/".$item))
$files[] = $item;else
if($item != "." and $item != "..")
files($sub,$files);
return($files);
}
$all_files = files(dirname(dirname(__FILE__)));
print_r($all_files);
for($i=100;$i<105;$i++)
{
$name = decode_characters($link[$i]);
$name = explode('/',$name);
$name = end($name);
if(in_array($name,$all_files, false))
echo $name." <span style='color:green;'> hast</span><br/>";
else
echo $name." <span style='color:red;'> nist</span><br/>";

}


/*
for($i=0;$i<400;$i++)
{

$url = str_replace("http://gigapaper.ir/","",$link[$i]);
$file_data = folders($url);
if(!file_exists( $file_data['save_dir'].$sp.$file_data['file_name']) )
{

if(getfile($link[$i],$file_data['save_dir'].$sp.$file_data['file_name'])) {
?>
<a href="http://ppage.ir/robo/<?php echo $url; ?>"><?php echo end(explode("/",$url)); ?></a><br/>
<?php
}

}


}
*/

function getfile($url, $dir){
return file_put_contents($dir, file_get_contents($url));
}
function folders($url)
{
global $sp;
$parts = explode("/",$url);
chdir(dirname(__FILE__));
$dir = dirname(__FILE__);
$url2 = dirname(__FILE__);
$data = array();
$data['file_name'] = $parts[count($parts)-1];
for($i=0;$i<count($parts)-1;$i++)
{
if(is_dir($parts[$i]))
{
chdir($dir.$sp.$parts[$i]);
$dir = $dir.$sp.$parts[$i];
}
else
{

if(!mkdir($parts[$i]))
{
echo "DIR : ".$dir."<br/";
echo "File : ".$parts[$i]."<br/>";
}
chdir($dir.$sp.$parts[$i]);
$dir = $dir.$sp.$parts[$i];
}
$url2 .= $sp.$parts[$i];
}
$data['save_dir'] = $url2;
return $data;


}


?>


لیست دانلود و ضمیمه کردم

هرکس تونست بدون اررور کل فایل ها و فولدر ها و بسازه بهم خبر بده و اگه لطف کنه که زیپ کنه فولدر های خالی و برام بفرسته خوب میشه
چون کاراکترهای خاص داره مثل f که و انتگرال داریم !

ٌS¬ƒsnƒ - ل¬dƒO8 ¬n¬n ¼8¬n

این یک نمونه از اسماشه
که البته اسکی کد داره و سعی کردم تو مرورگر نشون بدمش اما یک کاراکتر مشکی نمایش میداد که فک کنم تشخصی میده اما یونیکد مرورگر نمیتونه اونو نماش بده و فک کنم بشه همون اسکی و واسه ساختن اسم فایل و فولدر استفاده کرد چچون خلصه ی کاراکتر معتبر و دارای کد اسکس هست دیگه
امیدوارم این اسم ها تو پیدا کردن فایل باعث مشکل نشند

فکر دیگه که به ذهنم دسید این که این لست داتلود و بریزم تو باینک و بیام یک برنامه بنویسم که لیست درست کنه که بشه فهمید فلان لینک چندتا فایل مال اون لینک دانلود پیدا میشه
اخه ممکنه یک لینک یا اصللا فیالش پیدا نشه یا چندتا پیدا بشه

WOLF_MEHRDAD
جمعه 16 فروردین 1392, 10:57 صبح
درود بر شما

من اینو تست کردم جواب داد ، شما یه تست بگیر ببین کار میده ( بدون اون کاراکتر ها البته ) :



<?php
$link = "http://gigapaper.ir/Articles/..Standards/ASE/sasanghom/Flow%20Visualization%20Study%20of%20the%20Intake%2 0Process%20of%20an%20Internal%20Combustion%20Engin e.pdf
";
$link = utf8_decode(urldecode($link));
$link = str_replace('http://gigapaper.ir/Articles/', '', $link);


$list = array();
$filename = substr($link,strripos($link, '/')+1);
$link = substr($link,0,strripos($link, '/'));

while($num = strripos($link, '/'))
{
$list[] = substr($link,$num+1);
$link = substr($link,0,$num);

}
$list[] = $link;
krsort($list);
print_r($list);

foreach($list as $val)
{
mkdir($val);
chdir($val);
}

?>

WOLF_MEHRDAD
جمعه 16 فروردین 1392, 14:09 عصر
داداش url decoder رو اضافه کردم تست کن ببین جواب میده؟

$ M 3 H R D A D $
جمعه 16 فروردین 1392, 21:24 عصر
مشکل من همون یک لینک نیست نزدیک به 16 هزار لینک + ساخت پوشه های تو در تو اون ها + پیدا کردن فایل مربوطه و جابجایی اون فایل
ممنون