Archive for September 30th, 2009

How to blog effi­ciently and get the most from your content

September 30th, 2009

How to get the most mileage from your content

Con­tent in large part, is the vehi­cle of choice in today’s Inter­net. As I see it, today’s inter­net is mostly about two things; infor­ma­tion or com­mu­ni­ca­tion (per­sonal and social). There will always be a cer­tain por­tion of the Inter­net reserved for busi­ness intranets and extranets but by in large we seem to feel that the best use of today’s Inter­net is a global soci­etal infor­ma­tion share. How can we cap­i­tal­ize and mon­e­tize that as con­tent writ­ers, arti­cle writ­ers and bloggers?

The best way that I have found to mon­e­tize con­tent is to write con­tent and pub­lish infor­ma­tion using the R.A.T con­tent prin­ci­ple. Using this prin­ci­ple will ensure that you get the most mileage from the con­tent that you work so hard to put together.

Rel­e­vant Content

The con­tent that you pub­lish to your audi­ence has to be rel­e­vant to your audi­ence. Don’t pub­lish con­tent about cars to an audi­ence that is in the health and fit­ness mar­ket.  It might not upset them ter­ri­bly but your not likely to get much viewer/readership. This pre­cludes that you have done the proper research to iden­tify what your audi­ence should be and where to find them.

Accu­rate Content

Accu­racy is fairly sim­ple, I’ll lis­ten to any­one once but if I find out they are giv­ing  me incor­rect infor­ma­tion I’m not likely  to lis­ten to them again. If your con­tent is not accu­rate it isn’t IF your audi­ence finds out your full of it, it is WHEN.  It is so sim­ple to have accu­rate con­tent that there is no excuse for pub­lish­ing inac­cu­rate con­tent. Sim­ply write about the things that you know, if you aren’t versed on a topic then don’t write con­tent about it. If you want to write about a topic that your not famil­iar with then com­mit to doing exhaus­tive research on the topic prior to writ­ing about it and make sure to tell your audi­ence that the con­tent is only based on your own per­sonal research. I would rather lis­ten to an hon­est per­son that is occa­sion­ally pub­lishes inac­cu­rate con­tent than a liar that I can’t trust con­tent from.

Time­less Content

I think ‘con­tent period’ this is the most impor­tant part of the R.A.T prin­ci­ple. Your con­tent needs to be as time­less as pos­si­ble so it can be reusable. By that I mean that your con­tent should be just as rel­e­vant and read­able two years from now as it is today. Avoid trending/fad top­ics (unless you don’t plan to reuse the con­tent) that won’t be rel­e­vant in a month or two. Refrain from ref­er­enc­ing or using cur­rent events to illus­trate your ideals.  In two years, some­one inter­ested in your topic may be read­ing your con­tent but won’t be able to relate to it because you illus­trate and idea by ref­er­ence to an event in your time that the cur­rent reader was unaware of and then the mes­sage just gets lost.

The Code­Tree rec­om­mends iCon­tact for mar­ket­ing list management

Writ­ten By:

Ryan Huff
ryan@rthconsultants.com

http://rthconsultants.com

Ryan Huff is a free­lance web devel­oper, tech­nol­ogy coach, mar­tial artist, busi­ness devel­oper and an avid inter­net mar­keter. You can con­nect with Ryan here at The Code­Tree or at RTH Con­sul­tants, fol­low @rthconsultants on Twit­ter or at Face­book

An alter­na­tive screen scrap­ing func­tion using PHP

September 30th, 2009
function load($url,$options=array()) {

    $default_options = array(
        'method'        => 'get',
        'return_info'    => false,
        'return_body'    => true,
        'cache'            => false,
        'referer'        => '',
        'headers'        => array(),
        'session'        => false,
        'session_close'    => false,
    );

    foreach($default_options as $opt=>$value) {

        if(!isset($options[$opt])) $options[$opt] = $value;
    }

    $url_parts = parse_url($url);

    $ch = false;

    $info = array(

        'http_code'    => 200

    );

    $response = '';

    $send_header = array(
        'Accept' => 'text/*',
        'User-Agent' => 'codeTree/1.00.A (http://www.mycodetree.com)'
    ) + $options['headers'];

    if($options['cache']) {

        $cache_folder = '/tmp/'; //CACHE FOLDER (MUST EXIST)

        if(isset($options['cache_folder'])) $cache_folder = $options['cache_folder'];

        if(!file_exists($cache_folder)) {

            $old_umask = umask(0); 

            mkdir($cache_folder, 0777);

            umask($old_umask);
        }

        $cache_file_name = md5($url) . '.cache';

        $cache_file = joinPath($cache_folder, $cache_file_name); 

        if(file_exists($cache_file)) { 

            $response = file_get_contents($cache_file);

            $separator_position = strpos($response,"\r\n\r\n");

            $header_text = substr($response,0,$separator_position);

            $body = substr($response,$separator_position+4);

            foreach(explode("\n",$header_text) as $line) {

                $parts = explode(": ",$line);

                if(count($parts) == 2) $headers[$parts[0]] = chop($parts[1]);

            }

            $headers['cached'] = true;

            if(!$options['return_info']) return $body;

            else return array('headers' => $headers, 'body' => $body, 'info' => array('cached'=>true));

        }

    }
    ///////////////////////////// Curl /////////////////////////////////////
    if(function_exists("curl_init") and (!(isset($options['use']) and $options['use'] == 'fsocketopen'))) {

        if(isset($options['post_data'])) {

            $page = $url;

            $options['method'] = 'post';

            if(is_array($options['post_data'])) {

                $post_data = array();

                foreach($options['post_data'] as $key=>$value) {

                    $post_data[] = "$key=" . urlencode($value);

                }

                $url_parts['query'] = implode('&', $post_data);

            } else {

                $url_parts['query'] = $options['post_data'];

            }

        } else {

            if(isset($options['method']) and $options['method'] == 'post') {

                $page = $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path'];

            } else {

                $page = $url;

            }

        }

        if($options['session'] and isset($GLOBALS['_binget_curl_session'])) 

        $ch = $GLOBALS['_binget_curl_session'];

        else 

        $ch = curl_init($url_parts['host']);

        curl_setopt($ch, CURLOPT_URL, $page) or die("Invalid cURL Handle Resouce");

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

        curl_setopt($ch, CURLOPT_HEADER, true);

        curl_setopt($ch, CURLOPT_NOBODY, !($options['return_body'])); 

        if(isset($options['method']) and $options['method'] == 'post' and isset($url_parts['query'])) {

            curl_setopt($ch, CURLOPT_POST, true);

            curl_setopt($ch, CURLOPT_POSTFIELDS, $url_parts['query']);

        }

        curl_setopt($ch, CURLOPT_USERAGENT, $send_header['User-Agent']);

        $custom_headers = array("Accept: " . $send_header['Accept'] );

        if(isset($options['modified_since']))

            array_push($custom_headers,"If-Modified-Since: ".gmdate('D, d M Y H:i:s \G\M\T',strtotime($options['modified_since'])));

        curl_setopt($ch, CURLOPT_HTTPHEADER, $custom_headers);

        if($options['referer']) curl_setopt($ch, CURLOPT_REFERER, $options['referer']);

        curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/binget-cookie.txt");

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        curl_setopt($ch, CURLOPT_MAXREDIRS, 5);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        if(isset($url_parts['user']) and isset($url_parts['pass'])) {

            $custom_headers = array("Authorization: Basic ".base64_encode($url_parts['user'].':'.$url_parts['pass']));

            curl_setopt($ch, CURLOPT_HTTPHEADER, $custom_headers);

        }

        $response = curl_exec($ch);

        $info = curl_getinfo($ch);

        if($options['session'] and !$options['session_close']) $GLOBALS['_binget_curl_session'] = $ch;

        else curl_close($ch);

    //////////////////////////////////////////// FSockOpen //////////////////////////////
    } else {

        if(isset($url_parts['query'])) {

            if(isset($options['method']) and $options['method'] == 'post')

                $page = $url_parts['path'];

            else

                $page = $url_parts['path'] . '?' . $url_parts['query'];

        } else {

            $page = $url_parts['path'];

        }

        if(!isset($url_parts['port'])) $url_parts['port'] = 80;

        $fp = fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, 30);

        if ($fp) {

            $out = '';

            if(isset($options['method']) and $options['method'] == 'post' and isset($url_parts['query'])) {

                $out .= "POST $page HTTP/1.1\r\n";

            } else {

                $out .= "GET $page HTTP/1.0\r\n";
            }

            $out .= "Host: $url_parts[host]\r\n";

            $out .= "Accept: $send_header[Accept]\r\n";

            $out .= "User-Agent: {$send_header['User-Agent']}\r\n";

            if(isset($options['modified_since']))

                $out .= "If-Modified-Since: ".gmdate('D, d M Y H:i:s \G\M\T',strtotime($options['modified_since'])) ."\r\n";

            $out .= "Connection: Close\r\n";

            if(isset($url_parts['user']) and isset($url_parts['pass'])) {

                $out .= "Authorization: Basic ".base64_encode($url_parts['user'].':'.$url_parts['pass']) . "\r\n";

            }

            if(isset($options['method']) and $options['method'] == 'post' and $url_parts['query']) {

                $out .= "Content-Type: application/x-www-form-urlencoded\r\n";

                $out .= 'Content-Length: ' . strlen($url_parts['query']) . "\r\n";

                $out .= "\r\n" . $url_parts['query'];

            }

            $out .= "\r\n";

            fwrite($fp, $out);

            while (!feof($fp)) {

                $response .= fgets($fp, 128);

            }

            fclose($fp);

        }

    }

    $headers = array();

    if($info['http_code'] == 404) {

        $body = "";

        $headers['Status'] = 404;

    } else {

        $header_text = substr($response, 0, $info['header_size']);

        $body = substr($response, $info['header_size']);

        foreach(explode("\n",$header_text) as $line) {

            $parts = explode(": ",$line);

            if(count($parts) == 2) $headers[$parts[0]] = chop($parts[1]);

        }

    }

    if(isset($cache_file)) {

        file_put_contents($cache_file, $response);

    }

    if($options['return_info']) return array('headers' => $headers, 'body' => $body, 'info' => $info, 'curl_handle'=>$ch);

    return $body;

} 

//USAGE
$contents = load('http://example.com/rss.xml');