I am trying to get some data from the Google Webmaster Tool (GWT) . I searched for some docs and API tools, but they only return some data from GWT.
My needs:
It is required to receive data from GWT,
(1). TOP_PAGES
(2). TOP_QUERIES
(3). CRAWL_ERRORS
(4). CONTENT_ERRORS
(5). CONTENT_KEYWORDS
(6). INTERNAL_LINKS
(7). EXTERNAL_LINKS
(eight). SOCIAL_ACTIVITY
Having received this data, I need to generate an Excel file for each of them.
Achieved:
I have some data from the above and generated in an Excel file. As
(1). TOP_PAGES
(2). TOP_QUERIES
(3). INTERNAL_LINKS
(4). EXTERNAL_LINKS
(5). CONTENT_KEYWORDS
Failed:
However, I do not get the main parts / data, for example,
(1). CRAWL_ERRORS
(2). CONTENT_ERRORS
(3). SOCIAL_ACTIVITY
Sample code for reference:
I used two files in PHP for this GWT API,
File # 1: (gwdata.php)
<?php class GWTdata { const HOST = "https://www.google.com"; const SERVICEURI = "/webmasters/tools/"; public $_language, $_tables, $_daterange, $_downloaded, $_skipped; private $_auth, $_logged_in; public function __construct() { $this->_auth = false; $this->_logged_in = false; $this->_language = "en"; $this->_daterange = array("",""); $this->_tables = array("TOP_PAGES", "TOP_QUERIES", "CRAWL_ERRORS", "CONTENT_ERRORS", "CONTENT_KEYWORDS", "INTERNAL_LINKS", "EXTERNAL_LINKS", "SOCIAL_ACTIVITY" ); $this->_errTablesSort = array(0 => "http", 1 => "not-found", 2 => "restricted-by-robotsTxt", 3 => "unreachable", 4 => "timeout", 5 => "not-followed", "kAppErrorSoft-404s" => "soft404", "sitemap" => "in-sitemaps" ); $this->_errTablesType = array(0 => "web-crawl-errors", 1 => "mobile-wml-xhtml-errors", 2 => "mobile-chtml-errors", 3 => "mobile-operator-errors", 4 => "news-crawl-errors" ); $this->_downloaded = array(); $this->_skipped = array(); } public function SetLanguage($str) { $this->_language = $str; } public function SetTables($arr) { if(is_array($arr) && !empty($arr) && sizeof($arr) <= 2) { $valid = array("TOP_PAGES","TOP_QUERIES","CRAWL_ERRORS","CONTENT_ERRORS", "CONTENT_KEYWORDS","INTERNAL_LINKS","EXTERNAL_LINKS","SOCIAL_ACTIVITY"); $this->_tables = array(); for($i=0; $i < sizeof($arr); $i++) { if(in_array($arr[$i], $valid)) { array_push($this->_tables, $arr[$i]); } else { throw new Exception("Invalid argument given."); } } } else { throw new Exception("Invalid argument given."); } } public function SetDaterange($arr) { if(is_array($arr) && !empty($arr) && sizeof($arr) == 2) { if(self::IsISO8601($arr[0]) === true && self::IsISO8601($arr[1]) === true) { $this->_daterange = array(str_replace("-", "", $arr[0]), str_replace("-", "", $arr[1])); return true; } else { throw new Exception("Invalid argument given."); } } else { throw new Exception("Invalid argument given."); } } public function GetDownloadedFiles() { return $this->_downloaded; } public function GetSkippedFiles() { return $this->_skipped; } private function IsLoggedIn() { return $this->_logged_in; } public function LogIn($email, $pwd) { $url = self::HOST . "/accounts/ClientLogin"; $postRequest = array( 'accountType' => 'HOSTED_OR_GOOGLE', 'Email' => $email, 'Passwd' => $pwd, 'service' => "sitemaps", 'source' => "Google-WMTdownloadscript-0.1-php" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postRequest); $output = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); if($info['http_code'] == 200) { preg_match('/Auth=(.*)/', $output, $match); if(isset($match[1])) { $this->_auth = $match[1]; $this->_logged_in = true; return true; } else { return false; } } else { return false; } } public function GetData($url) { if(self::IsLoggedIn() === true) { $url = self::HOST . $url; $head = array("Authorization: GoogleLogin auth=".$this->_auth, "GData-Version: 2"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_ENCODING, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $head); $result = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); return ($info['http_code']!=200) ? false : $result; } else { return false; } } public function GetSites() { if(self::IsLoggedIn() === true) { $feed = self::GetData(self::SERVICEURI."feeds/sites/"); if($feed !== false) { $sites = array(); $doc = new DOMDocument(); $doc->loadXML($feed); foreach ($doc->getElementsByTagName('entry') as $node) { array_push($sites, $node->getElementsByTagName('title')->item(0)->nodeValue); } return $sites; } else { return false; } } else { return false; } } public function GetDownloadUrls($url) { if(self::IsLoggedIn() === true) { $_url = sprintf(self::SERVICEURI."downloads-list?hl=%s&siteUrl=%s", $this->_language, urlencode($url)); $downloadList = self::GetData($_url); return json_decode($downloadList, true); } else { return false; } } public function DownloadCSV($site, $savepath=".") { if(self::IsLoggedIn() === true) { $downloadUrls = self::GetDownloadUrls($site); $filename = parse_url($site, PHP_URL_HOST) ."-". date("Ymd-His"); $tables = $this->_tables; foreach($tables as $table) { if($table=="CRAWL_ERRORS") { self::DownloadCSV_CrawlErrors($site, $savepath); } elseif($table=="CONTENT_ERRORS") { self::DownloadCSV_XTRA($site, $savepath, "html-suggestions", "\)", "CONTENT_ERRORS", "content-problems-dl"); } elseif($table=="CONTENT_KEYWORDS") { self::DownloadCSV_XTRA($site, $savepath, "keywords", "\)", "CONTENT_KEYWORDS", "content-words-dl"); } elseif($table=="INTERNAL_LINKS") { self::DownloadCSV_XTRA($site, $savepath, "internal-links", "\)", "INTERNAL_LINKS", "internal-links-dl"); } elseif($table=="EXTERNAL_LINKS") { self::DownloadCSV_XTRA($site, $savepath, "external-links-domain", "\)", "EXTERNAL_LINKS", "external-links-domain-dl"); } elseif($table=="SOCIAL_ACTIVITY") { self::DownloadCSV_XTRA($site, $savepath, "social-activity", "x26", "SOCIAL_ACTIVITY", "social-activity-dl"); } else { $finalName = "$savepath/$table-$filename.csv"; $finalUrl = $downloadUrls[$table] ."&prop=ALL&db=%s&de=%s&more=true"; $finalUrl = sprintf($finalUrl, $this->_daterange[0], $this->_daterange[1]); self::SaveData($finalUrl,$finalName); } } } else { return false; } } public function DownloadCSV_XTRA($site, $savepath=".", $tokenUri, $tokenDelimiter, $filenamePrefix, $dlUri) { if(self::IsLoggedIn() === true) { $uri = self::SERVICEURI . $tokenUri . "?hl=%s&siteUrl=%s"; $_uri = sprintf($uri, $this->_language, $site); $token = self::GetToken($_uri, $tokenDelimiter); $filename = parse_url($site, PHP_URL_HOST) ."-". date("Ymd-His"); $finalName = "$savepath/$filenamePrefix-$filename.csv"; $url = self::SERVICEURI . $dlUri . "?hl=%s&siteUrl=%s&security_token=%s&prop=ALL&db=%s&de=%s&more=true"; $_url = sprintf($url, $this->_language, $site, $token, $this->_daterange[0], $this->_daterange[1]); self::SaveData($_url,$finalName); } else { return false; } } public function DownloadCSV_CrawlErrors($site, $savepath=".", $separated=false) { if(self::IsLoggedIn() === true) { $type_param = "we"; $filename = parse_url($site, PHP_URL_HOST) ."-". date("Ymd-His"); if($separated) { foreach($this->_errTablesSort as $sortid => $sortname) { foreach($this->_errTablesType as $typeid => $typename) { if($typeid == 1) { $type_param = "mx"; } else if($typeid == 2) { $type_param = "mc"; } else { $type_param = "we"; } $uri = self::SERVICEURI."crawl-errors?hl=en&siteUrl=$site&tid=$type_param"; $token = self::GetToken($uri,"x26"); $finalName = "$savepath/CRAWL_ERRORS-$typename-$sortname-$filename.csv"; $url = self::SERVICEURI."crawl-errors-dl?hl=%s&siteUrl=%s&security_token=%s&type=%s&sort=%s"; $_url = sprintf($url, $this->_language, $site, $token, $typeid, $sortid); self::SaveData($_url,$finalName); } } } else { $uri = self::SERVICEURI."crawl-errors?hl=en&siteUrl=$site&tid=$type_param"; $token = self::GetToken($uri,"x26"); $finalName = "$savepath/CRAWL_ERRORS-$filename.csv"; $url = self::SERVICEURI."crawl-errors-dl?hl=%s&siteUrl=%s&security_token=%s&type=0"; $_url = sprintf($url, $this->_language, $site, $token); self::SaveData($_url,$finalName); } } else { return false; } } private function SaveData($finalUrl, $finalName) { $data = self::GetData($finalUrl); if(strlen($data) > 1 && file_put_contents($finalName, utf8_decode($data))) { array_push($this->_downloaded, realpath($finalName)); return true; } else { array_push($this->_skipped, $finalName); return false; } } private function GetToken($uri, $delimiter) { $matches = array(); $tmp = self::GetData($uri);
File # 2: (index.php)
<?php include 'gwtdata.php'; include 'credentials.php'; try { $website = "http://www.yourdomain.com/"; $gdata = new GWTdata(); if($gdata->LogIn($email, $password) === true) { $gdata->DownloadCSV($website,"Here Add Your Folder Path To Save CSV File With GWT Data"); echo "Datas Are Successfully Downloaded"; } } catch (Exception $e) { die($e->getMessage()); } ?>
Can someone help me with this to achieve all this data and make it as an excel file for generation using PHP.