PDA

View Full Version : سوال: کمک برای ذخیره کردن اطلاعات از سایت های دیگر



mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 12:53 عصر
سلام
مثلا فرض کنید یه سایت خبری داریم
میخوایم هر سایت چک کنیم این سایت خبر جدید داره و اگه داره اطلاعاتشو در سایت خودمون ذخیره کنیم
با RSS نباشه باشه
همه مشخصه های سایت هم داریم مثل کلاس ها و ای دی ها و دایو ها
کل سایت هم از یه روند تکراری استفاده می کنه و اینطور نیست قابل تغییر باشه
ممنون میشم راهنمایی کنید

dousti_design
یک شنبه 22 اردیبهشت 1392, 13:00 عصر
من قبلا یه سایت خبری (http://www.gholbang.ir) دقیقا همینی که شما میگی رو نوشتم.
از کلاس simple html dom استفاده کردم. خیلی کلاس مفیدی هستش میای مثلا میگی که برو به این صفحه و هرچیزی که بین دایوی که آی دیش برابر با اینه رو بردار بیار:لبخندساده: (البته زبون خودمونیش میشه این)
کلاس رو ضمیمه کردم. این یه مثال:


$html = file_get_html($url);
$e = $html->find('div[class=body]');
$body = $e[0]->innertext ;

این کد میره توی صفحه ای که url اش رو میدید دنبال تگ دایوی میگرده که کلاسش برابر با body باشه.

mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 13:13 عصر
ممنون داداش
خیلی خوب هست
میشه توی حلقه هم گذاشت و مقادیر رو دستکاری کرد و بعد در دیتابیس ذخیره کرد ؟

dousti_design
یک شنبه 22 اردیبهشت 1392, 13:16 عصر
بله چرا که نه. متن رو به شما میده هر تغییراتی خواستید میتونید روی متن اعمال کنید.

mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 14:59 عصر
اگه یخوایم کلاس بگیریم چی میشه ؟
مثلا 100 تا کلاس مشابه داشته باشه ؟!

mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 15:21 عصر
ببخشید حرفه ای تر از این وجود نداره ؟

dousti_design
یک شنبه 22 اردیبهشت 1392, 15:23 عصر
یعنی چی کلاس بگیریم؟
حرفه ای تر هم حتما هست اگر جستجو کنید. اینم میشه ادیت کرد کدهاش سادست

mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 16:27 عصر
مثلا اطلاعات این سایت رو نتونست بکشه بیرون : bwin.com

mahmod2000
یک شنبه 22 اردیبهشت 1392, 17:49 عصر
میشه اطلاعات بیشتری واسه این کلاس در اختیار ما بزارید دوست عزیز؟؟

ممنون میشم

dousti_design
یک شنبه 22 اردیبهشت 1392, 18:07 عصر
کلاس simple html dom (http://simplehtmldom.sourceforge.net/) برای پردازش تگ های html نوشته شده. بارزترین کاربردش همینی هست که عرض کردم. محتویات یک element رو واکشی میکنه و در اختیارتون میذاره. و یه سری کارهای جانبی مثل replace کردن و...
اطلاعات بیشتر + مثال و... توی آدرس مربوط به کلاس در سایت SourceForge موجوده.

mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 18:17 عصر
شما الان یه تست بزن ببین میتونی از bwin چیزی بگیری ؟

mahmod2000
یک شنبه 22 اردیبهشت 1392, 19:23 عصر
این سایت که شما میگی فیلتره

بعدم من از 2 تا سایت استفاده کردم خوب کار میکنه.. در کل کلاسه خوبیه

mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 19:40 عصر
من تست کردم متاسفانه مشکل داره

mahmod2000
یک شنبه 22 اردیبهشت 1392, 19:51 عصر
نه دوست عزیز کلاس مشکلی نداره...

من هم خیلی وقته دنبال همچین کلاسی میگشتم که بتونم اخبار رو بگیرم و در دیتابیس بریزم

فقط یه مقدار کد نویسی میخواد

dousti_design
یک شنبه 22 اردیبهشت 1392, 19:57 عصر
شما الان یه تست بزن ببین میتونی از bwin چیزی بگیری ؟

کدی که برای این منظور نوشتید و جواب نداد رو قرار بدید؟

mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 20:28 عصر
این کد :

<?php
include_once 'dom.php';
$url='http://www.bwin.com/';
$html = file_get_html($url);
$e = $html->find('div[id=footer]');
echo $body = $e[0]->innertext ;
?>
اینم خطاش :

Warning: file_get_contents(http://www.bwin.com/) [function.file-get-contents]: failed to open stream: HTTP request failed! in C:\Program Files\---\---\---\dom.php on line 75

matrixhassan
یک شنبه 22 اردیبهشت 1392, 20:37 عصر
خوب عزیز برای اینکه فیلتره

dousti_design
یک شنبه 22 اردیبهشت 1392, 22:39 عصر
این کد :

<?php
include_once 'dom.php';
$url='http://www.bwin.com/';
$html = file_get_html($url);
$e = $html->find('div[id=footer]');
echo $body = $e[0]->innertext ;
?>
اینم خطاش :

Warning: file_get_contents(http://www.bwin.com/) [function.file-get-contents]: failed to open stream: HTTP request failed! in C:\Program Files\---\---\---\dom.php on line 75

خب این ربطی به parse کردن عناصر صفحه ندار و مربوط به اینه که تابع file_get_contents نتونسته به اون صفحه دسترسی پیدا کنه. دلیلشم احتمالا همینیه که دوستمون گفت فیلتره

mamali-mohammad
یک شنبه 22 اردیبهشت 1392, 23:05 عصر
نه با vp*n هم انجام دادم اوکی نشد

matrixhassan
یک شنبه 22 اردیبهشت 1392, 23:56 عصر
انگار اشکال داره من برای یه سایت دیگه انجامش دادم ارور زیرو داد

Notice: Undefined offset: 0 in ...\simple_html_dom\simple_html_dom.php on line 1726

dousti_design
دوشنبه 23 اردیبهشت 1392, 00:07 صبح
بدون اشکال که نیست باید طبق خواسته هامون ویرایشش کنیم.

نه با vp*n هم انجام دادم اوکی نشد

نمیدونم وی پی ان روی آپاچی تاثیر میذاره یا نه ولی میدونم که این اروری که میده مربوط به اشکالات این کلاس نمیشه و کانکشنتون رو باید درست کنید

mamali-mohammad
دوشنبه 23 اردیبهشت 1392, 10:14 صبح
آره درسته
حالا کلاس حرفه ای تری سراغ دارید ؟

arlvl4n.z3r0
دوشنبه 23 اردیبهشت 1392, 10:44 صبح
سلام و درود.
.ولی آیا واسه تالار گفتمان ها هم به این روش که گفتی می شه یک پایگاه خبری درست کرد؟

arlvl4n.z3r0
دوشنبه 23 اردیبهشت 1392, 11:05 صبح
:متفکر::متفکر::متفکر::متفکر:: تفکر:

mamali-mohammad
چهارشنبه 25 اردیبهشت 1392, 18:20 عصر
این کلاس قدیمیه
کلاس جدیدش رو از sourceforge دانلود کنید
اما نمی دونم چرا هرچی میزنم صفحه سفید میاره

MostafaEs3
چهارشنبه 25 اردیبهشت 1392, 19:09 عصر
این کلاس قدیمیه
کلاس جدیدش رو از sourceforge دانلود کنید
اما نمی دونم چرا هرچی میزنم صفحه سفید میاره

در نسخه جدید یکی از بزرگترین ایراداتش رفع شده. قبلا تگهای Inline مثل span, b, i, u, font رو به خط جدید منتقل میکرد (در plaintext) ولی در نسخه جدید (مشابه مرورگر ها) فقط یک فاصله قرار میده. برای وبسایت خبری که قبلا درحال کار بر روی اون بودم این مشکل خیلی اذیتم کرد
من نزدیک به 5 ماه تمام وقت داشتم روی این کلاس و کلا (جستجوگر خبری) کار میکردم که البته بعدش بخاطر یک اتفاق ، کل پروژه از دست رفت :افسرده:

mamali-mohammad
چهارشنبه 25 اردیبهشت 1392, 19:35 عصر
داداش تجربیاتت رو میگی ؟
من نمیدونم چرا میزنم سایت سفید میاره

MostafaEs3
چهارشنبه 25 اردیبهشت 1392, 20:36 عصر
داداش تجربیاتت رو میگی ؟
من نمیدونم چرا میزنم سایت سفید میاره

آقا محمد کدتون رو بزارید تا دلیلش رو بهتون بگم :لبخندساده:

mamali-mohammad
چهارشنبه 25 اردیبهشت 1392, 21:56 عصر
خدمت شما :

<?php
include('simple_html_dom.php');
// Create DOM from URL
$html = file_get_html('http://slashdot.org/');

// Find all article blocks
foreach($html->find('div.article') as $article) {
$item['title'] = $article->find('div.title', 0)->plaintext;
$item['intro'] = $article->find('div.intro', 0)->plaintext;
$item['details'] = $article->find('div.details', 0)->plaintext;
$articles[] = $item;
}

print_r($articles);
?>

خطا :

Notice: Undefined variable: articles in C:\---\www\---\index.php on line 14

MostafaEs3
چهارشنبه 25 اردیبهشت 1392, 22:27 عصر
خب محمد آقا شما توی حلقه یک ردیف جدید به آرایه articles اضافه کردین درصورتی که این متغیر از قبل وجود نداره. شما نیاز هست قبل از حلقه یک آرایه خالی تعریف کنید.

کد اصلاح شده ::


include('simple_html_dom.php');

// Create DOM from URL
$html = file_get_html('http://slashdot.org/');
$articles = array();

// Find all article blocks
foreach($html->find('div.article') as $article) {
$item['title'] = $article->find('div.title', 0)->plaintext;
$item['intro'] = $article->find('div.intro', 0)->plaintext;
$item['details'] = $article->find('div.details', 0)->plaintext;
$articles[] = $item;
}

print_r($articles);

کلا توی هر اروری Undefined variable دیدین یعنی متغیری تعریف نشده (و نیاز هست قبلش متغیر رو تعریف کنید)

mamali-mohammad
چهارشنبه 25 اردیبهشت 1392, 23:35 عصر
سلام
گذاشتم اما خروجی این شد :

Array ( )

MostafaEs3
پنج شنبه 26 اردیبهشت 1392, 00:21 صبح
//////////

mamali-mohammad
پنج شنبه 26 اردیبهشت 1392, 00:40 صبح
اینم جواب نداد
من برای سایت اندرویدها تست زدم نشد
کد :

<?php
include('simple_html_dom.php');

function scraping_slashdot() {
// create HTML DOM
$html = file_get_html('http://www.androidha.com/');

// get article block
foreach($html->find('div[class^=post-]') as $article) {
// get title
$item['title'] = trim($article->find('h3', 0)->plaintext);
// get body
$item['body'] = trim($article->find('div.post_text', 0)->plaintext);

$ret[] = $item;
}

// clean up memory
$html->clear();
unset($html);

return $ret;
}

// -----------------------------------------------------------------------------
// test it!
$ret = scraping_slashdot();

foreach($ret as $v) {
echo $v['title'].'';
echo '<ul>';
echo '<li>'.$v['body'].'</li>';
echo '</ul>';
}
?>

mamali-mohammad
پنج شنبه 26 اردیبهشت 1392, 10:07 صبح
ممنون میشم یه کمک کنی

MostafaEs3
پنج شنبه 26 اردیبهشت 1392, 13:02 عصر
//////////

mamali-mohammad
پنج شنبه 26 اردیبهشت 1392, 15:21 عصر
ممنون داداش خوب کار کرد
چطوری میتونم ای دی یه تگ رو بدست بیارم ؟
مشکل کلاس های فاصله دار رو چطوری میشه حل کرد ؟

mamali-mohammad
جمعه 27 اردیبهشت 1392, 10:54 صبح
ممنون میشم یه کمکی کنی

mamali-mohammad
جمعه 27 اردیبهشت 1392, 17:02 عصر
دوستان ؟
کسی نیست ؟

MostafaEs3
جمعه 27 اردیبهشت 1392, 19:04 عصر
//////////

mamali-mohammad
جمعه 27 اردیبهشت 1392, 21:30 عصر
اقا دمت گرم
من از کدتون استفاده میکنم و اکثر سایت ها ردیفه
اما نمی دونم چرا روی سایت sbobet جواب نمیده
این کد من :
<?php
header('Content-Type: text/plain; charset=utf-8');
error_reporting(E_ALL);

## [Config]->Define
define('APPLICATION_HTTP', '//application');
define('APPLICATION_DIR', '');

## [Config]->Require
require_once(APPLICATION_DIR . 'library/curl.php');
require_once(APPLICATION_DIR . 'library/function.php');
require_once(APPLICATION_DIR . 'library/simple_html_dom.php');

## [Config]->Classes
$library = new stdClass();
$library->curl = new Curl();
$library->dom = new simple_html_dom();

$data = array();
$errors = array();

$data['contents'] = $library->curl->Open('http://www.sbobet.com/euro/football')->contents;

$library->dom->load($data['contents']);
foreach (array('style', 'script', 'meta', 'link') as $tag) {
foreach ($library->dom->find($tag) as $element) { $element->outertext = ""; }
}
foreach (array('abbr', 'acronym', 'wbr', 'span', 'font', 'b', 'u', 'i', 'q', 's', 'strong', 'em', 'strike', 'dfn', 'code', 'samp', 'kbd', 'var', 'time', 'sub', 'sup', 'small', 'big', 'cite', 'bdo', 'bdi', 'mark') as $tag) {
foreach ($library->dom->find($tag) as $element) { $element->outertext = $element->innertext; }
}

$library->dom->load($library->dom->save());

foreach ($library->dom->find('table[class=Onex2]') as $article) {

foreach ($article->find('a[class=more]') as $remove_1) { $remove_1->parent->innertext = ""; }
foreach ($article->find('a[class=cal]') as $remove_3) { $remove_3->innertext = ""; }
foreach ($article->find('a[class=comment]') as $remove_2) { $remove_2->innertext = ""; }

//$item = array();
echo $item['title'] = $article->find('tr td.Fav') ? build_inline($article->find('tr td.Fav', 0)->plaintext) : "";
echo "\n";echo "1";

$articles[] = $item;
}

?>

mamali-mohammad
شنبه 28 اردیبهشت 1392, 11:01 صبح
داداش یه کمکی بدی ممنون میشم