Skip to content

September 26, 2011

[PHP] Mencomot title, keyword dan meta description dari sebuah halaman web

Kebetulan ada yang nanya-nanya seputar kasus grabbing title, keyword sama meta description dari sebuah halaman web. Maka sayapun akan mencoba sharing disini siapa tahu ada yang memerlukanya sehingga bisa bermanfaat bagi orang banyak.

Pertama-tama yang harus kita lakukan adalah mengambil konten web tersebut, di proses ini anda bisa menggunakan metoda curl ato yang lainya, saya akan memberikan contoh menggunakan fungsi curl.

<?php
/*
Created by. Ratna Dewi
http://www.agcextreem.com
*/
function fetch($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; es-ES; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3");
    $result = curl_exec($ch);
    curl_close($ch);
 
    return $result;
}
?>

Selanjutnya kita akan menggunakan fungsi di atas untuk mendapatkan konten dari salah satu website

$url = 'http://www.agcextreem.com'; //ini adalah contoh target website yang akan kita ambil isinya.
$content = fetch($url);

Hal yang harus di perhatikan sebelum melangkah ke proses berikutnya. Karena kita akan fokus ke 3 hal, title, meta keyword, dan meta description maka kita harus mempersiapkan antisipasi untuk menghindari kesalahan. Tiap-tiap website kenyataanya memiliki format yang berbeda dalam penulisan ketiga hal tersebut contoh kemungkinan penulisan format

<!-- variant 1 -->
<meta content='Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail' name='description'/>

<!-- variant 2 -->
<META CONTENT='Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail' NAME='description'/>

<!-- variant 3 -->
<meta content="Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail" name="description"/>

<!-- variant 4 -->
<META CONTENT="Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail" NAME="description"/>

<!-- variant 5 -->
<meta name='description' content='Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail'/>

<!-- variant 6 -->
<META NAME='description' CONTENT='Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail'/>

<!-- variant 7 -->
<meta name="description" content="Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail"/>

<!-- variant 8 -->
<META NAME="description" CONTENT="Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail"/>

<!-- variant 9 -->
<meta content='Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail' name='description'>

<!-- variant 10 -->
<META CONTENT='Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail' NAME='description'>

<!-- variant 11 -->
<meta content="Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail" name="description">

<!-- variant 12 -->
<META CONTENT="Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail" NAME="description">

<!-- variant 13 -->
<meta name='description' content='Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail'>

<!-- variant 14 -->
<META NAME='description' CONTENT='Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail'>

<!-- variant 15 -->
<meta name="description" content="Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail">

<!-- variant 16 -->
<META NAME="description" CONTENT="Baca, Komik, Manga, Naruto, One, Piece, Bleach, fairy tail">

Maka yang harus kita lakukan untuk mengantisipasi kemungkinan tersebut adalah harus membuang perbedaanya, dengan membuat sebuah fungsi sederhana

function remAtribute($html)
{
	$remove = array("\"","'","/"); 
    return strtolower(str_replace($remove,"",$html));
}

Nah maka kita akan melangkah pada salah satu fungsi untuk melakukan grabbing title, dimana title terletak di antara tag title, kurang lebih penulisanya seperti ini

<title>Title Halaman Web</title>

Fungsi untuk mengambil title

function getTitle($html)
{
	$html = remAtribute($html); //membuang kemungkinan perbedaan dari tiap-tiap website karena bisa saja penulisan tag title dibuat dalam huruf kapital semua
	preg_match('#\<title>(.*)<title>#smiU', $html , $title); //untuk penjelasan secara detail syntax ini silakan googling
	return ucwords($title[1]);
}

Fungsi untuk mengambil keyword

function getKeywords($html)
{
	$html = remAtribute($html);
	preg_match('#\<meta name=keywords content=(.*)>#smiU', $html , $key);
	if(count($key) == 0)
    {
	    preg_match('#\<meta content=(.*) name=keywords\>#U', $html , $key);
	    return ucwords($key[1]);
    }
    else
    {
	    return ucwords($key[1]);
    }
}

Fungsi untuk mengambil deskripsi

function getDescription($html)
{
	$html = remAtribute($html);
	preg_match('#\<meta name=description content=(.*)>#smiU', $html , $des);
	if(count($des) == 0)
    {
	    preg_match('#\<meta content=(.*) name=description\>#U', $html , $des);
	    return ucwords($des[1]);
    }
    else
    {
	    return ucwords($des[1]);
    }
}

Contoh penerapan keseluruhan kode

<?php
/*
Writen By. Ratna Dewi
http://www.agcextreem.com
Apabila anda menggunakan kode ini, Dimohon untuk tidak menghilangkan kredit saya, terima kasih
*/
$content= fetch("http://www.agcextreem.com");
$title = getTitle($content);
$description = getDescription($content);
$keywords = getKeywords($content);


echo "Title: ".$title."<br />";
echo "Description: ".$description."<br />";
echo "Keywords: ".$keywords."<br />";

function fetch($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; es-ES; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3");
    $result = curl_exec($ch);
    curl_close($ch);
 
    return $result;
}

function remAtribute($html)
{
	$remove = array("\"","'","/"); 
    return strtolower(str_replace($remove,"",$html));
}

function getTitle($html)
{
	$html = remAtribute($html);
	preg_match('#\<title>(.*)<title>#smiU', $html , $title);
	return ucwords($title[1]);
}

function getKeywords($html)
{
	$html = remAtribute($html);
	preg_match('#\<meta name=keywords content=(.*)>#smiU', $html , $key);
	if(count($key) == 0)
    {
	    preg_match('#\<meta content=(.*) name=keywords\>#U', $html , $key);
	    return ucwords($key[1]);
    }
    else
    {
	    return ucwords($key[1]);
    }
}

function getDescription($html)
{
	$html = remAtribute($html);
	preg_match('#\<meta name=description content=(.*)>#smiU', $html , $des);
	if(count($des) == 0)
    {
	    preg_match('#\<meta content=(.*) name=description\>#U', $html , $des);
	    return ucwords($des[1]);
    }
    else
    {
	    return ucwords($des[1]);
    }
}
?>

Btw, thanks to mas candratop3 karena beliaulah yang memulai nanya-nanya seputar permasalahan tersebut, sehingga mendorong saya untuk menuliskanya di blog saya.

Read more from Tutorial

Share your thoughts, post a comment.

(required)
(required)

Note: HTML is allowed. Your email address will never be published.

Subscribe to comments

Are you Spammer?WordPress CAPTCHA