get meta description , title and image from url like facebook link sharing

12,696

Solution 1

Why are you using regular expression for parsing the <meta> tags ?

PHP has an in-built function for parsing the meta information , it is called the get_meta_tags()

Illustration :

<?php
$tags = get_meta_tags('http://www.stackoverflow.com/');
echo "<pre>";
print_r($tags);

OUTPUT:

Array
(
    [twitter:card] => summary
    [twitter:domain] => stackoverflow.com
    [og:type] => website
    [og:image] => http://cdn.sstatic.net/stackoverflow/img/[email protected]?v=fde65a5a78c6
    [og:title] => Stack Overflow
    [og:description] => Q&A for professional and enthusiast programmers
    [og:url] => http://stackoverflow.com/
)

As you can see the title , image and description are being parsed which you really want.

Solution 2

I know the question is 1.5 years old. But if you are still looking for it, you can use https://urlmeta.org. Its a free API to extract URL meta.

Solution 3

You can check a URL for http or https by

$url='stackoverflow.com';
$http_check='http://';
$https_check='https://';
if(substr($url,0,7)!=$http_check){
   $url=$http_check.$url;
}else if(substr($url,0,8)!=$https_check){
   $url=$https_check.$url;
}else{
    $url=$url
}

then you can use the above answer

<?php
$tags = get_meta_tags($url);
echo "<pre>";
print_r($tags);
Share:
12,696
Steve Bals
Author by

Steve Bals

Updated on July 28, 2022

Comments

  • Steve Bals
    Steve Bals almost 2 years
    my code is
    
           function getTitle($Url){
                $str = file_get_contents($Url);
                if(strlen($str)>0){
                    preg_match("/\<title\>(.*)\<\/title\>/",$str,$title);
                    return $title[1];
                }
                else
                {
                    return false;
                }
            }
            function getMetas($Url){
                $str = file_get_contents($Url);
                if(strlen($str)>0){
                 //   preg_match("/\<title\>(.*)\<\/title\>/",$str,$title);
                   preg_match("/<meta name=\"description\" content=\"(.*?)\"/",$str,$title);
                  //  preg_match( '<meta name="description".*content="([^"]+)">siU', $str, $title);
                    return $title[1];
                }
                 else
                {
                    return false;
                }
            }
    
            //Example:
            $url=$_POST['url'];
            echo getTitle($url);
            echo "<br><br>";
            echo getMetas($url);
    

    this does not shows result for all the url's , example http://google.com

  • Shankar Narayana Damodaran
    Shankar Narayana Damodaran about 10 years
    @SteveBals, I will try to find a way for this.. Meantime You can also check this answer