50درصد تخفیف سورس فروشگاهی دیجی کالا + اپلیکیشن اندروید تا پایان این هفته - کد تخفیف : off50
با تخفیف میخرم

ساخت پیش نمایش لینک ها در php همانند تلگرام

  • آپدیت شده در تاریخ

ساخت پیش نمایش لینک ها در php همانند تلگرام

ساخت پیش نمایش لینک ها در php همانند تلگرام بسیار ساده است در این آموزش نحوه ساخت را با CURL و AJAX نشان میدهیم

زمانی که یک لینک را در شبکه های اجتماعی مانند فیس-بوک یا تلگرام به اشتراک می گذارید, به طور خودکار عکس و عنوان محتوای لینک به صورت پیش نمایش  نشان داده میشد .

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

در آموزش ساخت پیش نمایش لینک ها در php همانند تلگرام قصد داریم به شما نحوه استخراج تصویر , عنوان و توضیحات متا را از url به اشتراک گذاشته شده و نمایش آن به کاربر را نشان بدیم

 

در این مثال از ساخت پیش نمایش لینک ها در php ما از کتابخانه CURL برای نمایش محتویات و عکس های لینک مورد نظر استفاده می کنیم.

زمانی که کاربر یک یک لینک را در باکس متنی وارد می کند , یک دستور AJAX به صفحه PHP برای بررسی صفحه موردنظر با CURL و استخراج داده های مورد نظر استفاده می کنیم .در آموزش های قبلی نحوه استخراج دیتاهای یک صفحه و خواندن محتویات آن با curl در php را دیدیم.

بعد از دریافت اطلاعات صفحه , کدهای php یک داده JSON دارای عنوان , توضیحات و عکس را ایجاد و پاسخ را به صورت ajax برای مرورگر ارسال میکند

متد AJAX برای خواندن CURL

کد jquery زیر درخواست ajax حاوی url را برای دریافت اطلاعات را ارسال میکند . زمانی که کاربر url را در فیلد input وارد می کند ,  یک درخواست AJAX به صفحه get-data.php ارسال میشود . در این فایل , ما اطلاعات لینک درخواستی را با CURL استخراج و محتویات را به عنوان پاسخ AJAX ارسال میکنیم.

بعد از دریافت اطلاعات از URL , پیشنمایش در مرورگر ظاهر می شود . اگر url مورد نظر دارای عکس نیز باشد این عکس ها با کلیک بر روی دکمه ها قابل نمایش خواهند بود.

درخواست PHP CURL برای استخراج اطلاعات لینک

کد های PHP زیر به شما نحوه دریافت عنوان و اطلاعات meta توسط CURL و DOMDocument را نشان می دهد . دستور CURL زیر یک خروجی حاوی محتویات HTML صفحه را return میکند .

بعد از دریافت محتویات HTML , نیاز داریم که اطلاعات تگ های title , meta و img را استخراج کنیم . برای اینکار از شی DOMDocument بهره می بریم . این شی اطلاعات رت به صورت داده آرایه ای json برای ما بازگشت میدهد که با عنوان پاسخ AJAX استفاده خواهد شد.

برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود

خروجی پیش نمایش لینک ها در php همانند تلگرام و فیسبوک

ساخت پیش نمایش لینک ها در php همانند تلگرام ساخت پیش نمایش لینک ها در php همانند تلگرام

دیدید به چه راحتی در دو مرحله و فقط استفاده از ajax و curl در php توانستیم یک پیشنمایش از محتویات لینک ها را بسازیم.

امیدوارم از آموزش ساخت پیش نمایش لینک ها در php همانند تلگرام نهایت استفاده را برده باشید .

هرگونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید

 

حسن شفیعی علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم

آموزش های رایگان بیشتر در اینستاگرام ما ...

NETPARADIS /
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۱۷)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. سارا شایسته ۸ مهر ۱۳۹۸

    سلام وقت بخیر
    توی بعضی از لینک ها وقتی درآوردن اطلاعات لینک بیشتر از ۳۰ ثانیه میشه خطا میده یا وققتی میخوایم چندین لینک رو پشت سرهم قرار بدیم و نوبتی اطلاعاتشون رو بگیرم وقتی یکی از لینک ها بیشتر از ۳۰ ثانیه طول میکشه خطا میده
    میگه تایم ۳۰ ثانیه هست خطا برای خط ۱۲ curl_exec
    برای اینکه curl
    این خطا رو نده یعنی تایمش رو زیاد کنم با ید چجور تایمش رو زیاد کنم؟
    میگه تایم ۳۰ ثانیه هست خطا برای خط ۱۲
    وری میشه تایم پیش فرض رو از ۳۰ افزایش داد آیا با کد php هم میشه اینکار رو کرد یا باید از php.ini تایم پیش فرض رو نشون داد؟
    و سوال بعدی وقتی با این سورس شما اطلاعات لینک وبلاگ های رزبلاگ رو میخوام ثبت کنم باز خطا میده میگه مشکل در لینک وجود دارد فکر کنم سایت رزبلاگ curl رو بسته باید چکارهایی کرد تا بشه ماله رزبلاگ یا سایتهای دیگه رو هم گرفت برای استخراج لینک های یک صفحه (https://netparadis.com/extract-webpage-urls-php/)شما یه کد داده بودید که برای سایت تابناک کار نمیکرد و بعد برای تابناک جدا کد نوشتید (قسمت نظرات https://netparadis.com/extract-webpage-urls-php/)و کار کرد منم بخوام برای رز بلاگ یا هرسایت دیگه ای جدا کد بتونم بنویسم از کدوم آموزش شما استفاده کنم؟

    پاسخ
    1. حسن شفیعی ۸ مهر ۱۳۹۸

      سلام ممنون.
      میتونید برای curl یک تیم اوت تعریف کنید
      curl_setopt($ch, CURLOPT_TIMEOUT, 100); // seconds
      بعد هم اینکه باید زمان اجرای اسکریپت رو تغییر بدید که در بعضی از هاستینگ های اشتراکی امکانش نیست : آموزش تغییر زمان اجرای اسکریپت php
      در مورد رزبلاگ اطلاعی ندارم باید اونقدری به curl و آپشن های اون مسلط باشید و تست کنید تا در نهایت بتونید خروجی بگیرید و یک کد آماده نیست که برای همه سایت ها کار کنه.
      موفق باشید.

      پاسخ
  2. سارا شایسته ۱۹ شهریور ۱۳۹۸

    سلام
    وقت بخیر من میخواستم یه اسکریپت رو تغیر بدم بخاطر پروژه دانشجویی میخواستم بدونم میتونم از این آموزش برای اینکه توی اسکریپت کوتاه سازی لینک مترو تغیرات زیر و بدم
    یک . وقتی کاربر لینکی رو ثبت میکنه عنوان لینک و همون تایتل صفحه ای که لینک اونو نشون میده همراه با متاتگ های description و کیورد رو توی دیتابیس کپی کنه اگه میشه چجوری کد بنویسم براش مثلا چجوری کد بنویسم که اطلاعاتی که CURL از لینک کاربر گرفته رو توی دیتابیس همون لینگ که توی دیتابیس ذخیره میشه رو ذخیره کنه
    دو . این اسکریپت سایت مپ داره که لینک ها رو بصورت زیر نشون میده لینگ: http://www.you.com/rss.xml
    من توی هر لینک که توش ثبت نشون میده میخوام عنوان و کیبورد و دیسکریپتون رو هم نشون بده آیا هر بار سایت مپ اجرا میشه برای هر لینک ثبت شده میشه با استفاده از curl عنوان و دیسکریپتون رو هم توی سایت مپ نشون داد؟ اگه میشه چه کدی باید به دیتابیس اضافه کنم؟
    آیا با curl همون دفعه اول که لینک ثبت میشه عنوان و کیورد و دیسکر یپتون رو بگیرم و توی دیتابیس ذخیره کنم و برای سایت مپ از دیتابیس فراخوانی کنم فشار کمتری به سرور وارد میشه؟
    آیا راه دیگه ای بجز curl برای ثبت اطلاعات لینک وجود نداره آخه توی اسکریپت Premium URL Shortener از curl استفاده شده اگه نشده چجوری پس ثبت میکنه؟ نمونه کد ثبت تگش اینه کد:
    // Set Meta data
    Main::set(“title”,$bundle->name.” “.e(“Bundle URLs”));
    Main::set(“description”,”{$bundle->name} is a bundle that includes a series of grouped URLs shared with everyone.”);
    // Pagination

    بابت سوالهای زیادم عذر میخوام ولی برای من مهمه خیلی مهمه ممنون میشم کمک کنید
    یسوال میشه در انتهای پروژه از سایت شما بعنوان منبع استفاده کنم؟
    ممنون میشم اگه کمکم کنید
    لطفا بهم یا ایمل یزنیذ یا همین جا جواب بدید من چک میکنم

    پاسخ
    1. حسن شفیعی ۱۹ شهریور ۱۳۹۸

      سلام. ممنون. خیلی گنگ پرسیدید
      الان دقیقا می خواید چه کاری انجام بدید ؟ مهم نیست اسکریپتتون چی کار میکنه فقط بفرمایید می خواید چه قابلیتی رو اضافه کنید ؟
      اگر هم بلدید اضافه کنید یا با این آموزش پیش رفتید به چه مشکل یا اروری برخوردید ؟
      تنها راه اینجا استفاده از curl است و مورد بهتری نیست

      پاسخ
      1. سارا شایسته ۲۰ شهریور ۱۳۹۸

        سلام وقت بخیر آقای مهندس شفیعی خوب هستید واقعا ممنون بخاطر جواب سریعتون و ممنون بخاطر کمک کردنتون من برنامه نویسی خیلی کم بلدم درحد همه دانشجوهای دیگه که میشناسم ولی چون پروژه رو باید بفهمم خودم جلوشون عملی بصورت مفهومی یچیزهای دیگه بخوان ازم میخواستم خودم جایگذاری کنم وگرنه اگه دست خودم بود اگه طراحی قبول میکردید بخودتون میگفتم چون نمونه کاراتون آموزاشتون همه نشون میدن کارتون عالیه واقعا اولین سایته که من در این سطح خوب ازش اموزش یاد میگیرم ولی بخاطر مشکلات شخصی من و مساله اینکه باید مفهومی یاد بگیرم الان ازتون خواهش میکنم لطفا هرچغدر تونستید کمک کنید ممنون میشم

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

        پاسخ
      2. سارا شایسته ۲۰ شهریور ۱۳۹۸

        کار اول من اینه که میخوام به این اسکریپت کوتاه کردن لینک چندتا چیز اضافه کنم اولیش اینه که توی سایت مپ کنار آدرس هر لینک عنوان اون لینک و تایتل و دیسکریپت و کیورد رو ثبت کنم آخه یکی از بحث های اصلیمون همینه که چجوری میشه اطلاعات یک لینک رو دراورد و توی یک فایل xml که توی این اسکریپت سایت مپش رو خواستن و نمیدونم سوال مفهمومیشون چیه ولی صددرصد یا جای دیسکریپت میگن ایکون یا کیورد یا تگ سایت مپ رو هم نشون بدید توی سایت مپ اسکریپت

        پاسخ
      3. سارا شایسته ۲۰ شهریور ۱۳۹۸

        اسکریپت یک سایت مپی میسازه این شکلی
        http://127.0.0.1/metro/rl4
        Hits: 2 | VIA: api-autolink
        http://127.0.0.1/metro/rl4
        http://127.0.0.1/metro/rl4

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

        پاسخ
      4. حسن شفیعی ۲۰ شهریور ۱۳۹۸

        سلام ممنون. خوشحالیم که مفید واقع شده.
        هنگام ثبت لینک میتونید مستقیما با این آموزش curl بزنید و اطلاعات متا مورد نیاز رو دریافت کنید و در این مرحله اگر میخواید می تونید مستقیما سایت مپ رو بسازید یا اگر هدفتون در پروژه اینه که در آینده بصورت دیگه ای ازش ستفاده بشه میتونید در دیتابیس ذخیره و بعد sitemap بسازید.
        هر دو مناسب و اصولی است و تفاوتی روی فشار روی سرور نداره و بستگی به توسعه پروژتون در آینده داره.
        آموزش ساخت سایت مپ با php و mysql

        پاسخ
      5. سارا شایسته ۲۰ شهریور ۱۳۹۸

        اگه از تایتل و دیسکریپشن و کیورد توی چندجا استفاده بشه مثلا توی قسمت اطلاعات آمار اسکریپت اونجا باز نشون بده اگه از دیتابیس بیاد بازم فرقی به فشار نداره؟ اگه فرق نداره اینجوری بهتر نیست بصورت سی یو آر ال گرفت چون اگه عنوان صفحه تغیر کنه وقتی دفعه بعد باز با سی یو آر ال گرفته میشه عنوان جدید ثبت میشه و اگر موتور جستوجو این لینک رو از طریق سایت کپ ایندکس کنه و بعدها عنوان صفحه لینک تغیرکنه و دفعه بعد موتور جستوجو این سایت مپ رو با عنوان جدید ثبت کنه کدومش برای سئو بهتره؟ کدوم فشار زیاد برای سرور داره؟ اصلا اسگریپت های رایگان که توی نت پخش میکنن مثلا من اینو پیرشفته کنم مردم استفاده میکنن ازش حدعقل حدر نشه وقتمون بعد از تموم شدن درس شایدم خودم کلا روش فکر دیگه ای بکنم شخصی کنمش ولی برای شخصی سازی هم فکرم روی این فشار سرور هست چون مردم اسکریپت رایگان دانلود کنن روی هاست رایگان نصب میکنن پس باید خیلی فشار کمی روی هاست بیاره تا مشکلی پیش نیاد البته فکر نکنم کسی از این نوع قدمی استفاده کنه بازم ممنونم بخاطر کمک هاتون بازم اسکریپت رو تغیر میدم بهتون خبر میدم ممنون واقعا
        راستی یه پیشنهاد یه قسمت ارتباط بصورت تیکت بذارید و مشکلات مردم رو تو تیکت بهشون بگید بعد از حل مشکل و کامل شدن کار همه تیکت رو مثل یک پست آموزشی قرار بدید اینجوری هم سوالهای جالبی پرسیده میشه که سوال خیلی ها هست هم میشه یه پروژه رو کامل از صفر تا صد شما بعنوان کمک راهنما در کنار پروژه بودید و باز با ثبت اسم سایتت توی پروژها بعنوان استادراهنما همه میتونن از آموزشهای واقعاااا خیلی بهتر از همه کلاسهایی موجود فعلی که من دیدم استفاده کنن بازم ممنون

        پاسخ
      6. حسن شفیعی ۲۰ شهریور ۱۳۹۸

        بله به هر حال همیشه curl فشار کمتری نسبت به دیتابیس روی سرور یا هاست میاره.
        چشم سعی میشه بخش بحث و گفتگو هم در سایت اضافه بشه که این چنین سوالات رو هم من یا دیگر دوستان خیلی بهتر بتونند راهنمایی و پاسخ بدن و بتونیم از تجربیات هم استفاده کنیم.

        پاسخ
      7. سارا شایسته ۲۴ شهریور ۱۳۹۸

        سلام وقت بخیر ببخشید این سوال رو اینجا میپرسم چون ادامه سوالهای قبل هست چون خودم از سوالهای نظرات آموزش های دیگتون استفاده زیادی کردم گفتم شاید کسی سوالهامونو ببینه و مشکلاتش رفع بشه من ساخت سایت مپتو رو (لینک آموزش https://netparadis.com/create-sitemap-xml-php )چندین بار از طریق چندین برنامه لوکال استفاده کردم ولی باز کار نکرد میشه به کد زیر یه نکاهی بندازید
        من میخوام اطلاعات تیبل urls رو بگیرم و بعد تبدیل کنم به یک سایت مپ البته با این کد پیش نمایش لینک هم میخوام اطلاعات لینک ها رو دربیارم و توی این سایت مپ نشون بدم ولی اصلا کد من کار نمیکنه میشه چک کنید
        وقتی کد رو میزنم این خطا رو میده خطارو درست میکنم
        Parse error: syntax error, unexpected ‘}’ in D:\0000000111\htdocs\cod\cod\fp.php on line 36
        بعد از حذف پرانتز از خط ۳۶
        خطا از بین میره و دیگه هیچ چیزی نشون نمیده
        ..
        لطفا اشکال کد رو بهم بگید
        و آیا این مدلی برای ساخت یک سایت مپ فشار زیادی روی هاست وارد میشه؟

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

        پاسخ
      8. حسن شفیعی ۲۶ شهریور ۱۳۹۸

        سلام ممنون.
        خطای شما سینتکسی هست و به راحتی می تونید پیدا کنید باید داخل یک کد ادیتور خوب مثل phpstorm اجرا کنید به راحتی خطا رو میشه حل کرد.
        شما اصلا بحث فشار رو بزارید کنار و مطمینا curl بهتر از دیتابیس هست و درگیری کمتری داره بقول شما اگر محتوای لینک در آینده تغییر کنه دیتابیس قدیمی میشه حتی اگر بخواید هر دفعه آپدیت کنید که خب باز این میشه دوباره کاری پس یدونه curl کافی هست.
        سعی کنید کار با github رو یاد بگیری و اونجا پروژه ها رو برای استفاده دیگران ارایه بدید.

        پاسخ
      9. سارا شایسته ۲۴ شهریور ۱۳۹۸

        ببخشید اسکریپت کوتاه کننده لینک مترو از طریق دوتا فایل که اسم یکی
        rss.class.php
        هست و محتویاتش


        من میخواستم توی این اسکریپت سایت مپش رو تغیر بدم چه ازطریق آموزش شما که کد رو فرستادم و منتظر جوابتونم چه از طریق خود این کد چه از طریق کدی که با آموزش شما ساختم

        من الان این کد رو تغیر دادم به انواع شکل مثلا سی یو آر ال رو مثل کد زیر نوشتم ولی باز مشکلم حل نشد میشه کمکم کنید
        مثل این کد:
        // curl cod shoro
        public function setChannelcurl( $var = null )
        {
        // baraye estefade az get?url=htt[://test.ir estefade kon

        باز مشکلم حل نمیشه

        پاسخ
      10. حسن شفیعی ۲۶ شهریور ۱۳۹۸

        کدها در کنار هم دیگه معنا داره الان این که فرستادید دیتابیس هم میخواد ویو هم میخواد احتمالا چیزای دیگه هم می خواد پس باید پروژه یکجا بررسی بشه.
        کدها رو هم داخل فایل باید قرار بدید و بعد zip و جایی مثل picofile آپلود و ارسال کنید تا خواناییش بهتر باشه.

        پاسخ
      11. سارا شایسته ۲۸ شهریور ۱۳۹۸

        سلام وقت بخیر
        من تونستم بعد از اینهمه مدت بعد از آموزش های شما یه کد بنویسم که تغریبا کاری که میخواستم بکنه ولی چون برای اسکریپتی میخوام که قراره روی هاست های اشتراکی کار کنه یا اینکه اسکریپت رایگان رو فکرنکنم روی سرور پرسرعت بذارن الان خودم وقتی روی لوکال تست میکنم بیشتر از ۵ تا لینک برای گرفتن اطلاعات از طریق
        curl
        توی فایل سایت مپ میذارم خطای تایم اوت میده بخاطر اون بنظرم بهتره کاری کنم که هنگام ثبت لینک از طریق دریافت اطلاعات از طریق
        curl
        اطلاعات رو توی دیتابیس ذخیره کنه تایتل و دیسکریپتیون و کیورد رو بعد هر وقت سایت مپ خواسته شد ساخته بشه اطلاعات از دیتابیس خونده بشه اینجوری سرعت بیشتری داره و یکاری کنم وقتی سایت مپ ساخته میشه یه فایل سایت مپ توی هاست ذخیره بشه بصورت xml که از طریق آموزش (https://netparadis.com/create-xml-using-php/) شما تغریبا یاد گرفتم اینکارو بکنم ولی اینکارو کردنی فقط یه لینک از سایت مپ رو میتونم بصورت xml ذخیره کنم بقیه اون ساخته نمیشه هرکدی هم نوشتم باز نشد
        اسکریپت هایی هم که من تغیر دادم رو از طریق ایملتون براتون ارسال میکنم لطفا چک کنید
        با تشکر

        پاسخ
  3. عرفان زیده سرایی ۴ تیر ۱۳۹۷

    متاسفانه سورس کار نمیکنه.

    پاسخ
    1. حسن شفیعی ۴ تیر ۱۳۹۷

      سلام . سورس مشکلی نداره .باید محتوای URL مورد نظر استانداردهایی مثل ست شدن متاتگ هارو داشته باشه تا نتیجه ای نمایان بشه.
      موفق باشید.

      پاسخ
دوره های آموزشی

دانلود رایگان کتاب آموزش PHP

صفر تا صد PHP و MySQL را یکجا یاد بگیرید
همین الان دانلود کن
نگران نباشید. ایمیل‌های مزاحم نمی‌فرستیم
close-link