⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blogger.php

📁 php 开发的内容管理系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?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&amp;noheader=true' height='350px' width = '99%'>$noiframes</iframe><p><a href='admin.php?import=blogger&amp;restart=true&amp;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&amp;noheader=true&amp;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&amp;noheader=true&amp;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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -