PDA

View Full Version : واکشی صفحات انجمن وی بولتین برای انتقال اطلاعات به فروم دیگر.



$ M 3 H R D A D $
شنبه 04 بهمن 1393, 15:43 عصر
سلام.
هدفم اینه که کلیه پست های یک تاپیک و به همراه جزئیاتش واکشی کنم.

هدفم هم انتقال تاپیک ایران نهاد (http://barnamenevis.org/showthread.php?397617-%D8%AA%D8%B4%DA%A9%DB%8C%D9%84-%D9%86%D9%87%D8%A7%D8%AF-%D8%AD%D9%85%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B2-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86/page1) به فروم دیگر و پردازش یک سری اطلاعات دیگه هست.

تاریخ پست
نام کاربری ارسال کننده + شماره پروفایل ارسال کننده + وب سیت اینترنتی ارسال کننده + محل زندگی ارسال کننده + آیدی یاهو + آیدی اسکایپ
عنوان پست
متن پست ارسال شده
آیا پست نقل قول دارد یا خیر ؟ چند تا ؟ نقل قول شده از کدامین پست ها
امضا ارسال کننده
ویرایش شده یا خیر؟ تاریخ و دلیل آن
تعداد تشکر ها + نام کاربری به همراه شماره پروفایل تشکر کننده ها

من تو Yii نوشتم منتها سرعت و دقت اون خیلی پایین هست
لطفا راهنمایی بفرمایید که از چه ابزاری و چه منطقی استفاده کنم.


$url = 'http://barnamenevis.org/showthread.php?397617-%D8%AA%D8%B4%DA%A9%DB%8C%D9%84-%D9%86%D9%87%D8%A7%D8%AF-%D8%AD%D9%85%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B2-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86/page'.$page;

Yii::import('ext.SimpleHTMLDOM.SimpleHTMLDOM');
// Create DOM from URL or file
$simpleHTML = new SimpleHTMLDOM;
$html = $simpleHTML->file_get_html($url);

// Find all images
foreach($html->find('ol[id=posts]') as $element)
foreach($element->find('li') as $element2){
$post_id = $element2->id;
//posthead
foreach($element2->find('div[class=postdetails]') as $postdetails){

foreach($postdetails->find('div[class=userinfo]') as $userinfo){
preg_match('/member.php\?(.*?)-/', $userinfo, $match);
$profile_id = $match[1];

preg_match_all('/<b>(.*)<\/b>/', $userinfo, $match);
$username = $match[1];
$username = $username[0];

//get web Site
$extra_info = array();
foreach($userinfo->find('dl[class=userinfo_extra]') as $extra){
foreach($extra->find('dd') as $dd){
$extra_info[] = $dd;
}
}

//http://barnamenevis.org/image.php?u=55504
//http://barnamenevis.org/sendmessage.php?do=im&type=skype&u=55504
//http://barnamenevis.org/sendmessage.php?do=im&type=yahoo&u=55504
}
foreach($postdetails->find('div[class=postbody]') as $postbody){
foreach($postbody->find('div[class=post_message_'.$post_id.']') as $postcontent){
echo $postcontent;
}

}
}

foreach($element2->find('div[id=post_thanks_bit_'.$post_id.']') as $thanks){
echo $thanks;
//get all a innertext thanks id and src to get userid
}
break;
}
exit();

MMSHFE
شنبه 04 بهمن 1393, 16:45 عصر
بهتره با regexp کار کنید و از فریمورک هم استفاده نکنید. بطور کلی DOM Parserها کند و سنگین (ازنظر مصرف حافظه) هستن و بهتره با عبارات با قاعده کار کنید.

$ M 3 H R D A D $
شنبه 04 بهمن 1393, 18:46 عصر
بهتره با regexp کار کنید و از فریمورک هم استفاده نکنید. بطور کلی DOM Parserها کند و سنگین (ازنظر مصرف حافظه) هستن و بهتره با عبارات با قاعده کار کنید.

خیلی اشتباه اینکار زیاده.یعنی تگ ها و کامل نمیاره و متن اونا و نصفه میکنه و تو پیدا کردن نمیشه یک منطق ثابت براش قرار داد.
<?php
$url = 'http://barnamenevis.org/showthread.php?397617-%D8%AA%D8%B4%DA%A9%DB%8C%D9%84-%D9%86%D9%87%D8%A7%D8%AF-%D8%AD%D9%85%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B2-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86/page'.$page;
$content = file_get_contents($url);
preg_match_all('/<ol id="posts" class="posts" start="(.*)">(.*)<\/ol>/si', $content, $content);
$content = $content[1];
$content = $content[0];
//preg_match_all('/<li>(.*)<\/li>/si', $content, $posts);
preg_match_all('/<li class="(.*)" id="post_(.*)">(.*)<\/li>/si', $content, $posts);
print_r($posts);
foreach ($posts as $post){

echo $post;
break;
}
?>

darkface
شنبه 04 بهمن 1393, 23:27 عصر
بعد از اون قرار دادنش در سایت های دیگه مهمه.
در واقع فکر میکنم هدف شما فقط پست اوله بنابراین اون خط اخر که فکر میکنم hr هست را باید نشون کنید.
واسه شروعشم همینطور البته

bagherok
یک شنبه 05 بهمن 1393, 01:56 صبح
از Goutte (https://github.com/FriendsOfPHP/Goutte)
یا
Symfony\Component\DomCrawler\Crawler
یا
VerbalExpressions/PHPVerbalExpressions

استفاده نکردید!


<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'http://barnamenevis.org/showthread.php?483717-%D9%88%D8%A7%DA%A9%D8%B4%DB%8C-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%86%D8%AC%D9%85%D9%86-%D9%88%DB%8C-%D8%A8%D9%88%D9%84%D8%AA%DB%8C%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D9%81%D8%B1%D9%88%D9%85-%D8%AF%DB%8C%DA%AF%D8%B1');
$crawler->filter('.userinfo')->each(function ($nodes) {
$node=$nodes->filter('strong');
echo($node->text())."<br/>";
$node=$nodes->filter('.userinfo_extra');
echo($node->text())."<hr/>";
});






$ M 3 H R D A D $ تاریخ عضویت دی 1388 محل زندگی بابلپست 1,593 تشکر کردن 998 1,311 بار تشکر شده در 578 پست
MMSHFEتاریخ عضویت بهمن 1386 محل زندگی شیراز پست 9,604 تشکر کردن 435 15,722 بار تشکر شده در 6,385 پست
$ M 3 H R D A D $ تاریخ عضویت دی 1388 محل زندگی بابل پست 1,593 تشکر کردن 998 1,311 بار تشکر شده در 578 پست
darkface تاریخ عضویت دی 1391 پست 58 تشکر کردن 63 8 بار تشکر شده در 8 پست

abolfazl-z
یک شنبه 05 بهمن 1393, 16:51 عصر
خیلی اشتباه اینکار زیاده.یعنی تگ ها و کامل نمیاره و متن اونا و نصفه میکنه و تو پیدا کردن نمیشه یک منطق ثابت براش قرار داد.
<?php
$url = 'http://barnamenevis.org/showthread.php?397617-%D8%AA%D8%B4%DA%A9%DB%8C%D9%84-%D9%86%D9%87%D8%A7%D8%AF-%D8%AD%D9%85%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B2-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86/page'.$page;
$content = file_get_contents($url);
preg_match_all('/<ol id="posts" class="posts" start="(.*)">(.*)<\/ol>/si', $content, $content);
$content = $content[1];
$content = $content[0];
//preg_match_all('/<li>(.*)<\/li>/si', $content, $posts);
preg_match_all('/<li class="(.*)" id="post_(.*)">(.*)<\/li>/si', $content, $posts);
print_r($posts);
foreach ($posts as $post){

echo $post;
break;
}
?>


خیلی اشتباه اینکار زیاده.یعنی تگ ها و کامل نمیاره و متن اونا و نصفه میکنه و تو پیدا کردن نمیشه یک منطق ثابت براش قرار داد.
<?php
$url = 'http://barnamenevis.org/showthread.php?397617-%D8%AA%D8%B4%DA%A9%DB%8C%D9%84-%D9%86%D9%87%D8%A7%D8%AF-%D8%AD%D9%85%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B2-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86/page'.$page;
$content = file_get_contents($url);
preg_match_all('/<ol id="posts" class="posts" start="(.*)">(.*)<\/ol>/si', $content, $content);
$content = $content[1];
$content = $content[0];
//preg_match_all('/<li>(.*)<\/li>/si', $content, $posts);
preg_match_all('/<li class="(.*)" id="post_(.*)">(.*)<\/li>/si', $content, $posts);
print_r($posts);
foreach ($posts as $post){

echo $post;
break;
}
?>



test test test test test
ooops
this is a test
SELECT TESET

abolfazl-z
یک شنبه 05 بهمن 1393, 20:09 عصر
بفرمایید اینم یک نمونه که چند ساعت طول کشید.


set_time_limit(0);
function fetch($url,$page=1)
{
libxml_use_internal_errors(true);
$url .= '/page'.$page;
$data = file_get_contents($url);
#$data = file_get_contents('test.htm'); from local file
if($data == '')
return [];
$dom = new domDocument();
$dom->encoding = 'UTF-8';
$dom->loadHTML($data);
unset($data);
$topics = [];
$uniqueId = 0;
if($dom->getElementById('posts') == null)
return [];
foreach($dom->getElementById('posts')->childNodes as $child){
if($child->nodeName !== 'li')
continue;
preg_match('/_([0-9]+)/',$child->attributes->getNamedItem('id')->nodeValue,$topicId);
$topicId = (int)$topicId[1];
if(!isset($topics[$topicId]))
{
//topic section
$topics[$topicId] = array();
$topics[$topicId]['thanks'] = array();
$topics[$topicId]['quotes'] = array();
$topics[$topicId]['edit'] = false;
foreach($child->childNodes as $childNodeList)
if($childNodeList->hasAttributes() && $childNodeList->attributes->getNamedItem('class'))
if($childNodeList->attributes->getNamedItem('class')->nodeValue == 'posthead')
$topics[$topicId]['date'] = trim(preg_replace('/#[0-9]/','',$childNodeList->textContent));
elseif($childNodeList->attributes->getNamedItem('class')->nodeValue == 'postdetails')
{
$postdetails_userinfo = $dom->saveHTML($childNodeList->childNodes[1]);
$postdetails_postbody = $dom->saveHTML($childNodeList->childNodes[3]);
preg_match('/member\.php\?([0-9]+).*?/',$childNodeList->childNodes[1]->getElementsByTagName('a')[0]->attributes->getNamedItem('href')->nodeValue,$m);
preg_match('/\<strong\>(\<font color=".*?"\>)?(\<b\>)?(.*?)(\<\/b\>)?(\<\/font\>)?\<\/strong\>/',$postdetails_userinfo,$m2);
$topics[$topicId]['user_id'] = (int)$m[1];
unset($postdetails_userinfo);
$topics[$topicId]['username'] = $m2[3];
preg_match('/\<h2 class\="title icon"\>\s+\>?(.*?)\s+\<\/h2\>/m',$postdetails_postbody,$m);
if(strpos($m[1],'>') !== -1)
$topics[$topicId]['title'] = trim(substr(strstr($m[1],'>'),1));
else
$topics[$topicId]['title'] = trim($m[1]);
$myDom = new domDocument();
$myDom->encoding = 'UTF-8';
$myDom->loadHTML($postdetails_postbody);
if($nd=$myDom->getElementById('post_message_'.$topicId))
foreach($nd->childNodes[1]->childNodes as $ch)
if($ch->hasAttributes() && $ch->attributes->getNamedItem('class') && $ch->attributes->getNamedItem('class')->nodeValue == 'bbcode_container')
{
$temp = $ch;
while(isset($temp->childNodes[1]->childNodes[1]->childNodes)){
foreach($temp->childNodes[1]->childNodes[1]->childNodes as $k=>$_ch)
if($_ch->hasAttributes() && $_ch->attributes->getNamedItem('class') && $_ch->attributes->getNamedItem('class')->nodeValue == 'bbcode_postedby')
{
$uniqueId++;
preg_match('/#post([0-9]+)/',$_ch->childNodes[5]->attributes->getNamedItem('href')->nodeValue,$m);
$topics[$topicId]['quotes']['{{'.$uniqueId.'}}'] = array('username' => $_ch->childNodes[3]->nodeValue,'post_id' => (int)$m[1]);
$_ch->childNodes[3]->nodeValue = '{{'.$uniqueId.'}}';
$temp = $temp->childNodes[1]->childNodes[1]->childNodes[$k+2];
foreach($temp->childNodes as $__ch)
if($__ch->hasAttributes() && $__ch->attributes->getNamedItem('class') && $__ch->attributes->getNamedItem('class')->nodeValue == 'bbcode_container')
{
$temp = $__ch;
break;
}
continue 2;
}
break;
}
}
if($childNodeList->childNodes[3]->childNodes[3]->getElementsByTagName('blockquote')['length'] && $childNodeList->childNodes[3]->childNodes[3]->getElementsByTagName('blockquote')[0]->attributes->getNamedItem('class')->nodeValue == 'postcontent lastedited')
{
$editText = $childNodeList->childNodes[3]->childNodes[3]->getElementsByTagName('blockquote')[0]->childNodes[0]->nodeValue;
preg_match('/آخرین ویرایش به وسیله (.*?) : (.*?) در/',$editText,$m);
$topics[$topicId]['edit'] = array(
'username' => trim($m[1]),
'date' => trim($m[2]),
'time' => trim($childNodeList->childNodes[3]->childNodes[3]->getElementsByTagName('blockquote')[0]->childNodes[1]->nodeValue),
'reason' => trim(isset($childNodeList->childNodes[3]->childNodes[3]->getElementsByTagName('blockquote')[0]->childNodes[4]) ? $childNodeList->childNodes[3]->childNodes[3]->getElementsByTagName('blockquote')[0]->childNodes[4]->nodeValue : null)
);
}
$after_content = $childNodeList->childNodes[3]->childNodes[4];
unset($postdetails_postbody);
$topics[$topicId]['body'] = $myDom->saveHTML($nd->childNodes[1]);
unset($myDom);
}
}
else # thanks section
if($blockquote=$child->getElementsByTagName('a'))
foreach($blockquote as $ch)
if(preg_match('/u\=([0-9]+).*?/',$ch->attributes->getNamedItem('href')->nodeValue,$m))
$topics[$topicId]['thanks'][(int)$m[1]] = $ch->nodeValue;
}
return $topics;
}
print_r(fetch('http://barnamenevis.org/showthread.php?397617-%D8%AA%D8%B4%DA%A9%DB%8C%D9%84-%D9%86%D9%87%D8%A7%D8%AF-%D8%AD%D9%85%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B2-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86'));


در کل باید خوب عمل کند چرا که برای بیشتر احتمال ها نوشته شده ولی شاید در بعضی از صفحات به مشکل بخوریم چرا که احتمالی را در نظر نگرفته باشیم !

این کد پردازش را برای برنامه های دیگر راحت می کند و برای اطلاعات کاربران باید یک الگوریتم دیگری بنویسید.

نمونه :


Array
(
[1764644] => Array
(
[thanks] => Array
(
[123766] => #Elahe#
[320639] => #root#
[131829] => $ M 3 H R D A D $
[245899] => ***BiDaK***
[69346] => ++Hichkas
[261565] => 2undercover
[96273] => 8611670474
[279613] => abd1mr
[257839] => aidinMC
[103858] => Ali0Boy
[107809] => alih110
[341036] => alinwp
[253332] => Alireza_1387
[247476] => alterman
[235166] => amin0256
[302760] => amir1378
[339296] => amirali0079
[281742] => Amir_f
[170720] => armsoftpc
[308051] => asdasd123123
[55624] => bambouk
[276349] => bijar985
[278249] => bobSilon
[75214] => BORHAN TEC
[244830] => Busaba
[181541] => colors
[182998] => cpuram
[262850] => dasssnj
[108805] => DddError
[163170] => Dead Space
[34114] => delphiprog3000
[125754] => desatir7316
[182967] => diaoko89
[294558] => elhamirani
[303405] => erfan.space
[148005] => eshpilen
[74079] => famarini
[292844] => farazsahebdel
[109710] => FastCode
[176587] => f_talebi
[224823] => h.rezaee
[241637] => H:Shojaei
[294130] => hamid_14
[239913] => HCSH90
[149209] => hpsarvari
[178687] => imanitc
[101039] => iradata
[284726] => Jarvis
[82177] => javadt
[1401] => JavanSoft
[96978] => jpjpjp
[159187] => kaz3m.b
[287793] => khayyams.votary
[323820] => kiadata
[273126] => m.j_banitaba
[122842] => M.S.Developer
[187796] => m2011kh
[301756] => maadcn
[313189] => mahdirabbani
[129163] => mahmod2000
[103609] => MahmoudiNik
[265531] => mahtab...
[311234] => marys_farahani
[168323] => masato
[51787] => masoomeh_k6222
[79694] => masoud_pnu
[230644] => matrixhassan
[145429] => maysam.m
[226480] => meysam1366
[120438] => mirzajavad
[223900] => mohamadali1374
[298625] => mohammad.kh
[321921] => mohammadrex
[162484] => mohsen6500
[302800] => Mojtaba.Shateri
[289835] => momixz
[304771] => moon_sky
[277807] => morteza_mokhtari
[125560] => mostafa_shoakry
[270916] => MRmoon
[294694] => mtcoms
[273184] => mypingle
[81924] => nasimsaba
[80473] => nasrin55
[114275] => navid3d_69
[116822] => ncs2008
[70943] => Nima0711
[178668] => novinsite
[194035] => nunegandom
[265476] => Omid Jackson
[282659] => omidabedi
[298486] => p3ym4n
[271514] => pary_daryayi
[301402] => PHPOnline
[246422] => pitook
[174527] => poriab
[303396] => pouyajabbarisani
[203570] => rambod17
[87635] => rash44
[147061] => ravand
[236690] => refugee
[230839] => rezaonline.net
[263444] => sadegh1362
[249408] => saeed-71
[277165] => saeedtrb
[248405] => sajadpm
[271178] => SAjjADma
[335125] => SamiraProgrammer
[72685] => sedamorde
[290244] => sh.n.n786
[153021] => shpegah
[48668] => SilverLearn
[122371] => SlowCode
[250274] => SONITAJ
[140736] => soroush.r70
[253902] => texima
[106026] => trade_mark
[219337] => کامبیز اسدزاده
[131191] => کامروا
[339288] => پسرک کنجکاو
[164182] => Variable
[10624] => vbhamed
[135186] => wallfa
[155063] => WOLF_MEHRDAD
[305602] => yasmohamadi
[217192] => younes221
[265319] => Yuness Mehdian
[124246] => zarifcomputer
[85404] => _lotus_
[192916] => امین مستانی
[311087] => ایلیا آخوندزاده
[68094] => ایمان اختیاری
[309195] => احسان نعیمی
[107144] => تبسم ساینا
[322075] => سینا اکبری
)

[quotes] => Array
(
)

[edit] => Array
(
[username] => MMSHFE
[date] => دوشنبه 27 مرداد 1393
[time] => 22:00 بعد از ظهر
[reason] => اصلاح توضیحات درخصوص نحوه عضویت
)

[date] => جمعه 20 اردیبهشت 1392, 10:05 قبل از ظهر
[user_id] => 55504
[username] => MMSHFE
[title] => تشکیل نهاد حمایت از برنامه نویسان
[body] => <blockquote class="postcontent restore "> ...

abolfazl-z
دوشنبه 06 بهمن 1393, 11:20 صبح
تست کردین ؟ مشکلی نداشت ؟

$ M 3 H R D A D $
دوشنبه 06 بهمن 1393, 12:43 عصر
علامت [] برای خالی کردن ارایه هست ؟

MMSHFE
دوشنبه 06 بهمن 1393, 12:45 عصر
بله معادل تابع array بدون پارامتره. این Syntax جدید PHP (از 5.4 به بعد) هست.

$ M 3 H R D A D $
دوشنبه 06 بهمن 1393, 13:13 عصر
ورژن سرور نهاد 5.3.28 هست انگاری

$ M 3 H R D A D $
دوشنبه 06 بهمن 1393, 13:15 عصر
به خط 39 کد من که خط زیر باشه گیر میده و مشکل کد میگیره

preg_match('/member\.php\?([0-9]+).*?/',$childNodeList->childNodes[1]->getElementsByTagName('a')[0]->attributes->getNamedItem('href')->nodeValue,$m);





Parse error: syntax error, unexpected '[' in /home/nahad/domains/i-nahad.ir/public_html/history.php on line 39

MMSHFE
دوشنبه 06 بهمن 1393, 13:33 عصر
این هم مال 5.4 هست. اینطوری بنویسید:

$links = $childNodeList->childNodes[1]->getElementsByTagName('a');
preg_match('/member\.php\?([0-9]+).*?/',$links[0]->attributes->getNamedItem('href')->nodeValue,$m);

$ M 3 H R D A D $
دوشنبه 06 بهمن 1393, 13:44 عصر
خط های بعدی هم گیر داده فک کنم باید ورژن PHP سرور و دست بزنم.
مشکلای خاصی پیش میاد به بالا رفتن ورژن سرور ؟

abolfazl-z
دوشنبه 06 بهمن 1393, 14:00 عصر
خط های بعدی هم گیر داده فک کنم باید ورژن PHP سرور و دست بزنم.
مشکلای خاصی پیش میاد به بالا رفتن ورژن سرور ؟

حالا یک بک اپ بگیرید.

ورژن php سیستم من 5.6.3 است.

abolfazl-z
دوشنبه 06 بهمن 1393, 14:02 عصر
راستی مسائل امنیتی را هم مد نظر بگیرید. (همین sql injection)

$ M 3 H R D A D $
دوشنبه 06 بهمن 1393, 14:39 عصر
راستی مسائل امنیتی را هم مد نظر بگیرید. (همین sql injection)

مسائا امنیتی در چی ؟ متوجه نشدم

abolfazl-z
دوشنبه 06 بهمن 1393, 14:41 عصر
مسائا امنیتی در چی ؟ متوجه نشدم

در کل داده ها را escape کنید بفرسیتد داخل mysql بهتره

abolfazl-z
دوشنبه 06 بهمن 1393, 14:47 عصر
مسائا امنیتی در چی ؟ متوجه نشدم

مثلا در قسمت دلیل ویرایش ممکن کد sql بزنند و حمله sql injection رو آغاز کنند

همه داده ها را از زیر فیلتر رد کنید.

http://barnamenevis.org/showthread.php?425702-%D8%AD%D9%85%D9%84%D8%A7%D8%AA-SQL-injection

bagherok
سه شنبه 07 بهمن 1393, 00:40 صبح
<?php
header('Content-Type: text/html; charset=utf-8');
set_time_limit(0);
require 'vendor/autoload.php';
use Goutte\Client;
$uri='http://barnamenevis.org/showthread.php?483717-%D9%88%D8%A7%DA%A9%D8%B4%DB%8C-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%86%D8%AC%D9%85%D9%86-%D9%88%DB%8C-%D8%A8%D9%88%D9%84%D8%AA%DB%8C%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D9%81%D8%B1%D9%88%D9%85-%D8%AF%DB%8C%DA%AF%D8%B1';
$client = new Client(); $crawler = $client->request('GET', $uri);

$res=array();
$postcounter=false;
$post_thanks_box_=false;
$crawler->filter('li.postbitlegacy')->each(function ($postcontainer) {
global $res;
global $postcounter;
global $post_thanks_box_;
if($postcontainer->filter('li#post_thanks_box_'.$post_thanks_box_)->count()>0){
$postcontainer->filter('li#post_thanks_box_'.$post_thanks_box_.' a')->each(function ($post_thanks_link) {
global $res;
global $postcounter;
$userid=str_replace("u=", "", explode('&',$post_thanks_link->attr('href'))[1]);
$username=$post_thanks_link->text();
$res[$postcounter]['thanks'][]=array('userid'=>$userid,'username'=>$username);;
});
}
else{

$postcounter=$postcontainer->filter('.posthead>.nodecontrols>.postcounter')->text();
$userinfo=$postcontainer->filter('.postdetails>.userinfo');
$userid=explode('-',str_replace("member.php?", "", explode('&',$userinfo->filter('.username_container>.memberaction>a.username')->attr('href'))[0]))[0];
$username=$userinfo->filter('.username_container>.memberaction>.username>strong')->text();
$website=explode('&',$userinfo->filter('.username_container>.memberaction>ul.memberaction_body>li:nth-child(4) a')->attr('href'))[0];
$userinfo_extra=$userinfo->filter('.userinfo_extra');
$Location=$userinfo_extra->filter('dl dd:nth-child(4)')->text();
$postdate=$postcontainer->filter('.posthead>.postdate>.date')->text();
$postcontent=$postcontainer->filter('.postdetails .postcontent')->text();

$res[$postcounter]['postcounter' ] = $postcounter;
$res[$postcounter]['userid' ] = $userid;
$res[$postcounter]['username' ] = $username;
$res[$postcounter]['website' ] = $website;
$res[$postcounter]['postdate' ] = $postdate;
$res[$postcounter]['Location' ] = $Location;

$olastedited=$postcontainer->filter('.postdetails .postbody .after_content .lastedited')->count();
if($olastedited>0){

$olastedited=$postcontainer->filter('.postdetails .postbody .after_content .lastedited');
preg_match('/آخرین ویرایش به وسیله (.*?) : (.*?) در/',$olastedited->text(),$lastedited);
$lastedited['time']=$olastedited->filter('.time')->text();
preg_match('/ل:(.*)/iu',$olastedited->text(),$lastedited['reason']);

$res[$postcounter]['lastedited' ]['username'] = $lastedited[1];
$res[$postcounter]['lastedited' ]['date' ] = $lastedited[2];
$res[$postcounter]['lastedited' ]['time' ] = $lastedited['time'];
$res[$postcounter]['lastedited' ]['reason' ] = $lastedited['reason'][1];

}
else{
$res[$postcounter]['lastedited' ] = 'empty';
}
$post_thanks_box_=explode('_',$postcontainer->filter('li.postbitlegacy.postbitim.postcontainer.o ld')->attr('id'))[1];
}

});


print_r($res);







.
.
.
.


[#7] => Array
(
[postcounter] => #7
[userid] => 241514
[username] => abolfazl-z
[website] => http://barnamenevis.org/list.php?author/241514-abolfazl-z
[postdate] => یکشنبه 05 بهمن 1393, 20:39 بعد از ظهر
[Location] => فکر
[lastedited] => Array
(
[username] => abolfazl-z
[date] => یکشنبه 05 بهمن 1393
[time] => 21:31 بعد از ظهر
[reason] => افزودن امکانات
)


[thanks] => Array
(
[0] => Array
(
[userid] => 235166
[username] => amin0256
)


)


)

.
.
.
.

$ M 3 H R D A D $
دوشنبه 13 بهمن 1393, 11:42 صبح
<?php
header('Content-Type: text/html; charset=utf-8');
set_time_limit(0);
require 'vendor/autoload.php';
use Goutte\Client;
$uri='http://barnamenevis.org/showthread.php?483717-%D9%88%D8%A7%DA%A9%D8%B4%DB%8C-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%86%D8%AC%D9%85%D9%86-%D9%88%DB%8C-%D8%A8%D9%88%D9%84%D8%AA%DB%8C%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D9%81%D8%B1%D9%88%D9%85-%D8%AF%DB%8C%DA%AF%D8%B1';
$client = new Client(); $crawler = $client->request('GET', $uri);

$res=array();
$postcounter=false;
$post_thanks_box_=false;
$crawler->filter('li.postbitlegacy')->each(function ($postcontainer) {
global $res;
global $postcounter;
global $post_thanks_box_;
if($postcontainer->filter('li#post_thanks_box_'.$post_thanks_box_)->count()>0){
$postcontainer->filter('li#post_thanks_box_'.$post_thanks_box_.' a')->each(function ($post_thanks_link) {
global $res;
global $postcounter;
$userid=str_replace("u=", "", explode('&',$post_thanks_link->attr('href'))[1]);
$username=$post_thanks_link->text();
$res[$postcounter]['thanks'][]=array('userid'=>$userid,'username'=>$username);;
});
}
else{

$postcounter=$postcontainer->filter('.posthead>.nodecontrols>.postcounter')->text();
$userinfo=$postcontainer->filter('.postdetails>.userinfo');
$userid=explode('-',str_replace("member.php?", "", explode('&',$userinfo->filter('.username_container>.memberaction>a.username')->attr('href'))[0]))[0];
$username=$userinfo->filter('.username_container>.memberaction>.username>strong')->text();
$website=explode('&',$userinfo->filter('.username_container>.memberaction>ul.memberaction_body>li:nth-child(4) a')->attr('href'))[0];
$userinfo_extra=$userinfo->filter('.userinfo_extra');
$Location=$userinfo_extra->filter('dl dd:nth-child(4)')->text();
$postdate=$postcontainer->filter('.posthead>.postdate>.date')->text();
$postcontent=$postcontainer->filter('.postdetails .postcontent')->text();

$res[$postcounter]['postcounter' ] = $postcounter;
$res[$postcounter]['userid' ] = $userid;
$res[$postcounter]['username' ] = $username;
$res[$postcounter]['website' ] = $website;
$res[$postcounter]['postdate' ] = $postdate;
$res[$postcounter]['Location' ] = $Location;

$olastedited=$postcontainer->filter('.postdetails .postbody .after_content .lastedited')->count();
if($olastedited>0){

$olastedited=$postcontainer->filter('.postdetails .postbody .after_content .lastedited');
preg_match('/آخرین ویرایش به وسیله (.*?) : (.*?) در/',$olastedited->text(),$lastedited);
$lastedited['time']=$olastedited->filter('.time')->text();
preg_match('/ل:(.*)/iu',$olastedited->text(),$lastedited['reason']);

$res[$postcounter]['lastedited' ]['username'] = $lastedited[1];
$res[$postcounter]['lastedited' ]['date' ] = $lastedited[2];
$res[$postcounter]['lastedited' ]['time' ] = $lastedited['time'];
$res[$postcounter]['lastedited' ]['reason' ] = $lastedited['reason'][1];

}
else{
$res[$postcounter]['lastedited' ] = 'empty';
}
$post_thanks_box_=explode('_',$postcontainer->filter('li.postbitlegacy.postbitim.postcontainer.o ld')->attr('id'))[1];
}

});


print_r($res);







.
.
.
.


[#7] => Array
(
[postcounter] => #7
[userid] => 241514
[username] => abolfazl-z
[website] => http://barnamenevis.org/list.php?author/241514-abolfazl-z
[postdate] => یکشنبه 05 بهمن 1393, 20:39 بعد از ظهر
[Location] => فکر
[lastedited] => Array
(
[username] => abolfazl-z
[date] => یکشنبه 05 بهمن 1393
[time] => 21:31 بعد از ظهر
[reason] => افزودن امکانات
)


[thanks] => Array
(
[0] => Array
(
[userid] => 235166
[username] => amin0256
)


)


)

.
.
.
.




لطفا کلاسی که include کردید و بزارید اینجا یا لینک کنید

bagherok
دوشنبه 13 بهمن 1393, 20:08 عصر
لطفا کلاسی که include کردید و بزارید اینجا یا لینک کنید

https://github.com/FriendsOfPHP/Goutte