Location: PHPKode > scripts > Contact Grabber > contact-grabber/aol.class.php
<?php

    /************************************************************************************************
     * AOL.com Contact List Grabber                                                                 *
     * Version 1.0                                                                                  *
     * Released 1th June, 2007                                                                      *
     * Author: Ma'moon Al-akash ( hide@address.com )                                                *
     *                                                                                              *
     * 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.              *
     ************************************************************************************************/



    // where to put the cookie file ...
    define( 'CPATH', $_SERVER['DOCUMENT_ROOT'].'contactgrabber/csvUpload/' );

    class grabAol extends baseFunction 
    {

        var $_username;
        var $_password;

        /**
         * Constructor of the class to initialize the privates
         * @param $username, the username for the aol account
         * @param $password, the password for the aol account
         * @return VOID, only used to initialize the privates
         */
        function grabAol( $username, $password ) {

            $username = trim( $username );
            $password = trim( $password );
            if( empty( $username ) || empty( $password ) ) {
                die( 'Please fill all the fields' );
            }
            $this->_setUsername( $username );
            $this->_setPassword( $password );
        }

        /**
         * @param $username, the login name of the target AOL account
         * @return VOID, nothing to be returned, only initialize $this->_username
         */
        function _setUsername( $username ) {
            $this->_username = $username;
        }

        /**
         * @param $password, the password of the target AOL account
         * @return VOID, nothing to be returned, only initialize $this->_password
         */
        function _setPassword( $password ) {
            $this->_password = $password;
        }


        /**
         * Returns username of the AOL account ( $this->_username )
         * @return String, $this->_username
         */
        function _getUsername() {
            return $this->_username;
        }

        /**
         * Returns password of the AOL account ( $this->_password )
         * @return String, $this->_password
         */
        function _getPassword() {
            return $this->_password;
        }
        
        /**
         * Grabs the Contact List from the target AOL account
         * @return Array, an array that contains the imported contact list from aol.com
         */
        function getContactList() { 
            $cookieFile = CPATH.$this->_getUsername().'_aol_cookiejar.txt';
            //incase this user has a cookies file in our cookies directory then lets remove
            // it before starting the whole process or otherwise it won't work!!
            if( file_exists( CPATH.$this->_getUsername().'_aol_cookiejar.txt' ) ) {
                $this->_rmFile( CPATH.$this->_getUsername().'_aol_cookiejar.txt' );
            }
            $ch     = curl_init();
            // try to login using the access that has been granted from the user ...
            curl_setopt( $ch, CURLOPT_URL, 'http://my.screenname.aol.com/_cqr/login/login.psp?sitedomain=sns.webmail.aol.com&authLev=2&siteState=ver%3A2%7Cac%3AWS%7Cat%3ASNS%7Cld%3Awebmail.aol.com%7Cuv%3AAOL%7Clc%3Aen-us&lang=en&locale=us&seamless=novl' );
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
            curl_setopt($ch, CURLOPT_COOKIEFILE,$cookieFile);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            $return     = curl_exec( $ch );
        
            $data       = $this->_parseContent( '/<form name="AOLLoginForm"(.*?)<\/form>/s', $return );
            $hidden     = explode( '<input type="hidden"', $data[1][0] );
            unset( $hidden[0] ); //remove the action since we don't really need it here
            curl_setopt($ch, CURLOPT_URL, 'https://my.screenname.aol.com/_cqr/login/login.psp');
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
            $uname      = 'loginId='.urlencode( $this->_getUsername() );
            $upass      = 'password='.urlencode( $this->_getPassword() );
            $postFields     = '';
            foreach( $hidden as $field ) {
                $field      = trim( $field );
                $tmp        = explode( ' ', $field );
                $removal    = array( 'name=', 'value=', '"', '>', '</div' );
                $tmp[0]     = str_replace( $removal, '', $tmp[0] );
                $tmp[1]     = str_replace( $removal, '', $tmp[1] );
                $postFields     .= trim($tmp[0].'='.$tmp[1]).'&';
                unset( $tmp );
            }
            $postFields .= $uname.'&'.$upass;
            curl_setopt($ch, CURLOPT_POST, 2);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
            $return         = curl_exec( $ch );
            $logIn          = $this->_parseContent( '/LoginSuccess.aspx(.*?)\'/s', $return );
            $loginParts         = explode( '&', $logIn[1][0] );
            $targetSuccessUrl   = '';
            foreach( $loginParts as $part ) {
                $tmp = explode( '=', trim( $part ) );
                if( $tmp[0] == 'siteState' ) {
                    $tmp[1] = urlencode( $tmp[1] );
                }
                $targetSuccessUrl .= $tmp[0].'='.$tmp[1].'&';
            }
            $targetSuccessUrl   = substr_replace( $targetSuccessUrl , '', -1 );
            $loginSuccessUrl    = 'http://webmail.aol.com/_cqr/LoginSuccess.aspx'.$targetSuccessUrl;
             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_URL, $loginSuccessUrl);
            curl_setopt($ch, CURLOPT_REFERER, $loginSuccessUrl );
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
            curl_setopt($ch, CURLOPT_COOKIEFILE,$cookieFile);

            $successPath        = curl_exec( $ch );
            $tmpSuccessPath     = $this->_parseContent( '/ClickHereMessage(.*?)Try Again/s', $successPath );
            $gSuccessPath       = $this->_parseContent( '/webmail.aol.com(.*?)target/s', $tmpSuccessPath[1][0]);
            $path           = 'http://webmail.aol.com';
            $gSuccessfull       = trim( $gSuccessPath[1][0] );
            $path           .= str_replace( '"', '', $gSuccessfull );
            curl_setopt( $ch, CURLOPT_URL, $path );
             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 0 );
            
            // by here we have successfully logged in
            $weAreIn        = curl_exec( $ch );

            // from this point we are trying to go to the contacts page
            $homePage       = $this->_parseContent( '/padding(.*?)true/s', $weAreIn );
            $homePageLink       = ''.$homePage[0][0];
            $landingPageUrl     = $this->_parseContent( '/http(.*?)true/s', $homePageLink );
            
            // now go to the landing page
            $landingPageSubUrl  = $this->_parseContent( '/gSuccessPath(.*?)var/s', $landingPageUrl[0][0] );
            $landingPageSubUrl  = str_replace( array( '=', ' ', '"', ';' ), '', $landingPageSubUrl[1][0] );
            $landingPageSubUrl  = str_replace( 'Suite.aspx', '', $landingPageSubUrl );
            curl_setopt( $ch, CURLOPT_URL, 'http://webmail.aol.com'.trim( $landingPageSubUrl ).'Lite/ContactList.aspx?folder=New%20Mail&showUserFolders=False' );
            $contactsPage       = curl_exec( $ch );

            //we need the value of the "user" element in order to proceed
            $firstUserPattern   = $this->_parseContent( '/ProcessCommand(.*?)toolbarType/s', $contactsPage );
            $secondUserPattern  = $this->_parseContent( '/\.com(.*?)class/s', $firstUserPattern[1][0] );
            $userArray      = explode( ',', $secondUserPattern[1][0] );
            $user           = str_replace( array( '\'', ')', ';', '"' ), '', $userArray[1] );
            
            // now we need to get all the pages that contains the contacts
            // am not navigating through the whole pages, but rather i am using the print
            // functionality that AOL is providing for their users in order to get the whole
            // bunch of contacts in one single step.
            curl_setopt( $ch, CURLOPT_URL, 'http://webmail.aol.com/'.trim( $landingPageSubUrl ).'Lite/addresslist-print.aspx?command=all&sort=FirstLastNick&sortDir=Ascending&nameFormat=FirstLastNick&user='.$user );
             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            $contactsRecords    = curl_exec( $ch );
            
            // ok, now we have the contacts bunch and we need to filter them ...
            $firstPhaseFilter   = $this->_parseContent( '/fullName(.*?)contactSeparator/s',$contactsRecords );
            $contactList        = array();
            foreach( $firstPhaseFilter[0] as $value ) {
                $value      = ''.$value; //don't ask me why i did that, it just didn't work except like this!!!
                // filter contact's full name
                $contactName    = $this->_parseContent( '/fullName">(.*?)<\/span/s', $value );
                // filter contact's email
                $contactEmail   = $this->_parseContent( '/<span>Email 1:<\/span> <span>(.*?)<\/span>/s', $value);
                $result['name'][] = strip_tags($contactName[1][0]);
                $result['email'][] = $contactEmail[1][0];
                
            }

            // Clean up and finalize everything ...
            $this->_rmFile( $cookieFile );
            
            return $result;
        }

        
    }
?>
Return current item: Contact Grabber