It uses curl_multi_exec to scrape live, ask, yahoo and google for suggested keywords based on a keyword you provide.
At the moment it just outputs the keywords as hyperlinks to fetch longer tails keywords based on the actual suggestion. But, with just a minor tweak it can output as plain text and with a couple of lines of extra code could even save em to a file/db/milky way.
Its really simple stuff, but pretty slick thanks to curl_multi_exec.
<?php
// Form to fetch keywords
echo'<form method="get" action="">';
echo'<input type="text" name="keyword" />';
echo'<input type="submit" value="Query!" />';
echo'</form>';
// Prepare our keyword
$keyword = trim(str_replace(array('_','+'),' ',strip_tags($_GET['keyword'])));
// Build http header
$header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: ";
// User agent
$ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.29 Safari/525.19';
if ($keyword):
// A keyword has been submitted
// Our search urls
$nodes[] = 'http://search.yahoo.com/search?ei=UTF-8&fr=yfp-t-802&rs=more&rs=all&p='.urlencode($keyword);
$nodes[] = 'http://www.google.com/search?hl=en&btnG=Google+Search&q='.urlencode($keyword);
$nodes[] = 'http://uk.ask.com/web?search=search&dm=all&qsrc=0&o=312&l=dir&siteid=&q='.urlencode($keyword);
$nodes[] = 'http://search.live.com/results.aspx?form=QBRE&q='.urlencode($keyword);
$node_count = count($nodes);
$curl_arr = array();
$master = curl_multi_init();
// Loop through urls
for($i = 0; $i < $node_count; $i++):
$url = $nodes[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_URL, $url);
curl_setopt($curl_arr[$i], CURLOPT_USERAGENT, $ua);
curl_setopt($curl_arr[$i], CURLOPT_HTTPHEADER, $header);
curl_setopt($curl_arr[$i], CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($curl_arr[$i], CURLOPT_TIMEOUT, 10);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_arr[$i], CURLOPT_FOLLOWLOCATION, true);
curl_multi_add_handle($master, $curl_arr[$i]);
endfor;
do{curl_multi_exec($master, $running);}
while($running > 0);
// Get our keywords
for($i = 0; $i < $node_count; $i++):
$results = curl_multi_getcontent($curl_arr[$i]);
switch($i):
case 0: // yahoo.com
preg_match_all("//=rs-top\">(.+?)<\/a>,<\/li>//", $results, $yah_keywords);
break;
case 1: // google.com
preg_match_all("//<td style=\"padding:0 0 7px;padding-right:34px;vertical-align:top\"><a (.+?)&(.+?)\">(.+?)<\/a>//", $results, $goo_keywords);
break;
case 2: // ask.com
preg_match_all("//<div class=\"zm\" ><a href=(.+?)ec:\'19\'\}\)\" >(.+?)<\/a><\/div>//", $results, $ask_keywords);
break;
case 3: // live.com
preg_match_all("//<li><a href=(.+?);FORM=QSRE(.+?),this\)\">(.+?)<\/a> <\/li>//", $results, $msn_keywords);
break;
endswitch;
endfor;
// Join keywords and make sure the list is unique
$wordz = array_unique(array_merge($yah_keywords[1], $goo_keywords[3], $ask_keywords[2], $msn_keywords[3]));
$words = genKeywords($wordz); // HTML
//$words = genKeywords($wordz,1); // TEXT
// Good Place To Maybe Save Em?!
// Make a folder in the same folder as this script, name it keywords, then uncomment below the save the keyword lists
// $file = str_replace(" ", "_", $keyword);
// if ($fp = fopen('./keywords/'.$keyword.'.txt', "w+")):
// fwrite($fp, genKeywords($wordz,1));
// fclose($fp);
// echo'<h3>Saved!</h3>';
// endif;
// output!
echo $words;
endif;
function genKeywords($kw, $linked=0)
{
// Helper function for outputting the data
// The second parameter if set to 1 will out the data as plain text
$res = '';
$rem = array(' ','+','-',);
foreach ($kw as $keyword):
$keyword = str_replace($rem, ' ', strip_tags($keyword));
if (0 == $linked):
$res.= '<a href="?keyword='.str_replace($rem, '_', $keyword).'">'.$keyword."</a><br />\n";
else: $res.= trim(str_replace('_', ' ', $keyword))."\r\n";
endif;
endforeach;
return $res;
}
?>
Keyword List Building Made Easy!