WordPress.org

Plugin Directory

Changeset 629548


Ignore:
Timestamp:
11/25/12 01:22:24 (17 months ago)
Author:
Otto42
Message:

fix new beta-2 tag, as dllh tagged from trunk instead of the branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tumblr-importer/tags/newapi-beta-2/tumblr-importer.php

    r558014 r629548  
    66Author: wordpressdotorg 
    77Author URI: http://wordpress.org/ 
    8 Version: 0.6 
     8Version: 0.7 
    99License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 
    1010*/ 
     
    5050        add_action( 'tumblr_importer_metadata', array( $this, 'tumblr_importer_metadata' ) ); 
    5151        add_filter( 'tumblr_importer_format_post', array( $this, 'filter_format_post' ) ); 
     52        add_filter( 'tumblr_importer_get_consumer_key', array( $this, 'get_consumer_key' ) ); 
    5253        add_filter( 'wp_insert_post_empty_content', array( $this, 'filter_allow_empty_content' ), 10, 2 ); 
    5354        parent::__construct(); 
     
    6162        if ( !isset($this->error) ) $this->error = null; 
    6263         
    63         if ( isset( $_POST['email'] ) && isset( $_POST['password'] ) ) { 
     64        $this->consumerkey = defined ('TUMBLR_CONSUMER_KEY') ? TUMBLR_CONSUMER_KEY : ( !empty($_POST['consumerkey']) ? $_POST['consumerkey'] : $this->consumerkey ); 
     65        $this->secretkey = defined ('TUMBLR_SECRET_KEY') ? TUMBLR_SECRET_KEY : ( !empty($_POST['secretkey']) ? $_POST['secretkey'] : $this->secretkey ); 
     66         
     67        // if we have access tokens, verify that they work 
     68        if ( !empty( $this->access_tokens ) ) { 
     69            // TODO 
     70        } else if ( isset( $_GET['oauth_verifier'] ) ) { 
     71            $this->check_permissions(); 
     72        } else if ( !empty( $this->consumerkey ) && !empty( $this->secretkey ) ) { 
    6473            $this->check_credentials(); 
    65         }    
     74        } 
    6675        if ( isset( $_POST['blogurl'] ) ) { 
    6776            $this->start_blog_import(); 
     
    98107        <div class='wrap'><?php echo screen_icon(); ?> 
    99108        <h2><?php _e('Import Tumblr', 'tumblr-importer'); ?></h2> 
     109        <?php if ( empty($this->request_tokens) ) { ?> 
    100110        <p><?php _e('Howdy! This importer allows you to import posts from your Tumblr account into your WordPress site.', 'tumblr-importer'); ?></p> 
    101         <p><?php _e('Firstly, you need to provide your email and password for Tumblr, so that WordPress can access your account.', 'tumblr-importer'); ?></p> 
     111        <p><?php _e("First, you will need to create an 'app' on Tumblr. The app provides a connection point between your blog and Tumblr's servers.", 'tumblr-importer'); ?></p> 
     112         
     113        <p><?php _e('To create an app, visit this page:', 'tumblr-importer'); ?><a href="http://www.tumblr.com/oauth/apps">http://www.tumblr.com/oauth/apps</a></p> 
     114        <ol> 
     115        <li><?php _e('Click the large green "Register Application" button.','tumblr-importer'); ?></li> 
     116        <li><?php _e('You need to fill in the "Application Name", "Application Website", and "Default Callback URL" fields. All the rest can be left blank.','tumblr-importer'); ?></li> 
     117        <li><?php _e('For the "Application Website" and "Default Callback URL" fields, please put in this URL: ','tumblr-importer'); echo '<strong>'.home_url().'</strong>'; ?></li> 
     118        <li><?php _e('Note: It is important that you put in that URL <em>exactly as given</em>.','tumblr-importer'); ?></li> 
     119        </ol> 
     120         
     121        <p><?php _e('After creating the application, copy and paste the "OAuth Consumer Key" and "Secret Key" into the given fields below.', 'tumblr-importer'); ?></p> 
     122                 
    102123        <form action='?import=tumblr' method='post'> 
    103         <?php wp_nonce_field( 'tumblr-import' ) ?> 
    104124            <table class="form-table"> 
    105125                <tr> 
    106                     <th scope="row"><label for='email'><?php _e('Email:','tumblr-importer'); ?></label></label></th> 
    107                     <td><input type='text' class="regular-text" name='email' value='<?php if (isset($this->email)) echo esc_attr($this->email); ?>' /></td> 
     126                    <th scope="row"><label for='consumerkey'><?php _e('OAuth Consumer Key:','tumblr-importer'); ?></label></label></th> 
     127                    <td><input type='text' class="regular-text" name='consumerkey' value='<?php if (isset($this->consumerkey)) echo esc_attr($this->consumerkey); ?>' /></td> 
    108128                </tr> 
    109129                <tr> 
    110                     <th scope="row"><label for='email'><?php _e('Password:','tumblr-importer'); ?></label></label></th> 
    111                     <td><input type='password' class="regular-text" name='password' value='<?php if (isset($this->password)) echo esc_attr($this->password); ?>' /></td> 
     130                    <th scope="row"><label for='secretkey'><?php _e('Secret Key:','tumblr-importer'); ?></label></label></th> 
     131                    <td><input type='text' class="regular-text" name='secretkey' value='<?php if (isset($this->secretkey)) echo esc_attr($this->secretkey); ?>' /></td> 
    112132                </tr> 
    113133            </table> 
     
    117137        </form> 
    118138        </div> 
     139        <?php } else { 
     140            ?> 
     141            <p><?php _e("Everything seems to be in order, so now you need to tell Tumblr to allow the plugin to access your account.", 'tumblr-importer'); ?></p> 
     142            <p><?php _e("To do this, click the Authorize link below. You will be redirected back to this page when you've granted the permission.", 'tumblr-importer'); ?></p> 
     143 
     144            <p><a href="<?php echo $this->authorize_url; ?>"><?php _e('Authorize the Application','tumblr-importer'); ?></a></p> 
    119145        <?php 
    120     } 
    121      
    122     function check_credentials() { 
    123         check_admin_referer( 'tumblr-import' ); 
    124  
    125         $this->email = $_POST['email']; 
    126         $this->password = $_POST['password']; 
    127  
    128         if ( !is_email( $_POST['email'] ) ) { 
    129             $error = __("This doesn't appear to be a valid email address. Please check it and try again.",'tumblr-importer'); 
    130             $this->error = $error; 
    131         } 
    132  
    133         $blogs = $this->get_blogs($this->email, $this->password); 
     146        } 
     147    } 
     148     
     149    function check_credentials() {               
     150        if ( !( $response = $this->oauth_get_request_token() ) ) 
     151            return; 
     152         
     153        if (  is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { 
     154            $this->error = __('Tumblr returned an error: ', 'tumblr-importer') . wp_remote_retrieve_response_code( $response ) .' '. wp_remote_retrieve_body( $response ); 
     155            return; 
     156        } 
     157        // parse the body 
     158        $this->request_tokens = array(); 
     159        wp_parse_str( wp_remote_retrieve_body( $response ), $this->request_tokens); 
     160        $this->authorize_url = add_query_arg(array( 
     161            'oauth_token' => $this->request_tokens ['oauth_token'],  
     162            'oauth_callback' => urlencode( self_admin_url('admin.php?import=tumblr') ), 
     163            ), 'http://www.tumblr.com/oauth/authorize'); 
     164 
     165        return; 
     166    } 
     167     
     168    function check_permissions() { 
     169        $verifier = $_GET['oauth_verifier']; 
     170        $token = $_GET['oauth_token']; 
     171         
     172        // get the access_tokens 
     173        $url = 'http://www.tumblr.com/oauth/access_token'; 
     174         
     175        $params = array('oauth_consumer_key' => $this->consumerkey, 
     176                "oauth_nonce" => time().rand(), 
     177                "oauth_timestamp" => time(), 
     178                "oauth_token" => $this->request_tokens['oauth_token'], 
     179                "oauth_signature_method" => "HMAC-SHA1", 
     180                "oauth_verifier" => $verifier, 
     181                "oauth_version" => "1.0", 
     182                ); 
     183 
     184        $params['oauth_signature'] = $this->oauth_signature(array($this->secretkey,$this->request_tokens['oauth_token_secret']), 'GET', $url, $params); 
     185 
     186        $url = add_query_arg( array_map('urlencode', $params), $url); 
     187        $response = wp_remote_get( $url );       
     188        unset($this->request_tokens);        
     189        if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { 
     190            $this->error = __('Tumblr returned an error: ', 'tumblr-importer') . wp_remote_retrieve_response_code( $response ) .' '. wp_remote_retrieve_body( $response ); 
     191            return; 
     192        } else { 
     193            $this->access_tokens = array(); 
     194            wp_parse_str( wp_remote_retrieve_body( $response ), $this->access_tokens); 
     195        } 
     196         
     197        // try to get the list of blogs on the account 
     198         
     199        $blogs = $this->get_blogs(); 
    134200        if ( is_wp_error ($blogs) ) { 
    135201            $this->error = $blogs->get_error_message(); 
     
    137203            $this->blogs = $blogs; 
    138204        } 
     205        return;  
    139206    } 
    140207     
     
    271338         
    272339        $this->error=null; 
    273          
    274340        if ( !empty( $this->blog[$url]['progress'] ) ) { 
    275341            $done = false; 
     
    289355                    break; 
    290356                case 'pages': 
    291                     $this->do_pages_import($url); 
     357// TODO Tumblr's new API has no way to retrieve pages that I can find 
     358                    $this->blog[$url]['progress'] = 'finish'; 
     359                    //$this->do_pages_import($url); 
    292360                    break; 
    293361                case 'finish': 
     
    344412                do_action( 'tumblr_importing_post', $post ); 
    345413                $id = wp_insert_post( $post ); 
    346                  
     414 
    347415                if ( !is_wp_error( $id ) ) { 
    348416                    $post['ID'] = $id; // Allows for the media importing to wp_update_post() 
     
    386454        else $count = TUMBLR_MAX_IMPORT; 
    387455 
     456        add_filter( 'tumblr_post_type', function() { return 'draft'; } ); 
    388457        $imported_posts = $this->fetch_posts($url, $start, $count, $this->email, $this->password, 'draft' ); 
    389458 
     
    424493        } 
    425494    } 
    426      
     495 
    427496    function do_pages_import($url) { 
    428497        $start = $this->blog[$url]['pages_complete']; 
     
    480549            $filename = basename($path); 
    481550        } 
    482          
    483551        // Download file to temp location 
    484552        $tmp = download_url( $source ); 
     
    547615            break; 
    548616         
    549             case 'audio': 
     617        case 'audio': 
    550618            // Handle Tumblr Hosted Audio 
    551619            if ( isset( $post['media']['audio'] ) ) { 
     
    597665    } 
    598666     
     667     
     668    /**  
     669     * Get a request token from the OAuth endpoint (also serves as a test) 
     670     * 
     671     */ 
     672     function oauth_get_request_token() { 
     673        if ( empty($this->consumerkey) || empty ($this->secretkey) ) 
     674            return false; 
     675         
     676        $url = 'http://www.tumblr.com/oauth/request_token'; 
     677      
     678        $params = array('oauth_callback' => urlencode( self_admin_url('admin.php?import=tumblr') ), 
     679                'oauth_consumer_key' => $this->consumerkey, 
     680                "oauth_version" => "1.0", 
     681                "oauth_nonce" => time(), 
     682                "oauth_timestamp" => time(), 
     683                "oauth_signature_method" => "HMAC-SHA1", 
     684                ); 
     685         
     686        $params['oauth_signature'] = $this->oauth_signature(array($this->secretkey,''), 'POST', $url, $params); 
     687         
     688        $response = wp_remote_post( $url, array('body' => $params)); 
     689         
     690        return $response; 
     691     } 
     692      
    599693    /** 
    600694     * Fetch a list of blogs for a user 
     
    604698     * @returns array of blog info or a WP_Error 
    605699     */ 
    606     function get_blogs($email, $password) { 
    607         $url = 'http://www.tumblr.com/api/authenticate'; 
    608  
    609         $params = array( 
    610             'email'=>$email, 
    611             'password'=>$password, 
    612         ); 
    613         $options = array( 'body' => $params ); 
    614  
    615         // fetch the list 
    616         $out = wp_remote_post($url,$options); 
    617          
    618         switch ( wp_remote_retrieve_response_code( $out ) ) { 
     700    function get_blogs() { 
     701        $url = 'http://api.tumblr.com/v2/user/info'; 
     702        $response = $this->oauth_get_request($url); 
     703         
     704        switch ( $response->meta->status ) { 
    619705            case 403: // Bad Username / Password 
    620706                do_action( 'tumblr_importer_handle_error', 'get_blogs_403' ); 
    621                 return new WP_Error('tumblr_error', __('Tumblr says that the username and password you provided were not valid. Please check you entered them correctly and try to connect again.', 'tumblr-importer' ) ); 
    622                 break; 
     707                return new WP_Error('tumblr_error', __('Tumblr says that the the app is not authorized. Please check the settings and try to connect again.', 'tumblr-importer' ) ); 
    623708            case 200: // OK 
    624709                break; 
    625710            default: 
    626                 $_error = sprintf( __( 'Tumblr replied with an error: %s', 'tumblr-importer' ), wp_remote_retrieve_body( $out ) ); 
    627                 do_action( 'tumblr_importer_handle_error', 'response_' . wp_remote_retrieve_response_code( $out ) ); 
     711                $_error = sprintf( __( 'Tumblr replied with an error: %s', 'tumblr-importer' ), $response->meta->msg ); 
     712                do_action( 'tumblr_importer_handle_error', 'response_' . $response->meta->status ); 
    628713                return new WP_Error('tumblr_error', $_error ); 
    629              
    630         } 
    631         $body = wp_remote_retrieve_body($out); 
    632  
    633         // parse the XML into something useful 
    634         $xml = simplexml_load_string($body); 
     714        } 
    635715 
    636716        $blogs = array(); 
    637  
    638         if (!isset($xml->tumblelog)) { 
    639             new WP_Error('tumblr_error', __('No blog information found for this account. ', 'tumblr-importer' )); 
    640             do_action( 'tumblr_importer_handle_error', 'no_blog_found' ); 
    641         } 
    642  
    643         $tblogs = $xml->tumblelog; 
    644         foreach ($tblogs as $tblog) { 
     717        foreach ( $response->response->user->blogs as $tblog ) { 
    645718            $blog = array(); 
    646  
    647             if ((string) $tblog['is-admin'] != '1') continue; // we'll only allow admins to import their blogs 
    648  
    649             $blog['title'] = (string) $tblog['title']; 
    650             $blog['posts'] = (int) $tblog['posts']; 
    651             $blog['drafts'] = (int) $tblog['draft-count']; 
    652             $blog['queued'] = (int) $tblog['queue-count']; 
    653             $blog['avatar'] = (string) $tblog['avatar-url']; 
    654             $blog['url'] = (string) $tblog['url']; 
    655             $blog['name'] = (string) $tblog['name']; 
     719            $blog['title'] = (string) $tblog->title; 
     720            $blog['posts'] = (int) $tblog->posts; 
     721            $blog['drafts'] = (int) $tblog->drafts; 
     722            $blog['queued'] = (int) $tblog->queue; 
     723            $blog['avatar'] = ''; 
     724            $blog['url'] = (string) $tblog->url; 
     725            $blog['name'] = (string) $tblog->name; 
    656726 
    657727            $blogs[] = $blog; 
    658728        } 
    659  
    660         return $blogs; 
     729        $this->blogs = $blogs; 
     730        return $this->blogs; 
     731    } 
     732 
     733    function get_consumer_key() { 
     734        return $this->consumerkey; 
    661735    } 
    662736 
     
    669743     * @returns false on error, array of posts on success 
    670744     */ 
    671     function fetch_posts($url, $start=0, $count = 50, $email = null, $password = null, $state = null) { 
    672         $url = trailingslashit($url).'api/read'; 
    673         $params = array( 
    674             'start'=>$start, 
    675             'num'=>$count, 
    676         ); 
    677         if ( !empty($email) && !empty($password) ) { 
    678             $params['email'] = $email; 
    679             $params['password'] = $password; 
    680         } 
    681  
    682         if ( !empty($state) ) $params['state'] = $state; 
    683  
    684         $options = array( 'body' => $params ); 
    685  
    686         // fetch the posts 
    687         $out = wp_remote_post($url,$options); 
    688         if (wp_remote_retrieve_response_code($out) != 200) return false; 
    689         $body = wp_remote_retrieve_body($out); 
    690  
    691         // parse the XML into something useful 
    692         $xml = simplexml_load_string($body); 
    693  
    694         if (!isset($xml->posts->post)) return false; 
    695  
    696         $tposts = $xml->posts; 
     745    function fetch_posts($url, $start=0, $count = 50, $email = null, $password = null, $state = null ) { 
     746        $url = parse_url( $url, PHP_URL_HOST ); 
     747        $post_type = apply_filters( 'tumblr_post_type', '' ); 
     748        $url = trailingslashit( "http://api.tumblr.com/v2/blog/$url/posts/$post_type" ); 
     749         
     750        do_action( 'tumblr_importer_pre_fetch_posts' ); 
     751 
     752        // These extra params hose up the auth if passed for oauth requests e.g. for drafts, so use them only for normal posts. 
     753        if ( '' == $post_type ) { 
     754            $params = array( 
     755                'offset'  => $start, 
     756                'limit'   => $count, 
     757                'api_key' => apply_filters( 'tumblr_importer_get_consumer_key', '' ), 
     758            ); 
     759            $url = add_query_arg( $params, $url ); 
     760        } 
     761 
     762        $response = $this->oauth_get_request($url); 
     763 
     764        switch ( $response->meta->status ) { 
     765            case 200: // OK 
     766                break; 
     767            default: 
     768                $_error = sprintf( __( 'Tumblr replied with an error: %s', 'tumblr-importer' ), $response->meta->msg ); 
     769                do_action( 'tumblr_importer_handle_error', 'response_' . $response->meta->status ); 
     770                return new WP_Error('tumblr_error', $_error ); 
     771        } 
     772 
    697773        $posts = array(); 
    698         foreach($tposts->post as $tpost) { 
     774        $tposts = $response->response->posts; 
     775        foreach( $tposts as $tpost ) { 
    699776            $post = array(); 
    700             $post['tumblr_id'] = (string) $tpost['id']; 
    701             $post['tumblr_url'] = (string) $tpost['url-with-slug']; 
    702             $post['post_date'] = date( 'Y-m-d H:i:s', strtotime ( (string) $tpost['date'] ) ); 
    703             $post['post_date_gmt'] = date( 'Y-m-d H:i:s', strtotime ( (string) $tpost['date-gmt'] ) ); 
    704             $post['post_name'] = (string) $tpost['slug']; 
    705             if ( isset($tpost['private']) ) $post['private'] = (string) $tpost['private']; 
    706             if ( isset($tpost->{'tag'}) ) { 
     777            $post['tumblr_id'] = (string) $tpost->id; 
     778            $post['tumblr_url'] = (string) $tpost->post_url; 
     779            $post['post_date'] = date( 'Y-m-d H:i:s', strtotime ( (string) $tpost->date ) ); 
     780            $post['post_date_gmt'] = date( 'Y-m-d H:i:s', strtotime ( (string) $tpost->date ) ); 
     781            $post['post_name'] = (string) $tpost->slug; 
     782            if ( 'private' == $tpost->state )  
     783                $post['private'] = (string) $tpost->state; 
     784            if ( isset( $tpost->tags ) ) { 
    707785                $post['tags_input'] = array(); 
    708                 foreach ( $tpost->{'tag'} as $tag ) 
     786                foreach ( $tpost->tags as $tag ) 
    709787                    $post['tags_input'][] = rtrim( (string) $tag, ','); // Strip trailing Commas off it too. 
    710788            } 
    711789 
    712             // set the various post info for each special format tumblr offers 
    713             // TODO reorg this as needed 
    714             switch ((string) $tpost['type']) { 
     790            switch ( (string) $tpost->type ) { 
    715791                case 'photo': 
    716792                    $post['format'] = 'image'; 
    717                     $post['media']['src'] = (string) $tpost->{'photo-url'}[0]; 
    718                     $post['media']['link'] =(string) $tpost->{'photo-link-url'}; 
    719                     $post['media']['width'] = (string) $tpost['width']; 
    720                     $post['media']['height'] = (string) $tpost['height']; 
    721                     $post['post_content'] = (string) $tpost->{'photo-caption'}; 
    722                     if ( !empty( $tpost->{'photoset'} ) ) { 
     793                    $post['media']['src'] = (string) $tpost->photos[0]->original_size->url; 
     794                    $post['media']['link'] = '';//TODO: Find out what to use here.(string) $tpost->{'photo-link-url'}; 
     795                    $post['media']['width'] = (string) $tpost->photos[0]->original_size->width; 
     796                    $post['media']['height'] = (string) $tpost->photos[0]->original_size->height; 
     797                    $post['post_content'] = (string) $tpost->caption; 
     798                    if ( ! empty( $tpost->photos ) ) { 
    723799                        $post['format'] = 'gallery'; 
    724                         foreach ( $tpost->{'photoset'}->{'photo'} as $photo ) { 
     800                        foreach ( $tpost->photos as $photo ) { 
    725801                            $post['gallery'][] = array ( 
    726                                 'src'=>$photo->{'photo-url'}[0], 
    727                                 'width'=>$photo['width'], 
    728                                 'height'=>$photo['height'], 
    729                                 'caption'=>$photo['caption'], 
     802                                'src'     => $photo->original_size->url, 
     803                                'width'   => $photo->original_size->width, 
     804                                'height'  => $photo->original_size->height, 
     805                                'caption' => $photo->caption, 
    730806                            ); 
    731807                        } 
     
    734810                case 'quote': 
    735811                    $post['format'] = 'quote'; 
    736                     $post['post_content'] = (string) $tpost->{'quote-text'}; 
    737                     $post['post_content'] .= "\n\n" . (string) $tpost->{'quote-source'}; 
     812                    $post['post_content'] = '<blockquote>' . (string) $tpost->text . '</blockquote>'; 
     813                    $post['post_content'] .= "\n\n<div class='attribution'>" . (string) $tpost->source . '</div>'; 
    738814                    break; 
    739815                case 'link': 
    740816                    $post['format'] = 'link'; 
    741                     $linkurl = (string) $tpost->{'link-url'}; 
    742                     $linktext = (string) $tpost->{'link-text'}; 
    743                     $post['post_content'] = "<a href='{$linkurl}'>{$linktext}</a>"; 
    744                     $post['post_title'] = (string) $tpost->{'link-description'}; 
    745                     break; 
    746                 case 'conversation': 
     817                    $linkurl = (string) $tpost->url; 
     818                    $linktext = (string) $tpost->title; 
     819                    $post['post_content'] = "<a href='$linkurl'>$linktext</a>"; 
     820                    if ( ! empty( $tpost->description ) ) 
     821                        $post['post_content'] .= '<div class="link_description">' . (string) $tpost->description . '</div>'; 
     822                    $post['post_title'] = (string) $tpost->title; 
     823                    break; 
     824                case 'chat': 
    747825                    $post['format'] = 'chat'; 
    748                     $post['post_title'] = (string) $tpost->{'conversation-title'}; 
    749                     $post['post_content'] = (string) $tpost->{'conversation-text'}; 
     826                    $post['post_title'] = (string) $tpost->title; 
     827                    $post['post_content'] = (string) $tpost->body; 
    750828                    break; 
    751829                case 'audio': 
    752830                    $post['format'] = 'audio'; 
    753                     $post['media']['filename'] = basename( (string) $tpost->{'authorized-download-url'} ) . '.mp3'; 
    754                     $post['media']['audio'] = (string) $tpost->{'authorized-download-url'} .'?plead=please-dont-download-this-or-our-lawyers-wont-let-us-host-audio'; 
    755                     $post['post_content'] = (string) $tpost->{'audio-player'} . "\n" . (string) $tpost->{'audio-caption'}; 
    756                     if ( !empty($tpost->{'id3-artist'}) ) 
    757                         $post['post_title'] = $tpost->{'id3-artist'} . ' - ' . $tpost->{'id3-title'}; 
     831                    $post['media']['filename'] = basename( (string) $tpost->audio_url ); 
     832                    // If no .mp3 extension, add one so that sideloading works. 
     833                    if ( ! preg_match( '/\.mp3$/', $post['media']['filename'] ) ) 
     834                        $post['media']['filename'] .= '.mp3'; 
     835                    $post['media']['audio'] = (string) $tpost->audio_url .'?plead=please-dont-download-this-or-our-lawyers-wont-let-us-host-audio'; 
     836                    $post['post_content'] = (string) $tpost->player . "\n" . (string) $tpost->caption; 
    758837                    break; 
    759838                case 'video': 
    760839                    $post['format'] = 'video'; 
    761840                    $post['post_content'] = ''; 
    762                     if ( is_serialized( (string) $tpost->{'video-source'} ) ) { 
    763                         if ( preg_match('|\'(http://.*video_file.*)\'|U', $tpost->{'video-player'}[0], $matches) ) { 
    764                             $post['media']['video'] = $matches[1]; 
    765                             $val = unserialize( (string) $tpost->{'video-source'} ); 
    766                             $vidmeta = $val['o1']; 
    767                             $post['media']['filename'] = basename($post['media']['video']) . '.' . $vidmeta['extension']; 
    768                             $post['media']['width'] = $vidmeta['width']; 
    769                             $post['media']['height'] = $vidmeta['height']; 
    770                         } 
    771                     } else if ( false !== strpos( (string) $tpost->{'video-source'}, 'embed' ) ) { 
    772                         if ( preg_match_all('/<embed (.+?)>/', (string) $tpost->{'video-source'}, $matches) ) { 
     841 
     842                    $video = array_shift( $tpost->player ); 
     843                 
     844                    if ( false !== strpos( (string) $video->embed_code, 'embed' ) ) { 
     845                        if ( preg_match_all('/<embed (.+?)>/', (string) $video->embed_code, $matches) ) { 
    773846                            foreach ($matches[1] as $match) { 
    774                                 foreach ( wp_kses_hair($match, array('http')) as $attr) 
    775                                     $embed[$attr['name']] = $attr['value']; 
     847                                foreach ( wp_kses_hair( $match, array( 'http' ) ) as $attr ) 
     848                                    $embed[ $attr['name'] ] = $attr['value']; 
    776849                            } 
    777                              
     850 
    778851                            // special case for weird youtube vids 
    779                             $embed['src'] = preg_replace('|http://www.youtube.com/v/([a-zA-Z0-9_]+).*|i', 'http://www.youtube.com/watch?v=$1', $embed['src']); 
    780                              
     852                            $embed['src'] = preg_replace( '|http://www.youtube.com/v/([a-zA-Z0-9_]+).*|i', 'http://www.youtube.com/watch?v=$1', $embed['src'] ); 
     853 
    781854                            // TODO find other special cases, since tumblr is full of them 
    782                              
    783855                            $post['post_content'] = $embed['src']; 
    784856                        } 
     857 
    785858                        // Sometimes, video-source contains iframe markup. 
    786                         if ( preg_match( '/<iframe/', $tpost->{'video-source'} ) ) { 
    787                             $embed['src'] = preg_replace( '|<iframe.*src="http://www.youtube.com/embed/([a-zA-Z0-9_\-]+)\??.*".*</iframe>|', 'http://www.youtube.com/watch/?v=$1', $tpost->{'video-source'} ); 
     859                        if ( preg_match( '/<iframe/', $video->embed_code ) ) { 
     860                            $embed['src'] = preg_replace( '|<iframe.*src="http://www.youtube.com/embed/([a-zA-Z0-9_\-]+)\??.*".*</iframe>|', 'http://www.youtube.com/watch?v=$1', $video->embed_code ); 
    788861                            $post['post_content'] = $embed['src']; 
    789862                        } 
    790                      
     863                    } elseif ( preg_match( '/<iframe.*vimeo/', $video->embed_code ) ) { 
     864                        $embed['src'] = preg_replace( '|<iframe.*src="(http://player.vimeo.com/video/([a-zA-Z0-9_\-]+))\??.*".*</iframe>.*|', 'http://vimeo.com/$2', $video->embed_code ); 
     865                        $post['post_content'] = $embed['src']; 
    791866                    } else { 
    792                         // @todo: See if the video-source is going to be oEmbed'able before adding the flash player 
    793                         // 1 Seems to be "original" size, with 0 being set otherwise. 
    794                         $post['post_content'] .= isset($tpost->{'video-player'}[1]) ? $tpost->{'video-player'}[1] : (string) $tpost->{'video-player'}[0]; 
     867                        // @todo: See if the video source is going to be oEmbed'able before adding the flash player 
     868                        $post['post_content'] .= $video->embed_code; 
    795869                    } 
    796                     $post['post_content'] .= "\n" . (string) $tpost->{'video-caption'}; 
     870     
     871                    $post['post_content'] .= "\n" . (string) $tpost->caption; 
    797872                    break; 
    798873                case 'answer': 
    799                     $post['post_title'] = (string) $tpost->{'question'}; 
    800                     $post['post_content'] = (string) $tpost->{'answer'}; 
     874                    // TODO: Include asking_name and asking_url values? 
     875                    $post['post_title'] = (string) $tpost->question; 
     876                    $post['post_content'] = (string) $tpost->answer; 
    801877                    break; 
    802878                case 'regular': 
     879                case 'text': 
    803880                default: 
    804                     $post['post_title'] = (string) $tpost->{'regular-title'}; 
    805                     $post['post_content'] = (string) $tpost->{'regular-body'}; 
     881                    $post['post_title'] = (string) $tpost->title; 
     882                    $post['post_content'] = (string) $tpost->body; 
    806883                    break; 
    807884            } 
     
    884961    } 
    885962     
     963     
     964    /** 
     965     * OAuth Signature creation 
     966     */ 
     967    function oauth_signature($secret, $method, $url, $params = array()) { 
     968        uksort($params, 'strcmp'); 
     969        foreach ($params as $k => $v) { 
     970            $pairs[] = $this->_urlencode_rfc3986($k).'='.$this->_urlencode_rfc3986($v); 
     971        } 
     972        $concatenatedParams = implode('&', $pairs); 
     973        $baseString= $method."&". $this->_urlencode_rfc3986($url)."&".$this->_urlencode_rfc3986($concatenatedParams); 
     974        if (!is_array($secret)) { 
     975            $secret[0] = $secret; 
     976            $secret[1] = ''; 
     977        } 
     978        $secret = $this->_urlencode_rfc3986($secret[0])."&".$this->_urlencode_rfc3986($secret[1]); 
     979        $oauth_signature = base64_encode(hash_hmac('sha1', $baseString, $secret, TRUE));     
     980        return $oauth_signature; 
     981    } 
     982 
     983    /** 
     984     * Helper function for OAuth Signature creation 
     985     */  
     986    function _urlencode_rfc3986($input) 
     987    { 
     988        if (is_array($input)) { 
     989            return array_map(array($this, '_urlencode_rfc3986'), $input); 
     990        } else if (is_scalar($input)) { 
     991            return str_replace(array('+', '%7E'), array(' ', '~'), rawurlencode($input)); 
     992        } else { 
     993            return ''; 
     994        } 
     995    } 
     996     
     997    /** 
     998     * Do a GET request with the access tokens 
     999     */ 
     1000    function oauth_get_request($url) { 
     1001        if ( empty( $this->access_tokens ) )  
     1002            return false; 
     1003     
     1004        $params = array('oauth_consumer_key' => $this->get_consumer_key(), 
     1005                "oauth_nonce" => time(), 
     1006                "oauth_timestamp" => time(), 
     1007                "oauth_token" => $this->access_tokens['oauth_token'], 
     1008                "oauth_signature_method" => "HMAC-SHA1", 
     1009                "oauth_version" => "1.0", 
     1010                ); 
     1011 
     1012        $params['oauth_signature'] = $this->oauth_signature(array($this->secretkey,$this->access_tokens['oauth_token_secret']), 'GET', $url, $params); 
     1013 
     1014        $url = add_query_arg( array_map('urlencode', $params), $url); 
     1015 
     1016        $response = wp_remote_get( $url ); 
     1017         
     1018        if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { 
     1019            return false; 
     1020        } else { 
     1021            $body = wp_remote_retrieve_body( $response ); 
     1022            return json_decode($body); 
     1023        } 
     1024    } 
     1025 
     1026     
    8861027} 
    8871028} 
Note: See TracChangeset for help on using the changeset viewer.