WordPress.org

Plugin Directory

Changeset 631487


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

update trunk for new tumblr importer

Location:
tumblr-importer/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tumblr-importer/trunk/readme.txt

    r558031 r631487  
    44Requires at least: 3.2 
    55Tested up to: 3.4 
    6 Stable tag: 0.6 
     6Stable tag: 0.7 
    77License: GPLv2 or later 
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    2727 
    2828== Changelog == 
     29= 0.7 = 
     30* Update to new Tumblr API, many fixes and improvements. 
     31 
    2932= 0.6 = 
    3033* Significant improvements in the performance of the importer 
  • tumblr-importer/trunk/tumblr-importer.php

    r558014 r631487  
    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() 
     
    369437        } 
    370438    } 
    371      
     439 
     440    function get_draft_post_type( $post_type ) { 
     441        return 'draft'; 
     442    } 
     443 
    372444    function do_drafts_import($url) { 
    373445        $start = $this->blog[$url]['drafts_complete']; 
     
    386458        else $count = TUMBLR_MAX_IMPORT; 
    387459 
     460        add_filter( 'tumblr_post_type', array( $this, 'get_draft_post_type' ) ); 
    388461        $imported_posts = $this->fetch_posts($url, $start, $count, $this->email, $this->password, 'draft' ); 
    389462 
     
    424497        } 
    425498    } 
    426      
     499 
    427500    function do_pages_import($url) { 
    428501        $start = $this->blog[$url]['pages_complete']; 
     
    480553            $filename = basename($path); 
    481554        } 
    482          
    483555        // Download file to temp location 
    484556        $tmp = download_url( $source ); 
     
    547619            break; 
    548620         
    549             case 'audio': 
     621        case 'audio': 
    550622            // Handle Tumblr Hosted Audio 
    551623            if ( isset( $post['media']['audio'] ) ) { 
     
    597669    } 
    598670     
     671     
     672    /**  
     673     * Get a request token from the OAuth endpoint (also serves as a test) 
     674     * 
     675     */ 
     676     function oauth_get_request_token() { 
     677        if ( empty($this->consumerkey) || empty ($this->secretkey) ) 
     678            return false; 
     679         
     680        $url = 'http://www.tumblr.com/oauth/request_token'; 
     681      
     682        $params = array('oauth_callback' => urlencode( self_admin_url('admin.php?import=tumblr') ), 
     683                'oauth_consumer_key' => $this->consumerkey, 
     684                "oauth_version" => "1.0", 
     685                "oauth_nonce" => time(), 
     686                "oauth_timestamp" => time(), 
     687                "oauth_signature_method" => "HMAC-SHA1", 
     688                ); 
     689         
     690        $params['oauth_signature'] = $this->oauth_signature(array($this->secretkey,''), 'POST', $url, $params); 
     691         
     692        $response = wp_remote_post( $url, array('body' => $params)); 
     693         
     694        return $response; 
     695     } 
     696      
    599697    /** 
    600698     * Fetch a list of blogs for a user 
     
    604702     * @returns array of blog info or a WP_Error 
    605703     */ 
    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 ) ) { 
     704    function get_blogs() { 
     705        $url = 'http://api.tumblr.com/v2/user/info'; 
     706        $response = $this->oauth_get_request($url); 
     707         
     708        switch ( $response->meta->status ) { 
    619709            case 403: // Bad Username / Password 
    620710                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; 
     711                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' ) ); 
    623712            case 200: // OK 
    624713                break; 
    625714            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 ) ); 
     715                $_error = sprintf( __( 'Tumblr replied with an error: %s', 'tumblr-importer' ), $response->meta->msg ); 
     716                do_action( 'tumblr_importer_handle_error', 'response_' . $response->meta->status ); 
    628717                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); 
     718        } 
    635719 
    636720        $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) { 
     721        foreach ( $response->response->user->blogs as $tblog ) { 
    645722            $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']; 
     723            $blog['title'] = (string) $tblog->title; 
     724            $blog['posts'] = (int) $tblog->posts; 
     725            $blog['drafts'] = (int) $tblog->drafts; 
     726            $blog['queued'] = (int) $tblog->queue; 
     727            $blog['avatar'] = ''; 
     728            $blog['url'] = (string) $tblog->url; 
     729            $blog['name'] = (string) $tblog->name; 
    656730 
    657731            $blogs[] = $blog; 
    658732        } 
    659  
    660         return $blogs; 
     733        $this->blogs = $blogs; 
     734        return $this->blogs; 
     735    } 
     736 
     737    function get_consumer_key() { 
     738        return $this->consumerkey; 
    661739    } 
    662740 
     
    669747     * @returns false on error, array of posts on success 
    670748     */ 
    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; 
     749    function fetch_posts($url, $start=0, $count = 50, $email = null, $password = null, $state = null ) { 
     750        $url = parse_url( $url, PHP_URL_HOST ); 
     751        $post_type = apply_filters( 'tumblr_post_type', '' ); 
     752        $url = trailingslashit( "http://api.tumblr.com/v2/blog/$url/posts/$post_type" ); 
     753         
     754        do_action( 'tumblr_importer_pre_fetch_posts' ); 
     755 
     756        // These extra params hose up the auth if passed for oauth requests e.g. for drafts, so use them only for normal posts. 
     757        if ( '' == $post_type ) { 
     758            $params = array( 
     759                'offset'  => $start, 
     760                'limit'   => $count, 
     761                'api_key' => apply_filters( 'tumblr_importer_get_consumer_key', '' ), 
     762            ); 
     763            $url = add_query_arg( $params, $url ); 
     764        } 
     765 
     766        $response = $this->oauth_get_request($url); 
     767 
     768        switch ( $response->meta->status ) { 
     769            case 200: // OK 
     770                break; 
     771            default: 
     772                $_error = sprintf( __( 'Tumblr replied with an error: %s', 'tumblr-importer' ), $response->meta->msg ); 
     773                do_action( 'tumblr_importer_handle_error', 'response_' . $response->meta->status ); 
     774                return new WP_Error('tumblr_error', $_error ); 
     775        } 
     776 
    697777        $posts = array(); 
    698         foreach($tposts->post as $tpost) { 
     778        $tposts = $response->response->posts; 
     779        foreach( $tposts as $tpost ) { 
    699780            $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'}) ) { 
     781            $post['tumblr_id'] = (string) $tpost->id; 
     782            $post['tumblr_url'] = (string) $tpost->post_url; 
     783            $post['post_date'] = date( 'Y-m-d H:i:s', strtotime ( (string) $tpost->date ) ); 
     784            $post['post_date_gmt'] = date( 'Y-m-d H:i:s', strtotime ( (string) $tpost->date ) ); 
     785            $post['post_name'] = (string) $tpost->slug; 
     786            if ( 'private' == $tpost->state )  
     787                $post['private'] = (string) $tpost->state; 
     788            if ( isset( $tpost->tags ) ) { 
    707789                $post['tags_input'] = array(); 
    708                 foreach ( $tpost->{'tag'} as $tag ) 
     790                foreach ( $tpost->tags as $tag ) 
    709791                    $post['tags_input'][] = rtrim( (string) $tag, ','); // Strip trailing Commas off it too. 
    710792            } 
    711793 
    712             // set the various post info for each special format tumblr offers 
    713             // TODO reorg this as needed 
    714             switch ((string) $tpost['type']) { 
     794            switch ( (string) $tpost->type ) { 
    715795                case 'photo': 
    716796                    $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'} ) ) { 
     797                    $post['media']['src'] = (string) $tpost->photos[0]->original_size->url; 
     798                    $post['media']['link'] = '';//TODO: Find out what to use here.(string) $tpost->{'photo-link-url'}; 
     799                    $post['media']['width'] = (string) $tpost->photos[0]->original_size->width; 
     800                    $post['media']['height'] = (string) $tpost->photos[0]->original_size->height; 
     801                    $post['post_content'] = (string) $tpost->caption; 
     802                    if ( ! empty( $tpost->photos ) ) { 
    723803                        $post['format'] = 'gallery'; 
    724                         foreach ( $tpost->{'photoset'}->{'photo'} as $photo ) { 
     804                        foreach ( $tpost->photos as $photo ) { 
    725805                            $post['gallery'][] = array ( 
    726                                 'src'=>$photo->{'photo-url'}[0], 
    727                                 'width'=>$photo['width'], 
    728                                 'height'=>$photo['height'], 
    729                                 'caption'=>$photo['caption'], 
     806                                'src'     => $photo->original_size->url, 
     807                                'width'   => $photo->original_size->width, 
     808                                'height'  => $photo->original_size->height, 
     809                                'caption' => $photo->caption, 
    730810                            ); 
    731811                        } 
     
    734814                case 'quote': 
    735815                    $post['format'] = 'quote'; 
    736                     $post['post_content'] = (string) $tpost->{'quote-text'}; 
    737                     $post['post_content'] .= "\n\n" . (string) $tpost->{'quote-source'}; 
     816                    $post['post_content'] = '<blockquote>' . (string) $tpost->text . '</blockquote>'; 
     817                    $post['post_content'] .= "\n\n<div class='attribution'>" . (string) $tpost->source . '</div>'; 
    738818                    break; 
    739819                case 'link': 
    740820                    $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': 
     821                    $linkurl = (string) $tpost->url; 
     822                    $linktext = (string) $tpost->title; 
     823                    $post['post_content'] = "<a href='$linkurl'>$linktext</a>"; 
     824                    if ( ! empty( $tpost->description ) ) 
     825                        $post['post_content'] .= '<div class="link_description">' . (string) $tpost->description . '</div>'; 
     826                    $post['post_title'] = (string) $tpost->title; 
     827                    break; 
     828                case 'chat': 
    747829                    $post['format'] = 'chat'; 
    748                     $post['post_title'] = (string) $tpost->{'conversation-title'}; 
    749                     $post['post_content'] = (string) $tpost->{'conversation-text'}; 
     830                    $post['post_title'] = (string) $tpost->title; 
     831                    $post['post_content'] = (string) $tpost->body; 
    750832                    break; 
    751833                case 'audio': 
    752834                    $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'}; 
     835                    $post['media']['filename'] = basename( (string) $tpost->audio_url ); 
     836                    // If no .mp3 extension, add one so that sideloading works. 
     837                    if ( ! preg_match( '/\.mp3$/', $post['media']['filename'] ) ) 
     838                        $post['media']['filename'] .= '.mp3'; 
     839                    $post['media']['audio'] = (string) $tpost->audio_url .'?plead=please-dont-download-this-or-our-lawyers-wont-let-us-host-audio'; 
     840                    $post['post_content'] = (string) $tpost->player . "\n" . (string) $tpost->caption; 
    758841                    break; 
    759842                case 'video': 
    760843                    $post['format'] = 'video'; 
    761844                    $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) ) { 
     845 
     846                    $video = array_shift( $tpost->player ); 
     847                 
     848                    if ( false !== strpos( (string) $video->embed_code, 'embed' ) ) { 
     849                        if ( preg_match_all('/<embed (.+?)>/', (string) $video->embed_code, $matches) ) { 
    773850                            foreach ($matches[1] as $match) { 
    774                                 foreach ( wp_kses_hair($match, array('http')) as $attr) 
    775                                     $embed[$attr['name']] = $attr['value']; 
     851                                foreach ( wp_kses_hair( $match, array( 'http' ) ) as $attr ) 
     852                                    $embed[ $attr['name'] ] = $attr['value']; 
    776853                            } 
    777                              
     854 
    778855                            // 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                              
     856                            $embed['src'] = preg_replace( '|http://www.youtube.com/v/([a-zA-Z0-9_]+).*|i', 'http://www.youtube.com/watch?v=$1', $embed['src'] ); 
     857 
    781858                            // TODO find other special cases, since tumblr is full of them 
    782                              
    783859                            $post['post_content'] = $embed['src']; 
    784860                        } 
     861 
    785862                        // 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'} ); 
     863                        if ( preg_match( '/<iframe/', $video->embed_code ) ) { 
     864                            $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 ); 
    788865                            $post['post_content'] = $embed['src']; 
    789866                        } 
    790                      
     867                    } elseif ( preg_match( '/<iframe.*vimeo/', $video->embed_code ) ) { 
     868                        $embed['src'] = preg_replace( '|<iframe.*src="(http://player.vimeo.com/video/([a-zA-Z0-9_\-]+))\??.*".*</iframe>.*|', 'http://vimeo.com/$2', $video->embed_code ); 
     869                        $post['post_content'] = $embed['src']; 
    791870                    } 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]; 
     871                        // @todo: See if the video source is going to be oEmbed'able before adding the flash player 
     872                        $post['post_content'] .= $video->embed_code; 
    795873                    } 
    796                     $post['post_content'] .= "\n" . (string) $tpost->{'video-caption'}; 
     874     
     875                    $post['post_content'] .= "\n" . (string) $tpost->caption; 
    797876                    break; 
    798877                case 'answer': 
    799                     $post['post_title'] = (string) $tpost->{'question'}; 
    800                     $post['post_content'] = (string) $tpost->{'answer'}; 
     878                    // TODO: Include asking_name and asking_url values? 
     879                    $post['post_title'] = (string) $tpost->question; 
     880                    $post['post_content'] = (string) $tpost->answer; 
    801881                    break; 
    802882                case 'regular': 
     883                case 'text': 
    803884                default: 
    804                     $post['post_title'] = (string) $tpost->{'regular-title'}; 
    805                     $post['post_content'] = (string) $tpost->{'regular-body'}; 
     885                    $post['post_title'] = (string) $tpost->title; 
     886                    $post['post_content'] = (string) $tpost->body; 
    806887                    break; 
    807888            } 
     
    884965    } 
    885966     
     967     
     968    /** 
     969     * OAuth Signature creation 
     970     */ 
     971    function oauth_signature($secret, $method, $url, $params = array()) { 
     972        uksort($params, 'strcmp'); 
     973        foreach ($params as $k => $v) { 
     974            $pairs[] = $this->_urlencode_rfc3986($k).'='.$this->_urlencode_rfc3986($v); 
     975        } 
     976        $concatenatedParams = implode('&', $pairs); 
     977        $baseString= $method."&". $this->_urlencode_rfc3986($url)."&".$this->_urlencode_rfc3986($concatenatedParams); 
     978        if (!is_array($secret)) { 
     979            $secret[0] = $secret; 
     980            $secret[1] = ''; 
     981        } 
     982        $secret = $this->_urlencode_rfc3986($secret[0])."&".$this->_urlencode_rfc3986($secret[1]); 
     983        $oauth_signature = base64_encode(hash_hmac('sha1', $baseString, $secret, TRUE));     
     984        return $oauth_signature; 
     985    } 
     986 
     987    /** 
     988     * Helper function for OAuth Signature creation 
     989     */  
     990    function _urlencode_rfc3986($input) 
     991    { 
     992        if (is_array($input)) { 
     993            return array_map(array($this, '_urlencode_rfc3986'), $input); 
     994        } else if (is_scalar($input)) { 
     995            return str_replace(array('+', '%7E'), array(' ', '~'), rawurlencode($input)); 
     996        } else { 
     997            return ''; 
     998        } 
     999    } 
     1000     
     1001    /** 
     1002     * Do a GET request with the access tokens 
     1003     */ 
     1004    function oauth_get_request($url) { 
     1005        if ( empty( $this->access_tokens ) )  
     1006            return false; 
     1007     
     1008        $params = array('oauth_consumer_key' => $this->get_consumer_key(), 
     1009                "oauth_nonce" => time(), 
     1010                "oauth_timestamp" => time(), 
     1011                "oauth_token" => $this->access_tokens['oauth_token'], 
     1012                "oauth_signature_method" => "HMAC-SHA1", 
     1013                "oauth_version" => "1.0", 
     1014                ); 
     1015 
     1016        $params['oauth_signature'] = $this->oauth_signature(array($this->secretkey,$this->access_tokens['oauth_token_secret']), 'GET', $url, $params); 
     1017 
     1018        $url = add_query_arg( array_map('urlencode', $params), $url); 
     1019 
     1020        $response = wp_remote_get( $url ); 
     1021         
     1022        if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { 
     1023            return false; 
     1024        } else { 
     1025            $body = wp_remote_retrieve_body( $response ); 
     1026            return json_decode($body); 
     1027        } 
     1028    } 
     1029 
     1030     
    8861031} 
    8871032} 
Note: See TracChangeset for help on using the changeset viewer.