Posts Tagged ‘markup’

Parsing and Embedding Twitter Feeds in PHP

Twitter feeds can be obtained in XML with this URL scheme:

http://twitter.com/statuses/user_timeline/$username.xml?count=$count

Where $username is the twitter user’s name and $count is how far back you want to go.

If your environment allows url_fopen you can load the whole thing directly into an object with simplexml_load_file().

Portability is good and allow_url_fopen is arguably very dangerous. For the sake of brevity let’s rip this class from the PHP manual’s fopen() comments:

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
            .    $crlf;
       
        // fetch
        $this->_fp = fsockopen(($this->_protocol == 'https' ? 'ssl://' : '') . $this->_host, $this->_port);
        fwrite($this->_fp, $req);
        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);
        }
    }
}

We also need to give the links anchors, so we’ll modify Jonathan Sampson‘s clever little function to not shorten URLs since twitter already does this for us these days:

function auto_link_text($text)
{
   $pattern  = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#';
   $callback = create_function('$matches', '
       $url       = array_shift($matches);
       $url_parts = parse_url($url);

       $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH);
       $text = preg_replace("/^www./", "", $text);

       $last = -(strlen(strrchr($text, "/"))) + 1;

       return sprintf(\'<a rel="nowfollow" href="%s">%s</a>\', $url, $text);
   ');

   return preg_replace_callback($pattern, $callback, $text);
}

Here we go:

$username = "username";
$count = 5;
$feed = "http://twitter.com/statuses/user_timeline/$username.xml?count=$count";

$r = new HTTPRequest($feed);
$tweets = $r->DownloadToString();
$twitter_xml = simplexml_load_string($tweets);

$tweet_data = '';
foreach($twitter_xml->status as $status_object)
{
	$tweet_epoch = strtotime($status_object->created_at);
	$tweet_data .= "<div class=\"tweet\"><span class=\"tweet_date\">".date("F j g:ia", $tweet_epoch)."</span><div class=\"tweet_message\">".auto_link_text($status_object->text)."</div></div>";
}

print($tweet_data);

You Can Still Get Cheap Comodo Positive SSL for Under $10

Comodo has offered discount chained SSL certificates through its PositiveSSL brand for some time. A few months ago I was shocked to see the renewal fee for what used to be a $9.99 certificate had gone up to $49.00/yr. This rate has unfortunately not dropped since, prompting the search for a new bargain-basement supplier.

As it turns out there is good news: it is still possible to get PositiveSSL for cheap through a reseller. Currently 1 year is running only $8.00 on CheapSSLs. I’d never heard of CheapSSLs before yesterday but my bare modicum of research indicates it is a reputable front-end for Comodo, GeoTrust and VeriSign/Symantec and a daughter of registrar DomainCheap.com.

After one makes their purchase one must proceed to the “My SSL Certificates” page on CheapSSLs to activate it which seems to throw off some folks expecting the process to be taken over by the actual issuer of the certificate. In fact, the CSR is provided to CheapSSLs and the entire process is handled through their site.

There is a small e-mail verification step but if everything goes correctly you will be issued your certificate from the signing authority proper via e-mail in mere minutes.

Bonus: CheapSSLs accepts payment by PayPal allowing for truly anonymous/paper-trail-less certificates.

Happy reselling :)

Return top
foxpa.ws
Online Marketing Toplist
Internet
Technology Blogs - Blog Rankings

Internet Blogs - BlogCatalog Blog Directory

Technology blogs
Bad Karma Networks

Please Donate!


Made in Canada  •  There's a fox in the Gibson!  •  2010-12