نمایش نتایج 1 تا 18 از 18

نام تاپیک: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

  1. #1

    خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    سلام
    من با curl محتویات یک لینک رو میخوام بخونم با پترن ها تریکبش کنم و مثلا ازیک لینک خبر فقط title خبر و متن کامل خبر رو بگیرم
    این کد کورل

    <?php
    // create a new curl resource
    $ch = curl_init();

    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_URL, "http://www.barnamenevis.org/");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);

    // grab URL and pass it to the browser
    $output=curl_exec($ch);

    // close curl resource, and free up system resources
    curl_close($ch);


    if (preg_match ("@\<title\>(.*)\</title\>@i", $output, $array)) {

    $title = $array[1];

    }

    echo $title;
    ?>



    الان عنوان خبر رو میتونم ببینم بدون مشکل
    اما برای خوندن متن کامل خبر نمیدونم دقیقا باید چه کار کنم
    یعنی مثل عنوان که <title></title> داره متن کامل خبر تگ خاصی نداره
    نیازمند معلومات شما هستم

  2. #2

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    شما دارید توسط C-URL محتوای صفحه رو میگیرید پس باید همونجور که عنوان رو پیدا کردید. خبر رو هم از طریق DOM پیدا کنید. باید HTML صفحه رو از طریق توابع DOM در PHP به DOM تبدیل کنید و از اون طریق بین Nodeها و تگها حرکت کنید. مثلا متن خبر در تگ body در یک DIV با id مثلا content هست و الا آخر....
    یه نگاهی به SimpleXML بندازید. کار کردن باهاش خیلی سادست.

  3. #3
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1383
    محل زندگی
    سمنان - ایران
    پست
    440

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    دوست عزيز :
    من قبلا چنين كاري را انجام دادم .
    اما من از تابع file_get_contents استفاده كردم .
    مثال :

    $str1=file_get_contents('https://barnamenevis.org/showthread.php?t=207420');


    پس از خواندن صفحه اطلاعات مورد نياز را جدا كردم و نشان دادم .

    موفق باشيد .

  4. #4
    کاربر دائمی آواتار yasgig
    تاریخ عضویت
    تیر 1388
    محل زندگی
    اردبیل
    سن
    33
    پست
    534

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    پس از خواندن صفحه اطلاعات مورد نياز را جدا كردم و نشان دادم .
    میشه در مورد جداسازی کمی توضیح بدین یا همون کد خودتون رو که با هاش جداسازی می کنید اینجا قرار بدین؟

  5. #5
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1383
    محل زندگی
    سمنان - ایران
    پست
    440

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    همانطور كه مي دانيد من كل صفحه را به صورت يك رشته خوندم ، بعد قسمتي از رشته را كه مي خواستم بريدم و استفاده كردم :

    //خواندن محتواي صفحه ....
    $st2=file_get_contents("http://www.Myweb.Com/Work.aspx");
    //بدست آوردن و بريدن بخش ابتدايي ...
    $st2=substr($st2,strpos('<table id="tbwork">'));
    // جدا سازي بخش انتهايي ....
    $st2=substr($st2,0,strpos($st2,'</table>'));

    // بعد هم رشته باقيمانده كه همان قسمت دلخواه شماست را مي توانيد هر طور كه مايليد استفاده نمائيد .


    از محاسن اين روش اين است كه وب سايت شما به صورت خودكار آپديت مي شود و مزايايي كه شما بهتر مي دانيد ....
    نمونه كامل اين مثال همين صفحه آگهي استخدام روزنامه هاي كثير الانتشار كه در امضاء من نيز آمده است .

    موفق و پيروز باشيد .


  6. #6
    کاربر دائمی آواتار yasgig
    تاریخ عضویت
    تیر 1388
    محل زندگی
    اردبیل
    سن
    33
    پست
    534

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    فرض کنید محتوای صفحه من به صورت زیر هستش
    <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body style="margin: 1px; background-color: rgb(255, 255, 255);">
    <div style="background-color: rgb(255, 255, 255); font-family: tahoma; font-style: normal; font-variant: normal; font-weight: normal; font-size: 8pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; height: 108px; color: rgb(0, 0, 0);" dir="rtl">
    <div style="padding: 3px; text-align: center;"><b>
    آمار سایت
    </b></div>

    <div style="padding: 0px 5px 2px; font-family: tahoma; font-style: normal; font-variant: normal; font-weight: normal; font-size: 9pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; text-align: right;">
    بازديد امروز:&nbsp;2 <br>
    بازديد هفته:&nbsp;13 <br>
    بازديد ماه:&nbsp;13 <br>
    بازديد سال:&nbsp;13 <br>
    بازديد كل:&nbsp;13 <br>
    </div>

    <div style="text-align: center;">
    <a target="_blank" style="text-decoration: none; color: rgb(0, 0, 0);" href="http://yasgig.ir/">یاس گیگ
    </a>
    </div>
    </div>

    </body></html>

    حالا چجوری میشه از کد شما استفاده کرد و فقط از
    <div style="padding: 0px 5px 2px; font-family: tahoma; font-style: normal; font-variant: normal; font-weight: normal; font-size: 9pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; text-align: right;">

    تا اولین div بسته شده را نشون داد؟من هر کاری کردم نتونستم جداسازی کنم.در ضمن می تونین کمی در مورد او 0 و ... کمی توضیح بدین؟یعنی می خوام بدونم نقش اون 0 چیه؟
    با تشکر

  7. #7

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    نقل قول نوشته شده توسط Mah مشاهده تاپیک
    همانطور كه مي دانيد من كل صفحه را به صورت يك رشته خوندم ، بعد قسمتي از رشته را كه مي خواستم بريدم و استفاده كردم :

    //خواندن محتواي صفحه ....
    $st2=file_get_contents("http://www.Myweb.Com/Work.aspx");
    //بدست آوردن و بريدن بخش ابتدايي ...
    $st2=substr($st2,strpos('<table id="tbwork">'));
    // جدا سازي بخش انتهايي ....
    $st2=substr($st2,0,strpos($st2,'</table>'));

    // بعد هم رشته باقيمانده كه همان قسمت دلخواه شماست را مي توانيد هر طور كه مايليد استفاده نمائيد .
    اگر توی اون table یه table دیگه باشه چی؟ اون موقع اسکریپت با رسیدن به اون متوقف میشه. در این حالت بهتره از Regex استفاده بشه که در اون حالت هم اگر بالای این جدول یک جدول مشابه ایجاد بشه مشکل بوجود میاد.

    برای این کار روشهای زیادی وجود داره. این بستگی به شرایط داره. حتی میشه با جاوااسکریپت این کار رو کرد اگر محتوا کم باشه. روش Mah خوبه اگر ساختار صفحه چنین امکانی رو به ما بده.

    همونجور که گفتم با DOM هم میشه این کار رو کرد. می تونیم کدهای صفحه رو XML در نظر بگیریم و با استفاده از SimpeXML توش حرکت کنیم. که این روش هم محدودیت داره و اون اینکه ساختار صفحه باید استاندارد و کامل باشه یعنی <br> مشکل داره و باید </ br> باشه تا کار کنه یا همه تگها بسته شده باشه یا همه کدها توی <html> باشن.
    یه اکستنژن هست به نام Tidy که کارش اینه که میاد کدهای HTML رو مرتب می کنه. میشه باهاش یه صفحه HTML بی سر و ته رو به XML و XHTML معتبر تبدیل کرد. کد زیر نمونه Yasgig هست که از قضا بسیاری از قوانین XHTML رو رعایت نکرده و میشه tidy رو باهاش مثال زد:
    $page = <<<PAGE
    <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body style="margin: 1px; background-color: rgb(255, 255, 255);">
    <div style="background-color: rgb(255, 255, 255); font-family: tahoma; font-style: normal; font-variant: normal; font-weight: normal; font-size: 8pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; height: 108px; color: rgb(0, 0, 0);" dir="rtl">
    <div style="padding: 3px; text-align: center;"><b>
    آمار سایت
    </b></div>

    <div style="padding: 0px 5px 2px; font-family: tahoma; font-style: normal; font-variant: normal; font-weight: normal; font-size: 9pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; text-align: right;">
    بازديد امروز:&nbsp;2 <br>
    بازديد هفته:&nbsp;13 <br>
    بازديد ماه:&nbsp;13 <br>
    بازديد سال:&nbsp;13 <br>
    بازديد كل:&nbsp;13 <br>
    </div>

    <div style="text-align: center;">
    <a target="_blank" style="text-decoration: none; color: rgb(0, 0, 0);" href="http://yasgig.ir/">یاس گیگ
    </a>
    </div>
    </div>

    </body></html>
    PAGE;


    $tidy = new tidy;
    $tidy = tidy_parse_string($page, array('output-xhtml' => TRUE), 'UTF8'); // Parse HTML codes
    $page = $tidy->cleanRepair(); // Clean the codes

    $page = "<?xml version='1.0'?>" . $page; // Add XML header

    $xml = simplexml_load_string($page); // Create SimpleXML instance
    $target = $xml->body[0]->div[0]->div[1]; // Get: First <body> ... first <div> in it ... second <div> in previous <div>
    echo $target->asXML(); // asXML shows data with html tags

    Tidy باید روی PHP5 نصب باشه ولی من الان دو تا هاست رو چک کردم دیدم نبود. اطلاعات بیشتر از Tidy:


    اینها همه روشهای ابتکاری هستند. باید سعی کنید ازشون ایده بگیرید تا بهترین روش مناسب خودتون رو پیدا کنید.
    آخرین ویرایش به وسیله امیـرحسین : یک شنبه 09 اسفند 1388 در 21:41 عصر

  8. #8

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    خوب مشکل من اینه که همه سایت ها که شروع و پایان متن کامل خبرشون یکی نیست
    مثلا تایتل صفحه توی همه جا تگ <title></title>هست و مسلما معلومه اما برای بادی صفحه ما کلیه قالب سایت رو داریم با منو های اصلی سایت و ...
    این که چه طوری بفهمونیم که فقط وسط صفحه رو جدا کنه یکم سخته
    من اگه توی سایتم متن کامل خبر رو این شکلی بدم

    <p align=right dir=rtl>
    متن کامل خبر
    </p>

    اگه باز از این تگ موجود بود چی؟
    یا اصلا من بین تگ <p> بزارم یک سیات دیگه بین <div></div> گزاشتش چی؟
    فکر کنم باید برای هر سایتی که میخوهیم اخبارشو برداریم باید یک الگو تعریف کنیم مثلا بگیم اگه از فلان سایت بود از این الگو استفاده کنه و فلان سایت بود از الگوی ویژه که برای اون نوشتیم

  9. #9
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1383
    محل زندگی
    سمنان - ایران
    پست
    440

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    دوست عزيز .
    شما بايد براي هر خبرگزاري يك كد جدا بنويسيد .
    من نيز قبلا به چنين مشكلي برخوردم كه مجبور شدم كدم را تغيير بدم .
    بهتره براي هر خبرگزاري يك صفحه داشته باشي ، كه بر حسب مورد از جداساز مناسب استفاده كني .

    موفق باشيد .

  10. #10

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    نقل قول نوشته شده توسط Mah مشاهده تاپیک
    دوست عزيز .
    شما بايد براي هر خبرگزاري يك كد جدا بنويسيد .
    من نيز قبلا به چنين مشكلي برخوردم كه مجبور شدم كدم را تغيير بدم .
    بهتره براي هر خبرگزاري يك صفحه داشته باشي ، كه بر حسب مورد از جداساز مناسب استفاده كني .

    موفق باشيد .
    آها مرسی عزیز
    میشه از یک ایده هم استفاده کرد
    به جای اینکه مثلا صفحه جدا بسازیم برای هر سایت پترنش رو بریزیم توی دیتابیس و از بانک پترن رو بخونیم
    بهتر نیست؟

  11. #11
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1383
    محل زندگی
    سمنان - ایران
    پست
    440

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    نقل قول نوشته شده توسط funpatogh مشاهده تاپیک
    آها مرسی عزیز
    میشه از یک ایده هم استفاده کرد
    به جای اینکه مثلا صفحه جدا بسازیم برای هر سایت پترنش رو بریزیم توی دیتابیس و از بانک پترن رو بخونیم
    بهتر نیست؟
    من با اين ايده موافقم .
    چيز جالبي ميشه .

  12. #12
    کاربر دائمی آواتار yasgig
    تاریخ عضویت
    تیر 1388
    محل زندگی
    اردبیل
    سن
    33
    پست
    534

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    آیا میشه با file_get_contents محتوای یه صفحه رو گرفت و یه متن خاص رو حذفش کرد و به جای اون متن خودمون رو بنویسیم.به طور مثال از محتوای صفحه به صورت زیر باشه:
     <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="margin:1px;background-color: FFFFFF ">
    <div style="background-color:FFFFFF ; font:8pt tahoma; height:108px; color: 000000 " dir="rtl">
    <div style="padding:3px; text-align:center"><b>
    آمار سایت
    </b></div>

    <div style="padding: 0px 5px 2px 5px ; font:9pt tahoma; text-align:right">
    بازديد امروز:&nbsp;2 <br>
    بازديد هفته:&nbsp;13 <br>
    بازديد ماه:&nbsp;13 <br>
    بازديد سال:&nbsp;13 <br>
    بازديد كل:&nbsp;13 <br>
    </div>

    <div style="text-align:center">
    <a target="_blank" style="text-decoration:none; color: 000000" href="http://example.com">دریافت كد آمارگیر از وب استات
    </span></a>
    </div>
    </div>
    </body></html>

    حالا می خوام نام اون لینک رو به صورت دریافت ابزار از یاس گیگ و آدرس لینک رو به http://www.yasgig.ir تغییر بدم. یا اینکه با چه قاعده ای میشه فقط قسمت آمار رو جداسازی کرد؟
    با تشکر

  13. #13
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1383
    محل زندگی
    سمنان - ایران
    پست
    440

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    دوست عزيز همانطور مي بيني (در پستهاي قبلي همين تاپيك) من بخشي از لينكها و ... را تغيير دادم ؛ يعني Replace كردم .
    شما هم مي تواني از همين تكنينك استفاده كني .

  14. #14
    کاربر دائمی آواتار yasgig
    تاریخ عضویت
    تیر 1388
    محل زندگی
    اردبیل
    سن
    33
    پست
    534

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    اون کدی رو که شما قرار دادین یکم مشکل داره.من با هاش هر کاری کردم ارور داد.در ضمن یک متغییر رو دو بار تعریف کردین.میشه کمی اونو بهینه کنید؟در ضمن میشه کمی در مورد اون کد کمی توضیح بدین؟این substr و strpos چیه؟
    با تشکر

  15. #15
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1383
    محل زندگی
    سمنان - ایران
    پست
    440

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    من داخل رشته جستجو مي كنم .

    //بدست آوردن و بريدن بخش ابتدايي ...
    $st2=substr($st2,strpos('<table id="tbwork">'));


    در اينجا '<table id="tbwork"' را پيدا كردم و با تابع substr رشته را بريدم . يعني از ابتداي رشته تا محل برگردانده شده توسط تابع strpos را دور انداختم .

    // جدا سازي بخش انتهايي ....
    $st2=substr($st2,0,strpos($st2,'</table>'));


    در اينجا هم همان عمليات اتفاق مي افته ؛ فقط يك فرق كوچك داره كه من از ابتداي رشته يعني موقعيت 0 تا محل انتهاي رشته مورد نظر را جدا مي كنم و نگه مي دارم .

    توضيحات substr و strpos


    strpos

    (PHP 4, PHP 5)
    strpos — Find position of first occurrence of a string

    Description

    int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
    Returns the numeric position of the first occurrence of needle in the haystack string. Unlike the strrpos() before PHP 5, this function can take a full string as the needle parameter and the entire string will be used.


    ------------


    SubStr

    string substr ( string $string , int $start [, int $length ] )
    Returns the portion of string specified by the start and length parameters.








    موفق باشيد .

  16. #16

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    دوست عزیز من واسه صفحات گوگل این کار را گردم، اگر با DOM آشنا نیستی یا کار کردن با XML و Request برات سخته می تونی با file_Get_content محتوا را بگیری و با پترن مورد نظرت داده ها را استخراج کنی با چند تا split و preg ساده می تونی راحت این کار را انجام بدی...

  17. #17

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    یاس گیگ عزیز جوابشو خودم فهمیدم در اختیارتون میزارم تجربه خودم رو

    <?php
    $url ="http://forum.funpatogh.com/showthread.php?t=46335";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    ob_start();
    $html=curl_exec($ch);
    ob_end_clean();
    curl_close ($ch);

    if( preg_match( '/<title>(.*?)<\/title>/si' , $html , $match ) ) {
    echo "<b>$match[1]</b>";
    }

    if( preg_match( '/<div id="post_message_219936">(.*?)<\/div>/si' , $html , $Match ) ) {
    echo $Match[1];
    }












    ?>

  18. #18
    کاربر دائمی آواتار yasgig
    تاریخ عضویت
    تیر 1388
    محل زندگی
    اردبیل
    سن
    33
    پست
    534

    نقل قول: خوندن بخش دلخواه از لینک به کمک curl و ترکیب با preg_match

    خیلی ممنون.مشکل حل شد.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •