コード例 #1
0
ファイル: Google.php プロジェクト: dorelljames/piwik
 public function getMetrics($domain)
 {
     $pageCount = $this->fetchIndexedPagesCount($domain);
     $pageRank = $this->fetchPageRank($domain);
     $logo = SearchEngine::getInstance()->getLogoFromUrl('http://google.com');
     return array(new Metric('google-index', 'SEO_Google_IndexedPages', $pageCount, $logo, null, null, 'General_Pages'), new Metric('pagerank', 'Google PageRank', $pageRank, $logo, null, null, '/10'));
 }
コード例 #2
0
ファイル: Tasks.php プロジェクト: dorelljames/piwik
 /**
  * Update the search engine definitions
  *
  * @see https://github.com/piwik/searchengine-and-social-list
  */
 public function updateSearchEngines()
 {
     $url = 'https://raw.githubusercontent.com/piwik/searchengine-and-social-list/master/SearchEngines.yml';
     $list = Http::sendHttpRequest($url, 30);
     $searchEngines = SearchEngine::getInstance()->loadYmlData($list);
     if (count($searchEngines) < 200) {
         return;
     }
     Option::set(SearchEngine::OPTION_STORAGE_NAME, base64_encode(serialize($searchEngines)));
 }
コード例 #3
0
ファイル: Alexa.php プロジェクト: JoeHorn/piwik
 public function getMetrics($domain)
 {
     try {
         $response = Http::sendHttpRequest(self::URL . urlencode($domain), $timeout = 10, @$_SERVER['HTTP_USER_AGENT']);
         $xml = @simplexml_load_string($response);
         $value = $xml ? NumberFormatter::getInstance()->formatNumber((int) $xml->SD->POPULARITY['TEXT']) : null;
     } catch (\Exception $e) {
         $this->logger->warning('Error while getting Alexa SEO stats: {message}', array('message' => $e->getMessage()));
         $value = null;
     }
     $logo = SearchEngine::getInstance()->getLogoFromUrl('http://alexa.com');
     $link = self::LINK . urlencode($domain);
     return array(new Metric('alexa', 'SEO_AlexaRank', $value, $logo, $link));
 }
コード例 #4
0
ファイル: Bing.php プロジェクト: piwik/piwik
 public function getMetrics($domain)
 {
     $url = self::URL . urlencode($domain);
     try {
         $response = str_replace('&nbsp;', ' ', Http::sendHttpRequest($url, $timeout = 10, @$_SERVER['HTTP_USER_AGENT']));
         if (preg_match('#([0-9,\\.]+) results#i', $response, $p)) {
             $pageCount = NumberFormatter::getInstance()->formatNumber((int) str_replace(array(',', '.'), '', $p[1]));
         } else {
             $pageCount = 0;
         }
     } catch (\Exception $e) {
         $this->logger->warning('Error while getting Bing SEO stats: {message}', array('message' => $e->getMessage()));
         $pageCount = null;
     }
     $logo = SearchEngine::getInstance()->getLogoFromUrl('http://bing.com');
     return array(new Metric('bing-index', 'SEO_Bing_IndexedPages', $pageCount, $logo, null, null, 'General_Pages'));
 }
コード例 #5
0
 /**
  * @param DataTable $table
  */
 public function filter($table)
 {
     $idSubtable = $this->idSubtable ?: $table->getId();
     $subTableRow = $this->firstLevelSearchEnginesTable->getRowFromIdSubDataTable($idSubtable);
     if (!empty($subTableRow)) {
         $searchEngineUrl = $subTableRow->getMetadata('url');
         $table->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($keyword, $url) {
             return SearchEngine::getInstance()->getBackLinkFromUrlAndKeyword($url, $keyword);
         }, array($searchEngineUrl)));
         $table->queueFilter(function (DataTable $table) {
             $row = $table->getRowFromId(DataTable::ID_SUMMARY_ROW);
             if ($row) {
                 $row->deleteMetadata('url');
             }
         });
     }
     $table->queueFilter('Piwik\\Plugins\\Referrers\\DataTable\\Filter\\KeywordNotDefined');
 }
コード例 #6
0
ファイル: Dmoz.php プロジェクト: dorelljames/piwik
 public function getMetrics($domain)
 {
     try {
         $response = Http::sendHttpRequest(self::URL . urlencode($domain), $timeout = 10, @$_SERVER['HTTP_USER_AGENT']);
         preg_match('#DMOZ Sites[^\\(]+\\([0-9]-[0-9]+ of ([0-9]+)\\)#', $response, $p);
         if (!empty($p[1])) {
             $value = NumberFormatter::getInstance()->formatNumber((int) $p[1]);
         } else {
             $value = 0;
         }
         // Add DMOZ only if > 0 entries found
         if ($value == 0) {
             return array();
         }
     } catch (\Exception $e) {
         $this->logger->warning('Error while getting Dmoz SEO stats: {message}', array('message' => $e->getMessage()));
         $value = null;
     }
     $logo = SearchEngine::getInstance()->getLogoFromUrl('http://dmoz.org');
     return array(new Metric('dmoz', 'SEO_Dmoz', $value, $logo));
 }
コード例 #7
0
 /**
  * @param DataTable $table
  */
 public function filter($table)
 {
     $idSubtable = $this->idSubtable ?: $table->getId();
     $table->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($url) {
         return SearchEngine::getInstance()->getUrlFromName($url);
     }));
     $table->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', function ($url) {
         return SearchEngine::getInstance()->getLogoFromUrl($url);
     }));
     // get the keyword and create the URL to the search result page
     $rootRow = $this->firstLevelKeywordTable->getRowFromIdSubDataTable($idSubtable);
     if ($rootRow) {
         $keyword = $rootRow->getColumn('label');
         $table->queueFilter('MetadataCallbackReplace', array('url', function ($url, $keyword) {
             return SearchEngine::getInstance()->getBackLinkFromUrlAndKeyword($url, $keyword);
         }, array($keyword)));
         $table->queueFilter(function (DataTable $table) {
             $row = $table->getRowFromId(DataTable::ID_SUMMARY_ROW);
             if ($row) {
                 $row->deleteMetadata('url');
             }
         });
     }
 }
コード例 #8
0
ファイル: SearchEngineTest.php プロジェクト: JoeHorn/piwik
 /**
  * favicon exists but there's no corresponding search engine defined
  */
 public function testObsoleteSearchEngineIcons()
 {
     // Get list of search engines and first appearing URL
     $searchEngines = array();
     foreach (SearchEngine::getInstance()->getDefinitions() as $url => $searchEngine) {
         $name = parse_url('http://' . $url);
         if (!array_key_exists($name['host'], $searchEngines)) {
             $searchEngines[$name['host']] = true;
         }
     }
     // Get list of existing favicons
     $favicons = scandir(PIWIK_PATH_TEST_TO_ROOT . '/plugins/Referrers/images/searchEngines/');
     foreach ($favicons as $name) {
         if ($name[0] == '.' || strpos($name, 'xx.') === 0) {
             continue;
         }
         $host = substr($name, 0, -4);
         $this->assertTrue(array_key_exists($host, $searchEngines), $host);
     }
 }
コード例 #9
0
ファイル: Base.php プロジェクト: diosmosis/piwik
 protected function detectCampaignKeywordFromReferrerUrl()
 {
     if (!empty($this->nameReferrerAnalyzed) && !empty($this->keywordReferrerAnalyzed)) {
         // keyword is already set, we skip
         return true;
     }
     // Set the Campaign keyword to the keyword found in the Referrer URL if any
     if (!empty($this->nameReferrerAnalyzed)) {
         $referrerUrlInfo = SearchEngineDetection::getInstance()->extractInformationFromUrl($this->referrerUrl);
         if (!empty($referrerUrlInfo['keywords'])) {
             $this->keywordReferrerAnalyzed = $referrerUrlInfo['keywords'];
         }
     }
     // Set the keyword, to the hostname found, in a Adsense Referrer URL '&url=' parameter
     if (empty($this->keywordReferrerAnalyzed) && !empty($this->referrerUrlParse['query']) && !empty($this->referrerHost) && (strpos($this->referrerHost, 'googleads') !== false || strpos($this->referrerHost, 'doubleclick') !== false)) {
         // This parameter sometimes is found & contains the page with the adsense ad bringing visitor to our site
         $value = $this->getParameterValueFromReferrerUrl('url');
         if (!empty($value)) {
             $parsedAdsenseReferrerUrl = parse_url($value);
             if (!empty($parsedAdsenseReferrerUrl['host'])) {
                 if (empty($this->nameReferrerAnalyzed)) {
                     $type = $this->getParameterValueFromReferrerUrl('ad_type');
                     $type = $type ? " ({$type})" : '';
                     $this->nameReferrerAnalyzed = self::LABEL_ADWORDS_NAME . $type;
                     $this->typeReferrerAnalyzed = Common::REFERRER_TYPE_CAMPAIGN;
                 }
                 $this->keywordReferrerAnalyzed = self::LABEL_PREFIX_ADWORDS_KEYWORD . $parsedAdsenseReferrerUrl['host'];
             }
         }
     }
 }
コード例 #10
0
ファイル: Visitor.php プロジェクト: dorelljames/piwik
 public function getSearchEngineIcon()
 {
     $searchEngineUrl = $this->getSearchEngineUrl();
     if (!is_null($searchEngineUrl)) {
         return SearchEngine::getInstance()->getLogoFromUrl($searchEngineUrl);
     }
     return null;
 }
コード例 #11
0
ファイル: API.php プロジェクト: dorelljames/piwik
 public function getSearchEngines($idSite, $period, $date, $segment = false, $expanded = false, $flat = false)
 {
     $dataTable = Archive::createDataTableFromArchive(Archiver::SEARCH_ENGINES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, $flat);
     if ($flat) {
         $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'url', function ($url) {
             return SearchEngine::getInstance()->getUrlFromName($url);
         }));
         $dataTable->filter('MetadataCallbackAddMetadata', array('url', 'logo', function ($url) {
             return SearchEngine::getInstance()->getLogoFromUrl($url);
         }));
         $dataTable->filterSubtables('Piwik\\Plugins\\Referrers\\DataTable\\Filter\\KeywordsFromSearchEngineId', array($dataTable));
     } else {
         $dataTable->filter('AddSegmentByLabel', array('referrerName'));
         $dataTable->queueFilter('PrependSegment', array('referrerType==search;'));
         $dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($url) {
             return SearchEngine::getInstance()->getUrlFromName($url);
         }));
         $dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', function ($url) {
             return SearchEngine::getInstance()->getLogoFromUrl($url);
         }));
     }
     return $dataTable;
 }