Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
Register FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 08-26-2009, 10:52 AM
saltedm8 saltedm8 is offline
 
Join Date: May 2008
Posts: 84
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default switch off and on plugin via php upon condition

I have this script

PHP Code:
<?php
class myTwit{
    var $user = false; // User to show public posts
    var $cacheFile = 'twitcache.txt'; // File to save local cache of Twitter update
    var $cachExpire = 300; // Seconds that cache is classed as "old"
    var $myTwitHeader = true;
    var $postLimit = 20; // 20 = max
    var $debug = false;
    
    function printError($message){
        print htmlspecialchars($message);
        exit;
    }
    function debugMsg($message){
        if ($this->debug == true) print htmlspecialchars($message).'<br />';
    }
    function formatDays($val, $qty){
        if ($val > 1) return $val.' '.$qty.'s ago';
        else return $val.' '.$qty.' ago';
    }
    
    function intoRelativeTime($seconds){
        if (($seconds / 60 / 60 / 24) > 1) return $this->formatDays(round($seconds / 60 / 60 / 24), 'day');
        elseif (($seconds / 60 / 60) > 1) return 'about '.$this->formatDays(round($seconds / 60 / 60), 'hour');
        else if (($seconds / 60 ) > 1) return 'about '.$this->formatDays(round($seconds / 60), 'minute');
        else return 'about '.round($seconds).' seconds ago';
    }

    function linkURLs($text){
        $in=array( '`((?:https?|ftp)://\S+[[:alnum:]]/?)`si', '`((?<!//)(www\.\S+[[:alnum:]]/?))`si' );
        $out=array( '<a href="$1" target="_blank">$1</a> ', '<a href="http://$1" target="_blank">$1</a>' );
        $text = preg_replace($in,$out,$text);
        $text = preg_replace('/@([a-zA-Z0-9-]+)/','@<a href="http://twitter.com/$1" target="_blank">$1</a>',$text);
        return $text;
    }
    
    function checkCacheFile(){
        if ( (@filemtime($this->cacheFile) < (mktime() - $this->cachExpire) ) || (!is_file($this->cacheFile)) ){
            $this->debugMsg('Cache file outdated');
            $this->updateCache();
        } else {
            $this->debugMsg('Cache file still valid');
        }
    }
    
    function updateCache(){
        $uri = 'http://twitter.com/statuses/user_timeline/'.$this->user.'.json';
        $req = new HTTPRequest($uri);
        $tmpdata = $req->DownloadToString();
        $resp = json_decode($tmpdata, true);
        if (isset($resp['error'])) $this->printError('Error getting information from Twitter ['.$resp['error'].']. Please check the username ('.$this->user.')');
        elseif (!is_array($resp)) $this->printError('Error getting information from Twitter. File is not JSON.');
        $handle = @fopen($this->cacheFile, 'w');
        if (!$handle) $this->printError('Could not write to cache file: '.$this->cacheFile.'. Please check read/write permissions.');
        fwrite($handle, $tmpdata);
        fclose($handle);
        $this->debugMsg('Updated cache file: '.$this->cacheFile);
    }
    
    function readCache(){
        if( false == ($this->jsonData = @file_get_contents( $this->cacheFile )))
            $this->printError('Could not read cache file: '.$this->cacheFile);
    }
    
    function initMyTwit(){
        if (!is_string($this->user)) $this->printError('Please set a user.');
        $this->checkCacheFile();
        $this->readCache();
        $this->jsonArray = json_decode($this->jsonData, true);
        $output = '<ul class="twitbox">';
        if ($this->myTwitHeader && isset($this->jsonArray[0])){
            $output .= ' <li class="mytwitHead"><img src="'.$this->jsonArray[0]['user']['profile_image_url'].'" alt="'.$this->user.'" />
            <div><a href="http://twitter.com/'.$this->user.'" target="_blank">'.$this->user.'</a><br />
            '.$this->jsonArray[0]['user']['followers_count'].' followers</div>
            </li>';
        }        
        for($x=0; $x < count($this->jsonArray) && $x < $this->postLimit; $x++){
            $seconds_ago = mktime() - strtotime($this->jsonArray[$x]['created_at']);
            $ts = strtotime($this->jsonArray[$x]['created_at'])+$this->jsonArray[$x]['user']['utc_offset'];
            $cur_ts = mktime();
            $output .= '<li class="twit">'.$this->linkURLs(htmlspecialchars($this->jsonArray[$x]['text'])).
            ' <span class="twhen">by <a href="http://twitter.com/'.$this->jsonArray[$x]['user']['screen_name'].'" target="_blank">'.$this->jsonArray[$x]['user']['screen_name'].'</a> '.
            $this->intoRelativeTime($seconds_ago)."</span></li>\n";
        }
        $output .= '</ul>';
        $this->myTwitData = $output;
    }    
}


class HTTPRequest{
    var $_fp;            // HTTP socket
    var $_url;        // full URL
    var $_host;    // HTTP host
    var $_protocol;    // protocol (HTTP/HTTPS)
    var $_uri;        // request URI
    var $_port;    // port
    // scan url
    function _scan_url(){
            $req = $this->_url;
            $pos = strpos($req, '://');
            $this->_protocol = strtolower(substr($req, 0, $pos));
            $req = substr($req, $pos+3);
            $pos = strpos($req, '/');
            if($pos === false)
                    $pos = strlen($req);
            $host = substr($req, 0, $pos);
            if(strpos($host, ':') !== false)        {
                    list($this->_host, $this->_port) = explode(':', $host);
            }else{
                    $this->_host = $host;
                    $this->_port = ($this->_protocol == 'https') ? 443 : 80;
            }
            $this->_uri = substr($req, $pos);
            if($this->_uri == '')
                $this->_uri = '/';
    }
    // constructor
    function HTTPRequest($url){
            $this->_url = $url;
            $this->_scan_url();
    }
    // download URL to string
    function DownloadToString(){
        $crlf = "\r\n";
        // generate request
        $req = 'GET ' . $this->_uri . ' HTTP/1.0' . $crlf
                .    'Host: ' . $this->_host . $crlf
                .       'User-Agent: PHP' . $crlf
                .    $crlf;
        // fetch
        $this->_fp = @fsockopen(($this->_protocol == 'https' ? 'ssl://' : '') . $this->_host, $this->_port);
        if ($this->_fp){
            fwrite($this->_fp, $req);
            $response = "";
            while(is_resource($this->_fp) && $this->_fp && !feof($this->_fp))
                    $response .= fread($this->_fp, 1024);
            fclose($this->_fp);
            // split header and body
            $pos = strpos($response, $crlf . $crlf);
            if($pos === false)
                    return($response);
            $header = substr($response, 0, $pos);
            $body = substr($response, $pos + 2 * strlen($crlf));
            // parse headers
            $headers = array();
            $lines = explode($crlf, $header);
            foreach($lines as $line)
                    if(($pos = strpos($line, ':')) !== false)
                            $headers[strtolower(trim(substr($line, 0, $pos)))] = trim(substr($line, $pos+1));
            // redirection?
            if(isset($headers['location'])){
                    $http = new HTTPRequest($headers['location']);
                    return($http->DownloadToString($http));
            } else{
                    return($body);
            }
        } else {
            return false;
        }
    }
}
?>
and I am calling it using this

PHP Code:
ob_start();
include(DIR . '/twittercall.php');
$twitter = new myTwit();
$twitter->user = 'webprocafe';
$twitter->cacheFile = 'twitcache.txt';
$twitter->postLimit = 5;
$twitter->initMyTwit();
print $twitter->myTwitData;
$latest_twit = ob_get_contents();
ob_end_clean(); 
when it cant get the json file for any reason it displays

Quote:
Error getting information from Twitter. File is not JSON.
but unfortunately its making the homepage blank with only that text..

I was wondering if anyone can work out how to make it switch off the plugin instead if it goes down, and then when it comes back up again to switch the plugin on

or.. more preferred would be to make it so it does not make the homepage blank, and only display that message in the section that the feed is sitting in... - it should be under 'latest tweets' on our homepage - link in signature

thank you
Reply With Quote
  #2  
Old 08-30-2009, 08:10 AM
saltedm8 saltedm8 is offline
 
Join Date: May 2008
Posts: 84
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

B.U.M.P

please give me some suggestions, thanks
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 06:06 PM.


Powered by vBulletin® Version 3.9.0
Copyright ©2000 - 2017, vBulletin Solutions Inc.