?? blogger.php
字號:
<?phpclass Blogger_Import { var $lump_authors = false; var $import = array(); // Shows the welcome screen and the magic iframe. function greet() { $title = __('Import Blogger'); $welcome = __('Howdy! This importer allows you to import posts and comments from your Blogger account into your WordPress blog.'); $noiframes = __('This feature requires iframe support.'); $warning = __('This will delete everything saved by the Blogger importer except your posts and comments. Are you sure you want to do this?'); $reset = __('Reset this importer'); $incompat = __('Your web server is not properly configured to use this importer. Please enable the CURL extension for PHP and then reload this page.'); echo "<div class='wrap'><h2>$title</h2><p>$welcome</p>"; if ( function_exists('curl_init') ) echo "<iframe src='admin.php?import=blogger&noheader=true' height='350px' width = '99%'>$noiframes</iframe><p><a href='admin.php?import=blogger&restart=true&noheader=true' onclick='return confirm(\"$warning\")'>$reset</a></p>"; else echo "<p>$incompat</p>"; echo "</div>\n"; } // Deletes saved data and redirect. function restart() { delete_option('import-blogger'); wp_redirect("admin.php?import=blogger"); die(); } // Generates a string that will make the page reload in a specified interval. function refresher($msec) { if ( $msec ) return "<html><head><script type='text/javascript'>window.onload=setTimeout('window.location.reload()', $msec);</script>\n</head>\n<body>\n"; else return "<html><head><script type='text/javascript'>window.onload=window.location.reload();</script>\n</head>\n<body>\n"; } // Returns associative array of code, header, cookies, body. Based on code from php.net. function parse_response($this_response) { // Split response into header and body sections list($response_headers, $response_body) = explode("\r\n\r\n", $this_response, 2); $response_header_lines = explode("\r\n", $response_headers); // First line of headers is the HTTP response code $http_response_line = array_shift($response_header_lines); if(preg_match('@^HTTP/[0-9]\.[0-9] ([0-9]{3})@',$http_response_line, $matches)) { $response_code = $matches[1]; } // put the rest of the headers in an array $response_header_array = array(); foreach($response_header_lines as $header_line) { list($header,$value) = explode(': ', $header_line, 2); $response_header_array[$header] .= $value."\n"; } $cookie_array = array(); $cookies = explode("\n", $response_header_array["Set-Cookie"]); foreach($cookies as $this_cookie) { array_push($cookie_array, "Cookie: ".$this_cookie); } return array("code" => $response_code, "header" => $response_header_array, "cookies" => $cookie_array, "body" => $response_body); } // Prints a form for the user to enter Blogger creds. function login_form($text='') { echo '<h1>' . __('Log in to Blogger') . "</h1>\n$text\n"; echo '<form method="post" action="admin.php?import=blogger&noheader=true&step=0"><table><tr><td>' . __('Username') . ':</td><td><input type="text" name="user" /></td></tr><tr><td>' . __('Password') . ':</td><td><input type="password" name="pass" /></td><td><input type="submit" value="' . __('Start') . '" /></td></tr></table></form>'; die; } // Sends creds to Blogger, returns the session cookies an array of headers. function login_blogger($user, $pass) { $_url = 'http://www.blogger.com/login.do'; $params = "username=$user&password=$pass"; $ch = curl_init(); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS,$params); curl_setopt($ch, CURLOPT_URL,$_url); curl_setopt($ch, CURLOPT_USERAGENT, 'Blogger Exporter'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt($ch, CURLOPT_HEADER,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $response = curl_exec ($ch); $response = $this->parse_response($response); sleep(1); return $response['cookies']; } // Requests page from Blogger, returns the response array. function get_blogger($url, $header = '', $user=false, $pass=false) { $ch = curl_init(); if ($user && $pass) curl_setopt($ch, CURLOPT_USERPWD,"{$user}:{$pass}"); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Blogger Exporter'); curl_setopt($ch, CURLOPT_HEADER,1); if (is_array($header)) curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $response = curl_exec ($ch); $response = $this->parse_response($response); $response['url'] = $url; if (curl_errno($ch)) { print curl_error($ch); } else { curl_close($ch); } return $response; } // Posts data to Blogger, returns response array. function post_blogger($url, $header = false, $paramary = false, $parse=true) { $params = ''; if ( is_array($paramary) ) { foreach($paramary as $key=>$value) if($key && $value != '') $params.=$key."=".urlencode(stripslashes($value))."&"; } if ($user && $pass) $params .= "username=$user&password=$pass"; $params = trim($params,'&'); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS,$params); if ($user && $pass) curl_setopt($ch, CURLOPT_USERPWD,"{$user}:{$pass}"); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_USERAGENT, 'Blogger Exporter'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HEADER,$parse); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); if ($header) curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $response = curl_exec ($ch); if ($parse) { $response = $this->parse_response($response); $response['url'] = $url; return $response; } return $response; } // Prints the list of blogs for import. function show_blogs() { global $import; echo '<h1>' . __('Selecting a Blog') . "</h1>\n<ul>"; foreach ( $this->import['blogs'] as $blog ) { if (9 == $blog['nextstep']) $status = "100%"; elseif (8 == $blog['nextstep']) $status = "90%"; elseif (7 == $blog['nextstep']) $status = "82.5%"; elseif (6 == $blog['nextstep']) $status = "75%"; elseif (5 == $blog['nextstep']) $status = "57%"; elseif (4 == $blog['nextstep']) $status = "28%"; elseif (3 == $blog['nextstep']) $status = "14%"; else $status = "0%"; echo "\t<li><a href='admin.php?import=blogger&noheader=true&blog={$blog['id']}'>{$blog['title']}</a> $status</li>\n"; } die("</ul>\n"); } // Publishes. function publish_blogger($i, $text) { $head = $this->refresher(2000) . "<h1>$text</h1>\n"; if ( ! strstr($this->import['blogs'][$_GET['blog']]['publish'][$i], 'http') ) { // First call. Start the publish process with a fresh set of cookies. $this->import['cookies'] = $this->login_blogger($this->import['user'], $this->import['pass']); update_option('import-blogger', $this->import); $paramary = array('blogID' => $_GET['blog'], 'all' => '1', 'republishAll' => 'Republish Entire Blog', 'publish' => '1', 'redirectUrl' => "/publish.do?blogID={$_GET['blog']}&inprogress=true"); $response = $this->post_blogger("http://www.blogger.com/publish.do?blogID={$_GET['blog']}", $this->import['cookies'], $paramary); if ( $response['code'] == '302' ) { $url = str_replace('publish.g', 'publish-body.g', $response['header']['Location']); $this->import['blogs'][$_GET['blog']]['publish'][$i] = $url; update_option('import-blogger', $this->import); $response = $this->get_blogger($url, $this->import['cookies']); preg_match('#<p class="progressIndicator">.*</p>#U', $response['body'], $matches); $progress = $matches[0]; die($head . $progress); } else { $this->import['blogs'][$_GET['blog']]['publish'][$i] = false; update_option('import-blogger', $this->import); die($head); } } else { // Subsequent call. Keep checking status until Blogger reports publish complete. $url = $this->import['blogs'][$_GET['blog']]['publish'][$i]; $response = $this->get_blogger($url, $this->import['cookies']); if ( preg_match('#<p class="progressIndicator">.*</p>#U', $response['body'], $matches) ) { $progress = $matches[0]; if ( strstr($progress, '100%') ) { $this->set_next_step($i); $progress .= '<p>'.__('Moving on...').'</p>'; } die($head . $progress); } else { $this->import['blogs'][$_GET['blog']]['publish'][$i] = false; update_option('import-blogger', $this->import); die("$head<p>" . __('Trying again...') . '</p>'); } } } // Sets next step, saves options function set_next_step($step) { $this->import['blogs'][$_GET['blog']]['nextstep'] = $step; update_option('import-blogger', $this->import); } // Redirects to next step function do_next_step() { wp_redirect("admin.php?import=blogger&noheader=true&blog={$_GET['blog']}"); die(); } // Step 0: Do Blogger login, get blogid/title pairs. function do_login() { if ( ( ! $this->import['user'] && ! is_array($this->import['cookies']) ) ) { // The user must provide a Blogger username and password. if ( ! ( $_POST['user'] && $_POST['pass'] ) ) { $this->login_form(__('The script will log into your Blogger account, change some settings so it can read your blog, and restore the original settings when it\'s done. Here\'s what you do:').'</p><ol><li>'.__('Back up your Blogger template.').'</li><li>'.__('Back up any other Blogger settings you might need later.').'</li><li>'.__('Log out of Blogger').'</li><li>'.__('Log in <em>here</em> with your Blogger username and password.').'</li><li>'.__('On the next screen, click one of your Blogger blogs.').'</li><li>'.__('Do not close this window or navigate away until the process is complete.').'</li></ol>'); } // Try logging in. If we get an array of cookies back, we at least connected. $this->import['cookies'] = $this->login_blogger($_POST['user'], $_POST['pass']); if ( !is_array( $this->import['cookies'] ) ) { $this->login_form(__('Login failed. Please enter your credentials again.')); } // Save the password so we can log the browser in when it's time to publish. $this->import['pass'] = $_POST['pass']; $this->import['user'] = $_POST['user']; // Get the Blogger welcome page and scrape the blog numbers and names from it $response = $this->get_blogger('http://www.blogger.com/home', $this->import['cookies']); if (! stristr($response['body'], 'signed in as') ) $this->login_form(__('Login failed. Please re-enter your username and password.')); $blogsary = array(); preg_match_all('#posts\.g\?blogID=(\d+)">([^<]+)</a>#U', $response['body'], $blogsary); if ( ! count( $blogsary[1] < 1 ) ) die(__('No blogs found for this user.')); $this->import['blogs'] = array(); $template = '<MainPage><br /><br /><br /><p>'.__('Are you looking for %title%? It is temporarily out of service. Please try again in a few minutes. Meanwhile, discover <a href="http://wordpress.org/">a better blogging tool</a>.').'</p><BloggerArchives><a class="archive" href="<$BlogArchiveURL$>"><$BlogArchiveName$></a><br /></BloggerArchives></MainPage><ArchivePage><Blogger><wordpresspost><$BlogItemDateTime$>|W|P|<$BlogItemAuthorNickname$>|W|P|<$BlogItemBody$>|W|P|<$BlogItemNumber$>|W|P|<$BlogItemTitle$>|W|P|<$BlogItemAuthorEmail$><BlogItemCommentsEnabled><BlogItemComments><wordpresscomment><$BlogCommentDateTime$>|W|P|<$BlogCommentAuthor$>|W|P|<$BlogCommentBody$></BlogItemComments></BlogItemCommentsEnabled></Blogger></ArchivePage>'; foreach ( $blogsary[1] as $key => $id ) { // Define the required Blogger options. $blog_opts = array( 'blog-options-basic' => false, 'blog-options-archiving' => array('archiveFrequency' => 'm'), 'blog-publishing' => array('publishMode'=>'0', 'blogID' => "$id", 'subdomain' => mt_rand().mt_rand(), 'pingWeblogs' => 'false'), 'blog-formatting' => array('timeStampFormat' => '0', 'encoding'=>'UTF-8', 'convertLineBreaks'=>'false', 'floatAlignment'=>'false'), 'blog-comments' => array('commentsTimeStampFormat' => '0'), 'template-edit' => array( 'templateText' => str_replace('%title%', trim($blogsary[2][$key]), $template) ) ); // Build the blog options array template foreach ($blog_opts as $blog_opt => $modify) $new_opts["$blog_opt"] = array('backup'=>false, 'modify' => $modify, 'error'=>false); $this->import['blogs']["$id"] = array( 'id' => $id, 'title' => trim($blogsary[2][$key]), 'options' => $new_opts, 'url' => false, 'publish_cookies' => false, 'published' => false, 'archives' => false, 'lump_authors' => false, 'newusers' => array(), 'nextstep' => 2 ); } update_option('import-blogger', $this->import); wp_redirect("admin.php?import=blogger&noheader=true&step=1"); } die(); } // Step 1: Select one of the blogs belonging to the user logged in. function select_blog() { if ( is_array($this->import['blogs']) ) { $this->show_blogs(); die(); } else { $this->restart(); } } // Step 2: Backup the Blogger options pages, updating some of them. function backup_settings() { $output.= '<h1>'.__('Backing up Blogger options')."</h1>\n"; $form = false; foreach ($this->import['blogs'][$_GET['blog']]['options'] as $blog_opt => $optary) { if ( $blog_opt == $_GET['form'] ) { // Save the posted form data $this->import['blogs'][$_GET['blog']]['options']["$blog_opt"]['backup'] = $_POST; update_option('import-blogger',$this->import); // Post the modified form data to Blogger if ( $optary['modify'] ) { $posturl = "http://www.blogger.com/{$blog_opt}.do"; $headers = array_merge($this->import['blogs'][$_GET['blog']]['options']["$blog_opt"]['cookies'], $this->import['cookies']); if ( 'blog-publishing' == $blog_opt ) { if ( $_POST['publishMode'] > 0 ) { $response = $this->get_blogger("http://www.blogger.com/blog-publishing.g?blogID={$_GET['blog']}&publishMode=0", $headers); if ( $response['code'] >= 400 ) die('<h2>'.__('Failed attempt to change publish mode from FTP to BlogSpot.').'</h2><pre>' . addslashes(print_r($headers, 1)) . addslashes(print_r($response, 1)) . '</pre>'); $this->import['blogs'][$_GET['blog']]['url'] = 'http://' . $optary['modify']['subdomain'] . '.blogspot.com/'; sleep(2); } else { $this->import['blogs'][$_GET['blog']]['url'] = 'http://' . $_POST['subdomain'] . '.blogspot.com/'; update_option('import-blogger', $this->import); $output .= "<del><p>$blog_opt</p></del>\n"; continue; } $paramary = $optary['modify']; } else { $paramary = array_merge($_POST, $optary['modify']); } $response = $this->post_blogger($posturl, $headers, $paramary); if ( $response['code'] >= 400 || strstr($response['body'], 'There are errors on this form') ) die('<p>'.__('Error on form submission. Retry or reset the importer.').'</p>' . addslashes(print_r($response, 1))); } $output .= "<del><p>$blog_opt</p></del>\n"; } elseif ( is_array($this->import['blogs'][$_GET['blog']]['options']["$blog_opt"]['backup']) ) { // This option set has already been backed up. $output .= "<del><p>$blog_opt</p></del>\n"; } elseif ( ! $form ) { // This option page needs to be downloaded and given to the browser for submission back to this script. $response = $this->get_blogger("http://www.blogger.com/{$blog_opt}.g?blogID={$_GET['blog']}", $this->import['cookies']); $this->import['blogs'][$_GET['blog']]['options']["$blog_opt"]['cookies'] = $response['cookies']; update_option('import-blogger',$this->import);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -