Jump to content

Recommended Posts

I created a plugin for vbulletin and I was hoping someone would know enough about vbulletin to be able to give me a hand with an issue I am having

 

I have this script

 

<?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 within vbulletins plugins

 

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

 

Error getting information from Twitter. File is not JSON.

 

but unfortunately its making the homepage blank with only that text when it is having issues getting the JSON..

 

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 - www.webprocafe.com ( yes I know its a web dev forum, but we are relatively new and seems no-one has vbulletin knowledge. )

 

thank you

Link to comment
https://forums.phpfreaks.com/topic/171947-vbulletin-plugin-problems/
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.