diff options
| author | root | 2014-02-24 18:54:40 +0100 |
|---|---|---|
| committer | root | 2014-02-24 18:54:40 +0100 |
| commit | 6d0a5d7096e0aee3dcb1a41a0f6c57a38876c821 (patch) | |
| tree | 04aeaeae6274332b2b755c5c2a91185eefd62955 /www | |
| parent | 8d0d04245732fcadb04ccdcba8244ca78f825435 (diff) | |
| download | random-6d0a5d7096e0aee3dcb1a41a0f6c57a38876c821.tar.gz | |
.
Diffstat (limited to 'www')
| -rw-r--r-- | www/InstallationChecker.php | 390 | ||||
| -rw-r--r-- | www/youtube.php | 70 | ||||
| -rw-r--r-- | www/zend_init.php | 10 |
3 files changed, 462 insertions, 8 deletions
diff --git a/www/InstallationChecker.php b/www/InstallationChecker.php new file mode 100644 index 0000000..c5d90dd --- /dev/null +++ b/www/InstallationChecker.php @@ -0,0 +1,390 @@ +<?php +/** + * Zend Framework + * + * LICENSE + * + * This source file is subject to the new BSD license that is bundled + * with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://framework.zend.com/license/new-bsd + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@zend.com so we can send you a copy immediately. + * + * @category Zend + * @package Zend_Gdata + * @subpackage Demos + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ + +/** + * Simple class to verify that the server that this is run on has a correct + * installation of the Zend Framework Gdata component. + */ + +$clientLibraryPath = "../zend/library"; +$oldPath = set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath); + +class InstallationChecker { + + const CSS_WARNING = '.warning { color: #fff; background-color: #AF0007;}'; + const CSS_SUCCESS = '.success { color: #000; background-color: #69FF4F;}'; + const CSS_ERROR = '.error { color: #fff; background-color: #FF9FA3;}'; + const PHP_EXTENSION_ERRORS = 'PHP Extension Errors'; + const PHP_MANUAL_LINK_FRAGMENT = 'http://us.php.net/manual/en/book.'; + const PHP_REQUIREMENT_CHECKER_ID = 'PHP Requirement checker v0.1'; + const SSL_CAPABILITIES_ERRORS = 'SSL Capabilities Errors'; + const YOUTUBE_API_CONNECTIVITY_ERRORS = 'YouTube API Connectivity Errors'; + const ZEND_GDATA_INSTALL_ERRORS = 'Zend Framework Installation Errors'; + const ZEND_SUBVERSION_URI = 'http://framework.zend.com/download/subversion'; + + private static $REQUIRED_EXTENSIONS = array( + 'ctype', 'dom', 'libxml', 'spl', 'standard', 'openssl'); + + private $_allErrors = array( + self::PHP_EXTENSION_ERRORS => array( + 'tested' => false, 'errors' => null), + self::ZEND_GDATA_INSTALL_ERRORS => array( + 'tested' => false, 'errors' => null), + self::SSL_CAPABILITIES_ERRORS => array( + 'tested' => false, 'errors' => null), + self::YOUTUBE_API_CONNECTIVITY_ERRORS => array( + 'tested' => false, 'errors' => null) + ); + + private $_sapiModeCLI = null; + + /** + * Create a new InstallationChecker object and run verifications. + * @return void + */ + public function __construct() + { + $this->determineIfInCLIMode(); + $this->runAllVerifications(); + $this->outputResults(); + } + + /** + * Set the sapiModeCLI variable to true if we are running CLI mode. + * + * @return void + */ + private function determineIfInCLIMode() + { + if (php_sapi_name() == 'cli') { + $this->_sapiModeCLI = true; + } + } + + /** + * Getter for sapiModeCLI variable. + * + * @return boolean True if we are running in CLI mode. + */ + public function runningInCLIMode() + { + if ($this->_sapiModeCLI) { + return true; + } else { + return false; + } + } + + /** + * Run verifications, stopping at each step if there is a failure. + * + * @return void + */ + public function runAllVerifications() + { + if (!$this->validatePHPExtensions()) { + return; + } + if (!$this->validateZendFrameworkInstallation()) { + return; + } + if (!$this->testSSLCapabilities()) { + return; + } + if (!$this->validateYouTubeAPIConnectivity()) { + return; + } + } + + /** + * Validate that the required PHP Extensions are installed and available. + * + * @return boolean False if there were errors. + */ + private function validatePHPExtensions() + { + $phpExtensionErrors = array(); + foreach (self::$REQUIRED_EXTENSIONS as $requiredExtension) { + if (!extension_loaded($requiredExtension)) { + $requiredExtensionError = $requiredExtension . + ' extension missing'; + $documentationLink = null; + if ($requiredExtension != 'standard') { + $documentationLink = self::PHP_MANUAL_LINK_FRAGMENT . + $requiredExtension . '.php'; + $documentationLink = + $this->checkAndAddHTMLLink($documentationLink); + } else { + $documentationLink = self::PHP_MANUAL_LINK_FRAGMENT . + 'spl.php'; + $documentationLink = + $this->checkAndAddHTMLLink($documentationLink); + } + + if ($documentationLink) { + $phpExtensionErrors[] = $requiredExtensionError . + ' - refer to ' . $documentationLink; + } + } + } + $this->_allErrors[self::PHP_EXTENSION_ERRORS]['tested'] = true; + if (count($phpExtensionErrors) > 0) { + $this->_allErrors[self::PHP_EXTENSION_ERRORS]['errors'] = + $phpExtensionErrors; + return false; + } + return true; + } + + /** + * Validate that the Gdata component of Zend Framework is installed + * properly. Also checks that the required YouTube API helper methods are + * found. + * + * @return boolean False if there were errors. + */ + private function validateZendFrameworkInstallation() + { + $zendFrameworkInstallationErrors = array(); + $zendLoaderPresent = false; + try { + $zendLoaderPresent = @fopen('Zend/Loader.php', 'r', true); + } catch (Exception $e) { + $zendFrameworkInstallationErrors[] = 'Exception thrown trying to ' . + 'access Zend/Loader.php using \'use_include_path\' = true ' . + 'Make sure you include the Zend Framework in your ' . + 'include_path which currently contains: "' . + ini_get('include_path') . '"'; + } + + if ($zendLoaderPresent) { + @fclose($zendLoaderPresent); + require_once('Zend/Loader.php'); + require_once('Zend/Version.php'); + Zend_Loader::loadClass('Zend_Gdata_YouTube'); + Zend_Loader::loadClass('Zend_Gdata_YouTube_VideoEntry'); + $yt = new Zend_Gdata_YouTube(); + $videoEntry = $yt->newVideoEntry(); + if (!method_exists($videoEntry, 'setVideoTitle')) { + $zendFrameworkMessage = 'Your version of the ' . + 'Zend Framework ' . Zend_Version::VERSION . ' is too old' . + ' to run the YouTube demo application and does not' . + ' contain the new helper methods. Please check out a' . + ' newer version from Zend\'s repository: ' . + checkAndAddHTMLLink(self::ZEND_SUBVERSION_URI); + $zendFrameworkInstallationErrors[] = $zendFrameworkMessage; + } + } else { + if (count($zendFrameworkInstallationErrors) < 1) { + $zendFrameworkInstallationErrors[] = 'Exception thrown trying' . + ' to access Zend/Loader.php using \'use_include_path\' =' . + ' true. Make sure you include Zend Framework in your' . + ' include_path which currently contains: ' . + ini_get('include_path'); + } + } + + $this->_allErrors[self::ZEND_GDATA_INSTALL_ERRORS]['tested'] = true; + + if (count($zendFrameworkInstallationErrors) > 0) { + $this->_allErrors[self::ZEND_GDATA_INSTALL_ERRORS]['errors'] = + $zendFrameworkInstallationErrors; + return false; + } + return true; + } + + /** + * Create HTML link from an input string if not in CLI mode. + * + * @param string The error message to be converted to a link. + * @return string Either the original error message or an HTML version. + */ + private function checkAndAddHTMLLink($inputString) { + if (!$this->runningInCLIMode()) { + return $this->makeHTMLLink($inputString); + } else { + return $inputString; + } + } + + /** + * Create an HTML link from a string. + * + * @param string The string to be made into link text and anchor target. + * @return string HTML link. + */ + private function makeHTMLLink($inputString) + { + return '<a href="'. $inputString . '" target="_blank">' . + $inputString . '</a>'; + } + + /** + * Validate that SSL Capabilities are available. + * + * @return boolean False if there were errors. + */ + private function testSSLCapabilities() + { + $sslCapabilitiesErrors = array(); + require_once 'Zend/Loader.php'; + Zend_Loader::loadClass('Zend_Http_Client'); + + $httpClient = new Zend_Http_Client( + 'https://www.google.com/accounts/AuthSubRequest'); + $response = $httpClient->request(); + $this->_allErrors[self::SSL_CAPABILITIES_ERRORS]['tested'] = true; + + if ($response->isError()) { + $sslCapabilitiesErrors[] = 'Response from trying to access' . + ' \'https://www.google.com/accounts/AuthSubRequest\' ' . + $response->getStatus() . ' - ' . $response->getMessage(); + } + + if (count($sslCapabilitiesErrors) > 0) { + $this->_allErrors[self::SSL_CAPABILITIES_ERRORS]['errors'] = + $sslCapabilitiesErrors; + return false; + } + return true; + } + + /** + * Validate that we can connect to the YouTube API. + * + * @return boolean False if there were errors. + */ + private function validateYouTubeAPIConnectivity() + { + $connectivityErrors = array(); + require_once 'Zend/Loader.php'; + Zend_Loader::loadClass('Zend_Gdata_YouTube'); + $yt = new Zend_Gdata_YouTube(); + $topRatedFeed = $yt->getTopRatedVideoFeed(); + if ($topRatedFeed instanceof Zend_Gdata_YouTube_VideoFeed) { + if ($topRatedFeed->getTotalResults()->getText() < 1) { + $connectivityErrors[] = 'There was less than 1 video entry' . + ' in the \'Top Rated Video Feed\''; + } + } else { + $connectivityErrors[] = 'The call to \'getTopRatedVideoFeed()\' ' . + 'did not result in a Zend_Gdata_YouTube_VideoFeed object'; + } + + $this->_allErrors[self::YOUTUBE_API_CONNECTIVITY_ERRORS]['tested'] = + true; + if (count($connectivityErrors) > 0) { + $this->_allErrors[self::YOUTUBE_API_CONNECTIVITY_ERRORS]['tested'] = + $connectivityErrors; + return false; + } + return true; + } + + /** + * Dispatch a call to outputResultsInHTML or outputResultsInText pending + * the current SAPI mode. + * + * @return void + */ + public function outputResults() + { + if ($this->_sapiModeCLI) { + print $this->getResultsInText(); + } else { + print $this->getResultsInHTML(); + } + } + + + /** + * Return a string representing the results of the verifications. + * + * @return string A string representing the results. + */ + private function getResultsInText() + { + $output = "== Ran PHP Installation Checker using CLI ==\n"; + + $error_count = 0; + foreach($this->_allErrors as $key => $value) { + $output .= $key . ' -- '; + if (($value['tested'] == true) && (count($value['errors']) == 0)) { + $output .= "No errors found\n"; + } elseif ($value['tested'] == true) { + $output .= "Tested\n"; + $error_count = 0; + foreach ($value['errors'] as $error) { + $output .= "Error number: " . $error_count . "\n--" . + $error . "\n"; + } + } else { + $output .= "Not tested\n"; + } + $error_count++; + } + return $output; + } + + /** + * Return an HTML table representing the results of the verifications. + * + * @return string An HTML string representing the results. + */ + private function getResultsInHTML() + { + $html = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" " . + "\"http://www.w3.org/TR/html4/strict.dtd\">\n". + "<html><head>\n<title>PHP Installation Checker</title>\n" . + "<style type=\"text/css\">\n" . + self::CSS_WARNING . "\n" . + self::CSS_SUCCESS . "\n" . + self::CSS_ERROR . "\n" . + "</style></head>\n" . + "<body>\n<table class=\"verification_table\">" . + "<caption>Ran PHP Installation Checker on " . + gmdate('c') . "</caption>\n"; + + $error_count = 0; + foreach($this->_allErrors as $key => $value) { + $html .= "<tr><td class=\"verification_type\">" . $key . "</td>"; + if (($value['tested'] == true) && (count($value['errors']) == 0)) { + $html .= "<td class=\"success\">Tested</td></tr>\n" . + "<tr><td colspan=\"2\">No errors found</td></tr>\n"; + } elseif ($value['tested'] == true) { + $html .= "<td class=\"warning\">Tested</td></tr>\n"; + $error_count = 0; + foreach ($value['errors'] as $error) { + $html .= "<tr><td class=\"error\">" . $error_count . "</td>" . + "<td class=\"error\">" . $error . "</td></tr>\n"; + } + } else { + $html .= "<td class=\"warning\">Not tested</td></tr>\n"; + } + $error_count++; + } + $html .= "</body></html>"; + return $html; + } +} + +$installationChecker = new InstallationChecker(); diff --git a/www/youtube.php b/www/youtube.php index ee2cc02..13829fa 100644 --- a/www/youtube.php +++ b/www/youtube.php @@ -1,12 +1,65 @@ <?php -/* -*This generates a Youtube-ID and checks if available. This is the most stupid way I can think of. -*NO, THIS SHIT DOESN'T WORK!! You will get 404's everytime. -*/ +include("zend_init.php"); + +function getAndPrintVideoFeed($location = Zend_Gdata_YouTube::VIDEO_URI) +{ +$yt = new Zend_Gdata_YouTube(); +$yt->setMajorProtocolVersion(2); + +$videoFeed = $yt->getVideoFeed($location); + printVideoFeed($videoFeed); +} + +function printVideoFeed($videoFeed) +{ + $count = 1; + foreach ($videoFeed as $videoEntry) { + echo "Entry # " . $count . "\n"; + printVideoEntry($videoEntry); + echo "\n"; + $count++; + } +} + +function printVideoEntry($videoEntry) +{ + // the videoEntry object contains many helper functions + // that access the underlying mediaGroup object + echo 'Video: ' . $videoEntry->getVideoTitle() . "\n <br>"; +/* echo 'Video ID: ' . $videoEntry->getVideoId() . "\n"; + echo 'Updated: ' . $videoEntry->getUpdated() . "\n"; + echo 'Description: ' . $videoEntry->getVideoDescription() . "\n"; + echo 'Category: ' . $videoEntry->getVideoCategory() . "\n"; + echo 'Tags: ' . implode(", ", $videoEntry->getVideoTags()) . "\n"; + echo 'Watch page: ' . $videoEntry->getVideoWatchPageUrl() . "\n"; + echo 'Flash Player Url: ' . $videoEntry->getFlashPlayerUrl() . "\n"; + echo 'Duration: ' . $videoEntry->getVideoDuration() . "\n"; + echo 'View count: ' . $videoEntry->getVideoViewCount() . "\n"; + echo 'Rating: ' . $videoEntry->getVideoRatingInfo() . "\n"; + echo 'Geo Location: ' . $videoEntry->getVideoGeoLocation() . "\n"; + echo 'Recorded on: ' . $videoEntry->getVideoRecorded() . "\n"; + */ -$clientLibraryPath = "../zend/library"; -$oldPath = set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath); + // see the paragraph above this function for more information on the + // 'mediaGroup' object. in the following code, we use the mediaGroup + // object directly to retrieve its 'Mobile RSTP link' child +/* foreach ($videoEntry->mediaGroup->content as $content) { + if ($content->type === "video/3gpp") { + echo 'Mobile RTSP link: ' . $content->url . "\n"; + } + } + + echo "Thumbnails:\n"; + $videoThumbnails = $videoEntry->getVideoThumbnails(); + + foreach($videoThumbnails as $videoThumbnail) { + echo $videoThumbnail['time'] . ' - ' . $videoThumbnail['url']; + echo ' height=' . $videoThumbnail['height']; + echo ' width=' . $videoThumbnail['width'] . "\n"; + } +*/ +} function get_video(){ @@ -24,12 +77,13 @@ function get_video(){ $string = "$string".$youtube_array[$index]; } return $string; - } } +getAndPrintVideoFeed(); + $searchstring = get_video(); -echo $searchstring; +echo "<br>Searchstring: " . $searchstring; // <iframe width="560" height="315" src="//www.youtube.com/embed/" frameborder="0" allowfullscreen></iframe> diff --git a/www/zend_init.php b/www/zend_init.php new file mode 100644 index 0000000..3089906 --- /dev/null +++ b/www/zend_init.php @@ -0,0 +1,10 @@ +<? +$clientLibraryPath = "../zend/library"; +$oldPath = set_include_path(get_include_path() . PATH_SEPARATOR . $clientLibraryPath); + +require_once 'Zend/Loader.php'; // the Zend dir must be in your include_path +Zend_Loader::loadClass('Zend_Gdata_YouTube'); +$yt = new Zend_Gdata_YouTube(); +$yt->setMajorProtocolVersion(2); + +return $yt; |
