Miscellaneous
|
|
|
|
<? // this file should be named libGoogle.php
// Jon Bardin jon_bardin@softhome.net
//define ('LYNX', 'which lynx'); || define ('LYNX', '/usr/bin/lynx'); || leave as NULL to use sockets - recomended
define('LYNX', NULL);
function parse_google ($query = NULL, $numrows = NULL, $start = NULL)
{
if (!strlen($query) || !$numrows) return;
$search = "/search?hl=en&q=".urlencode($query)."&num=".$numrows."&start=".$start;
$data = get_uri ('www.google.com', $search);
$data = str_replace ('<blockquote>', '', $data);
$data = str_replace ('</blockquote>', '', $data);
$data_array = explode ("<p>", $data);
ereg ("<font [^>]*>Results (.*) seconds.", $data_array[0], $tmp);
$return_data['num_of_results'] = 'Results '.$tmp[1].' seconds';
for ($i=1; $i<=$numrows; $i++) {
$stage = explode ("</div>", $data_array[$i]);
$result_data = explode ("<br>", $stage[0]);
foreach ($result_data as $row) {
$row = trim($row);
if (ereg("^<a href=", $row) || ereg("^<span class=w><font size=-2>", $row)) {
$return_data['url'][$i] = $row;
} elseif (ereg("^<font size=-1>", $row)) {
$return_data['blurb'][$i] = $row.'<br/>';
} elseif (ereg("^<span class=f><font size=-1>Description:</font></span>", $row)) {
$return_data['desc'][$i] = $row;
} elseif (ereg("^<span class=f>Category: </span>", $row)) {
$return_data['category'][$i] = $row;
} elseif (ereg("^<font color="#008000">", $row)) {
$row = str_replace ("/search?hl=en&num=10", LOCAL_PHOOGLE.$numrows, $row);
$return_data['detail'][$i] = $row;
} else {
$row = str_replace ("/search?hl=en", LOCAL_PHOOGLE.$numrows, $row);
$row = str_replace ("/search?num=".$numrows, LOCAL_PHOOGLE.$numrows, $row);
$return_data['blurb'][$i] .= $row.'<br/>';
}
}
}
$return_data['num_of_pages'] = 1 + substr_count ($data_array[$numrows], '/nav_page.gif');
$return_data['categories'] = @array_unique($return_data['category']);
return $return_data;
}
function get_category_sites ($path, $limit = 10)
{
if (!strlen($path) || !$limit) return NULL;
$data = get_uri ('directory.google.com', $path);
$array = explode ('<td>', $data);
for ($i = 1; $i <= $limit; $i++) {
$tmp = str_replace ("/img/", "http://directory.google.com/img/", $array[$i]);
$return[] = $tmp;
}
return $return;
}
function parse_groups ($query = NULL, $numrows = NULL, $start = NULL)
{
if (!strlen($query) || !$numrows) return NULL;
$search = '/groups?q='.urlencode($query).'&num='.$numrows.'&start='.$start;
$data = get_uri ('groups.google.com', $search);
$data = str_replace ('<blockquote>', '', $data);
$data = str_replace ('</blockquote>', '', $data);
$data_array = explode ("<p>", $data);
ereg ("<font size=-1 color=#000000>Results (.*) seconds.</font>", $data_array[0], $tmp);
$return_data['num_of_results'] = 'Results '.$tmp[1].' seconds';
for ($i=1; $i<=$numrows; $i++) {
$stage = explode ("</div>", $data_array[$i]);
$result_data = explode ("<br>", $stage[0]);
foreach ($result_data as $row) {
$row = trim($row);
if (ereg("^<a href=", $row) || ereg("^<span class=w><font size=-2>", $row)) {
$return_data['url'][$i] = $row;
} elseif (ereg("^<font color=green>", $row)) {
$row = str_replace ("/groups?", "http://groups.google.com/groups?", $row);
$return_data['detail'][$i] = $row;
} else {
$row = str_replace ("/search?num=".$numrows, LOCAL_PHOOGLE.$numrows, $row);
$return_data['blurb'][$i] .= $row.'<br/>';
}
}
}
$return_data['num_of_pages'] = 1 + substr_count ($data_array[$numrows], '/nav_page.gif');
return $return_data;
}
function get_uri ($host = NULL, $uri = NULL)
{
if (!strlen($uri) || !strlen($host)) return NULL;
if (LYNX) {
(string) $cmd = trim(LYNX).' -useragent="Mozilla/5.0/Lynx (X11; U; Linux i686; en-US; rv)" -source "http://'.$host.$uri.'"';
(string) $data = shell_exec ($cmd);
} else {
(int) $service_port = getservbyname ('www', 'tcp');
/* Get the IP address for the target host. */
(string) $address = gethostbyname ($host);
/* Create a TCP/IP socket. */
$socket = socket_create (AF_INET, SOCK_STREAM, 0);
if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror ($socket) . "n";
}
$result = socket_connect ($socket, $address, $service_port);
if ($result < 0) {
echo "socket_connect() failed.nReason: ($result) " . socket_strerror($result) . "n";
}
$in = "GET $uri HTTP/1.1rn"
. "Connection: Closern"
. "Host: $hostrn"
//. "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv)rn"
//. "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1rn"
//. "Accept-Lanquage: en-us, en;q=0.50rn"
//. "Accept-encoding: gzip, deflate, compress;q=0.9rn"
//. "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66rn"
//. "Cookie: REF=ID=37b9dad9235ea29b:TM=1017817750:LM=1017817750:S=tFoVzZx1DEw; domain=.google.com; path=/;rn"
. "rn";
(string) $out = NULL;
(string) $data = NULL;
socket_write ($socket, $in, strlen($in));
while ($out = socket_read ($socket, 2048)) {
$data .= $out;
}
socket_close ($socket);
}
return $data;
}
function display_results ($q, $n, $s)
{
(string) $url_template = '<a href="/phoogle/?=&q=%s&n=%d&s=%d">%s</a>';
(array) $g_data = array();
$g_data = parse_google ($q, intval($n), intval($s));
$group_data = parse_groups ($q, intval($n), intval($s));
(string) $page_nav = NULL;
(string) $r_data = NULL;
if (!$n) {
$n = 15;
}
$q_form .= '<tr><td colspan=2><form action="/phoogle/" method=get name=f>'
. '<input type=hidden name=phoogle>'
. '<input type=text name=q size=40 value="'.stripslashes(htmlspecialchars($q)).'"> '
. '<input type=text name=n size=3 value="'.intval($n).'"> '
. '<input type=submit name=a value=Go>'
. '</form></td></tr>';
if (count($g_data)) {
for ($i=1; $i<=count($g_data['url']); $i++) {
$s_data .= '<p>'.$g_data['url'][$i].'<br />';
if (strlen($g_data['blurb'][$i]))
$s_data .= $g_data['blurb'][$i];
if (strlen($g_data['desc'][$i]))
$s_data .= $g_data['desc'][$i].'<br />';
if (strlen($g_data['category'][$i]))
$s_data .= $g_data['category'][$i].'<br />';
if (strlen($g_data['detail'][$i]))
$s_data .= $g_data['detail'][$i];
$s_data .= '</font></span></p>';
}
for ($i=1; $i<count($group_data['url']); $i++) {
$group_data_html .= '<p>'.$group_data['url'][$i].'<br />';
if (strlen($group_data['blurb'][$i]))
$group_data_html .= $group_data['blurb'][$i];
if (strlen($group_data['detail'][$i]))
$group_data_html .= $group_data['detail'][$i];
$group_data_html .= '</font></span></p>';
}
$r_data .= '<tr><td>Web '.$g_data['num_of_results'].'</td><td>Groups '.$group_data['num_of_results'].'</td></tr>';
$r_data .= '<tr><td valign=top align=left nowrap=true>'.$s_data.'</td><td valign=top align=left nowrap=true>'.$group_data_html.'</td></tr>';
if (intval($s - $n) < 0)
$prev = 0;
$page_nav = sprintf ($url_template,
urlencode($q),
$n,
$prev,
'<').' ';
for ($i=0; $i<$g_data['num_of_pages']; $i++) {
$cur = $i * $n;
if ($cur == intval($s)) {
$page_nav .= ($i + 1).' ';
} else {
$page_nav .= sprintf ($url_template,
urlencode($q),
$n,
$cur,
($i+1)).' ';
}
}
$page_nav .= sprintf ($url_template,
urlencode($q),
$n,
$s + $n,
'>').' ';
$page_nav = '<tr><td colspan=2 align=center>'.$page_nav.'</td></tr>';
if (count($g_data['category'])) {
@sort ($g_data['category']);
ereg ("href=http://directory.google.com([^>]*)([^<]*)", $g_data['category'][0], $temp);
$path = $temp[1];
$cat_array = get_category_sites ($path);
$cat_html = '<tr><td colspan=2><b>'.$path.'</b></td></tr>';
foreach ($cat_array as $entry) {
$cat_html .= "n".'<tr><td colspan=2>'.$entry.'</td></tr>';
}
}
$r_data = $q_form.$page_nav.$r_data.$page_nav.$cat_html.$q_form;
} else {
$r_data = $q_form;
}
return $r_data.'</table>';
}
?>
// The following should be placed in index.php
<?
require_once ("libGoogle.php");
define ('LOCAL_PHOOGLE', "/phoogle/?&n=");
?> <html>
<head>
<title>Phoogle</title>
<style><!--
body,td,div, .p, a, font {
font-size: x-small;
font-family: arial, helvetica;
}
div, td {
color:#000000;
}
.f, .fl:link {
color:#6f6f6f
}
a:link, .w, a.w:link, .w a:link {
color:#00c
}
a:visited, .fl:visited {
color:#551a8b
}
a:active, .fl:active {
color:#f00
}
.t a:link, .t a:active, .t a:visited, .t {
color:#000000;
}
.t {
background-color:#ffcc33
}
.h {
color:#ddaa11
}
.i, .i:link {
color:#a90a08
}
.a, .a:link {
color:#008000
}
.z {
display:none;
}
div.n {
margin-top: 1ex
}
.n a {
font-size: x-small;
color:#000;
}
.n .i {
font-size: x-small;
font-weight:bold
}
.q a:visited,.q a:link,.q a:active,.q {
text-decoration: none;
color: #00c;
}
.b {
font-size: x-small;
color:#00c;
font-weight:bold
}
//-->
</style>
</head>
<body onLoad="document.forms[0].q.focus()"><table>
<?=display_results ($q, $n, $s);?> <p>
<a href=index.phps>Show index.php source</a> || <a href=libGoogle.phps>Show libGoogle.php source</a>
</body>
</html>
|
|
|
Usage Example
|
|
|
Rate This Script
|
|
|
|