Location: PHPKode > scripts > phpODP Class > phpodp-class/phpodp.inc
<?php

        // REMEMBER TO RENAME TO: phpodp.inc

        // phpODP.inc - Version 1.0 - PHP Class phpODP for use with ODP (dmoz.org) data retrieval
        // Copyright (c) 2000, Ryan Heggem.
        //      URL:    http://www.gren.addr.com/
        //      EMAIL:  hide@address.com
        //
        // Please send questions, comments, whatever to the email address above.
        //
        // A demo of what this class can do can be found at:
        // http://www.gren.addr.com/scripts/PHP/phpODP/directory.php
        //
        // Released under the GNU GPL.
        // http://www.gnu.org/copyleft/gpl.html
        //
        // This program is free software; you can redistribute it and/or
        // modify it under the terms of the GNU General Public License
        // as published by the Free Software Foundation; either version 2
        // of the License, or (at your option) any later version.
        //
        // This program is distributed in the hope that it will be useful,
        // but WITHOUT ANY WARRANTY; without even the implied warranty of
        // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        // GNU General Public License for more details.
        //
        // You should have received a copy of the GNU General Public License
        // along with this program; if not, write to the Free Software
        // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.


        // usage:
        //              require('phpodp.inc');
        //              $odp = new phpODP;
        //              $odp->_init();

        // returns:
        //              [ variable ]            [ type ]        [ description ]
        //              $odp->dirs              array           array of the current dir level chopped up err somethin...
        //              $odp->contents          array           dmoz.org gets split up into sections and put into this array
        //              $odp->page_title        string          the page title of the catagory fetched
        //              $odp->desc_file         string          html <a> tag w/ link to catagory description file if available
        //              $odp->faq_file          string          html <a> tag w/ link to catagory faq file if available
        //              $odp->a2z               string          html <a> tags w/ links to the single lettered catagories if available
        //              $odp->catagories        string          html chunk of the sub-catagory listing
        //              $odp->other_catagories  string          another (?) html chunk of the sub-directory listing
        //              $odp->links             string          html chunk of all the links in the current catagory

        // TODO(s):
        //              1)      make a function to replace this line of code to check/set a cache'd (is that even a word?) version of the current catagory
        //              ^------ SEE TODO#1 IN THE CODE BELOW
        //              2)      add a little search box like the real ODP catagories
        //              3)      add an editors variable (array?) to help list out all the editors of a certain catagory

        class phpODP {

                function _init() {

                        global $SERVER_NAME, $SCRIPT_NAME, $PATH_INFO, $PHP_SELF;

                        if(empty($PATH_INFO)){
                                header('Location: http://' . $SERVER_NAME . '' . $SCRIPT_NAME . '/Computers/');
                        }

                        // misc stuff...
                        $this->dirs = explode('/', preg_replace('|^/(.*)/$|', '\\1', $PATH_INFO));

                        // spit out each section of a dmoz.org catagory into an array
                        // TODO #1: 
                        $this->contents = explode('<hr>', implode('', file('http://dmoz.org' . $PATH_INFO) ) );

                        // get page title
                        eregi('<title>(.*)</title>', $this->contents[0], $tmp_page_title);
                        $this->page_title = $tmp_page_title[1];

                        // check for description and faq files, then set up links to them
                        $this->desc_file = (preg_match('|desc.html|i', $this->contents[0])) ? ' <a href="http://dmoz.org' . $PATH_INFO . 'desc.html">Description</a> ' : '';
                        $this->faq_file = (preg_match('|faq.html|i', $this->contents[0])) ? ' <a href="http://dmoz.org' . $PATH_INFO . 'faq.html">FAQ</a> ' : '';

                        // check for an A-Z catagory listing, then set up links to each one
                        $a2zA = explode(',', strtoupper('a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'));
                        if(preg_match('|/[A-Z]/|i', $this->contents[0])){
                                for($z=0;$z<=25;$z++){
                                        $sfx = ($z != 25) ? ' / ' : '';
                                        $this->a2z .= '<a href="' . $PHP_SELF . $a2zA[$z] . '/">' . $a2zA[$z] . '</a>' . $sfx;
                                }
                        } else{ $this->a2z = ''; }

                        // this chunk of code...
                        //  goes through each array element of $contents to see what's what
                        //   replaces all the dmoz.org relative links with a local version
                        //    sets a <font> tag in <td> tags to make the text in them look nice
                        //     sets <img> tags to point to dmoz.org
                        if(preg_match('|href="/|i', $this->contents[1])){
                                $this->catagories = preg_replace('|href="/(.*)"|im', 'href="' . $SCRIPT_NAME . '/\\1"', preg_replace('|(<td valign=top>)|im', '\\1<font face="Arial, Helvetica" size="2">', preg_replace('|(</td>)|im', '</font>\\1', $this->contents[1])));
                                if(preg_match('|href="/|i', $this->contents[2])){
                                        $this->other_catagories = preg_replace('|href="/(.*)"|im', 'href="' . $SCRIPT_NAME . '/\\1"', preg_replace('|(<td valign=top>)|im', '\\1<font face="Arial, Helvetica" size="2">', preg_replace('|(</td>)|im', '</font>\\1', $this->contents[2])));
                                        if(preg_match('|<li><a href="http://|i', $this->contents[3])){
                                                $this->links = preg_replace('|src="/(.*)"|im', 'src="http://dmoz.org/\\1"', $this->contents[3]);
                                        } else{ $this->links = ''; }
                                } elseif(preg_match('|<li><a href="http://|i', $this->contents[2])){
                                        $this->links = preg_replace('|src="/(.*)"|im', 'src="http://dmoz.org/\\1"', $this->contents[2]);
                                } else{ $this->other_catagories = ''; $this->links = ''; }
                        } elseif(preg_match('|<li><a href="http://|i', $this->contents[1])){
                                $this->links = preg_replace('|src="/(.*)"|im', 'src="http://dmoz.org/\\1"', $this->contents[1]);
                        } else{ $this->catagories = ''; $this->other_catagories = ''; $this->links = ''; }

                }

        }
?>
Return current item: phpODP Class