#!/usr/bin/php
\n"; else $NL="\n";
if ($show_html) $HR="
\n"; else $HR="---------------------------------------------------------------------------------------------------\n";
if ($show_html) $B=""; else $B="!";
if ($show_html) $B_=""; else $B_="!";
/*
* Start of main()
*/
if ($show_html)
{
echo "";
}
$keywords=explode(",",$test_keywords);
if (!count($keywords)) die ("Error: no keywords defined.$NL");
if (!rmkdir($working_dir)) die("Failed to create/open $working_dir$NL");
$country_data=get_google_cc($test_country,$test_language);
if (!$country_data) die("Invalid country/language code specified.$NL");
$ready=get_license();
if (!$ready) die("The specified seo-proxies.com license ($uid) is not active. $NL");
if ($LICENSE['protocol'] != "http") die("The seo-proxies.com proxy protocol of license $uid is not set to HTTP, please change the protocol to HTTP. $NL");
echo "$NL$B Google rank checker for $test_website_url initated $B_ $NL$NL";
/*
* This loop iterates through all keyword combinations
*/
$ch=NULL;
$rotate_ip=0; // variable that triggers an IP rotation (normally only during keyword changes)
$max_errors_total=3; // abort script if there are 3 keywords that can not be scraped (something is going wrong and needs to be checked)
$rank_data=array();
$siterank_data=array();
foreach($keywords as $keyword)
{
$rank=0;
$max_errors_page=5; // abort script if there are 5 errors in a row, that should not happen
if ($test_max_pages <= 0) break;
$search_string=urlencode($keyword);
$rotate_ip=1; // IP rotation for each new keyword
/*
* This loop iterates through all result pages for the given keyword
*/
for ($page=0;$page<$test_max_pages;$page++)
{
$serp_data=load_cache($search_string,$page,$country_data,$force_cache); // load results from local cache if available for today
$maxpages=0;
if (!$serp_data)
{
$ip_ready=check_ip_usage(); // test if ip has not been used within the critical time
while (!$ip_ready || $rotate_ip)
{
$ok=rotate_proxy(); // start/rotate to the IP that has not been started for the longest time, also tests if proxy connection is working
if ($ok != 1)
die ("Fatal error: proxy rotation failed:$NL $ok$NL");
$ip_ready=check_ip_usage(); // test if ip has not been used within the critical time
if (!$ip_ready) die("ERROR: No fresh IPs left, try again later. $NL");
else
{
$rotate_ip=0; // ip rotated
break; // continue
}
}
delay_time(); // stop scraping based on the license size to spread scrapes best possible and avoid detection
global $scrape_result; // contains metainformation from the scrape_serp_google() function
$raw_data=scrape_serp_google($search_string,$page,$country_data); // scrape html from search engine
if ($scrape_result != "SCRAPE_SUCCESS")
{
if ($max_errors_page--)
{
echo "There was an error scraping (Code: $scrape_result), trying again .. $NL";
$page--;
continue;
} else
{
$page--;
if ($max_errors_total--)
{
echo "Too many errors scraping keyword $search_string (at page $page). Skipping remaining pages of keyword $search_string .. $NL";
break;
} else
{
die ("ERROR: Max keyword errors reached, something is going wrong. $NL");
}
break;
}
}
mark_ip_usage(); // store IP usage, this is very important to avoid detection and gray/blacklistings
global $process_result; // contains metainformation from the process_raw() function
$serp_data=process_raw_v2($raw_data,$page); // process the html and put results into $serp_data
if (($process_result == "PROCESS_SUCCESS_MORE") || ($process_result == "PROCESS_SUCCESS_LAST"))
{
$result_count=count($serp_data);
$serp_data['page']=$page;
if ($process_result != "PROCESS_SUCCESS_LAST")
$serp_data['lastpage']=1;
else
$serp_data['lastpage']=0;
$serp_data['keyword']=$keyword;
$serp_data['cc']=$country_data['cc'];
$serp_data['lc']=$country_data['lc'];
$serp_data['result_count']=$result_count;
store_cache($serp_data,$search_string,$page,$country_data); // store results into local cache
}
if ($process_result != "PROCESS_SUCCESS_MORE")
break; // last page
if (!$load_all_ranks)
{
for ($n=0;$n < $result_count;$n++)
if (strstr($results[$n]['url'],$test_website_url))
{
verbose("Located $test_website_url within search results.$NL");
break;
}
}
} // scrape clause
$result_count=$serp_data['result_count'];
for ($ref=0;$ref<$result_count;$ref++)
{
$rank++;
$rank_data[$keyword][$rank]['title']=$serp_data[$ref]['title'];
$rank_data[$keyword][$rank]['url']=$serp_data[$ref]['url'];
$rank_data[$keyword][$rank]['host']=$serp_data[$ref]['host'];
//$rank_data[$keyword][$rank]['desc']=$serp_data['desc'']; // not really required
if (strstr($rank_data[$keyword][$rank]['url'],$test_website_url))
{
$info=array();
$info['rank']=$rank;
$info['url']=$rank_data[$keyword][$rank]['url'];
$siterank_data[$keyword][]=$info;
}
}
} // page loop
} // keyword loop
if ($show_all_ranks)
{
foreach ($rank_data as $keyword => $ranks)
{
echo "$NL$NL$B"."Ranking information for keyword \"$keyword\" $B_$NL";
echo "$B"."Rank - Website - Title$B_$NL";
$pos=0;
foreach ($ranks as $rank)
{
$pos++;
if (strstr($rank['url'],$test_website_url))
echo "$B$pos - $rank[url] - $rank[title] $B_$NL";
else
echo "$pos - $rank[url] - $rank[title] $NL";
}
}
}
foreach ($keywords as $keyword)
{
if (!isset($siterank_data[$keyword])) echo "$NL$B"."The specified site was not found in the search results for keyword \"$keyword\". $B_$NL";
else
{
$siteranks=$siterank_data[$keyword];
echo "$NL$NL$B"."Ranking information for keyword \"$keyword\" and website \"$test_website_url\" [$test_country / $test_language] $B_$NL";
foreach ($siteranks as $siterank)
echo "Rank $siterank[rank] for URL $siterank[url]$NL";
}
}
//var_dump($siterank_data);
if ($show_html)
{
echo "";
}
?>