WordPress發布文章自動同步到新浪微博詳細方法
編輯:狂族晨曦 來源:建站分享,WordPress技巧 日期:2015-07-10 閱讀: 12,725 次 17 條評論 » 百度已收錄
WordPress發布文章自動同步到新浪微博的方法有很多大神都分享過,我也是在免費資源部落和張戈博客的結合下開始完成我的文章同步。但這過程并不輕松,其中遇到了一些問題,可能是這些教程有些時間了,新浪的申請流程有所改變吧,這里就對大神們的教程做些補充。
現在這個時代,我們的生活每天會花很多時間在手機上,而微博又是經久不衰的手機APP,新的文章如果能同步更新到微博上,對網站的宣傳和引流,還有最重要的提升“逼格”都有很好的作用。下面就來講講我的實踐經歷。
一、要實現的效果
首先來看看我們最終要達到的效果,文章要同步更新很簡單,重點是宣傳作用。先上張圖(點擊放大):

上一張圖中,兩條微博除了內容不同外,就是紅色框框內的來自內容不同。下面的一條是實現同步后的效果,上面的一條則是我們要實現的效果。
二、實現步驟1:申請開發者權限
使用你的新浪微博賬號登陸微博開放平臺,網址:http://open.weibo.com/
點擊頁面導航中[編輯開發者信息]或訪問:http://open.weibo.com/developers/basicinfo ,根據頁面表單內容填寫信息,提交后等待新浪方審核。(下圖是基本流程)

上圖是我認證后的,請大家按照自己的實際情況操作,我的小站當然選擇個人,然后將自己的真實信息填寫完整后,就開始等待審核。
新浪的審核時間并不長,會在一個工作日的時間內處理審核。開發者審核很好過,過了就可以開發應用了。
三、實現步驟2:網站接入
這一步很重要,這就是卡了我兩天,整的我想放棄的地方。
因為大神們的教程上寫的是創建應用,所以就是無限的錯誤提醒,把我都要整瘋了。下面就是錯誤的方法的后果(點擊放大):


后來經過反復折騰無果后,我研究了一下,發現并不應該是創建應用,而是選擇網站接入。這一步就是我希望分享給大家的,讓大家少走彎路。
在微博開放平臺的首頁點擊橙色的[立即創建微連接接]->[網站接入] 或 訪問http://open.weibo.com/webmaster/add

根據表單內容一步一步填寫就好了,注意:第一步的應用名就是圖1中的來源名稱。

補全應用信息之后,提交審核,也會在一個工作日內完成審核。
提交審核之后,你就可以使用新浪的開放端口進行同步博客文章了,只是在審核通過之前,來源位置顯示的是未審核應用字樣,但不影響開發和使用。效果就是圖1中下面那條微博的樣式。
四、實現步驟3:WordPress代碼
提交審核之后,我們會得到一串“App Key”碼,這個很重要。記住在哪里能找到:點擊[我的應用]->你正在審核的應用名稱。點進去就可以看到,如下圖(點擊放大):

然后在WordPress主題functions.php最后一個?>前添加由張戈博客提供同步代碼:
function post_to_sina_weibo($post_ID) {
/* 鑒于很多朋友反饋發布文章空白,臨時加上調試代碼,若無問題可刪除此行,若有問題請將錯誤信息在本文留言即可 */
ini_set('display_errors', true);
/* 此處修改為通過文章自定義欄目來判斷是否同步 */
if(get_post_meta($post_ID,'weibo_sync',true) == 1) return;
$get_post_info = get_post($post_ID);
$get_post_centent = get_post($post_ID)->post_content;
$get_post_title = get_post($post_ID)->post_title;
if ($get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish') {
$appkey='1034947262'; /* 此處是你的新浪微博appkey,不修改的話就會顯示來自張戈博客哦! */
$username='微博用戶名';
$userpassword='微博密碼';
$request = new WP_Http;
/* 獲取文章標簽關鍵詞 */
$keywords = "";
$tags = wp_get_post_tags($post_ID);
foreach ($tags as $tag ) {
$keywords = $keywords.'#'.$tag->name."#";
}
/* 修改了下風格,并添加文章關鍵詞作為微博話題,提高與其他相關微博的關聯率 */
$string1 = '【文章發布】' . strip_tags( $get_post_title ).':';
$string2 = $keywords.' 查看全文:'.get_permalink($post_ID);
/* 微博字數控制,避免超標同步失敗 */
$wb_num = (138 - WeiboLength($string1.$string2))*2;
$status = $string1.mb_strimwidth(strip_tags( apply_filters('the_content', $get_post_centent)),0, $wb_num,'...').$string2;
$api_url = 'https://api.weibo.com/2/statuses/update.json';
$body = array('status' => $status,'source' => $appkey);
$headers = array('Authorization' => 'Basic ' . base64_encode("$username:$userpassword"));
$result = $request->post($api_url, array('body' => $body,'headers' => $headers));
/* 若同步成功,則給新增自定義欄目weibo_sync,避免以后更新文章重復同步 */
add_post_meta($post_ID, 'weibo_sync', 1, true);
}
}
add_action('publish_post', 'post_to_sina_weibo', 0);
/*
//獲取微博字符長度函數
*/
function WeiboLength($str)
{
$arr = arr_split_zh($str); //先將字符串分割到數組中
foreach ($arr as $v){
$temp = ord($v); //轉換為ASCII碼
if ($temp > 0 && $temp < 127) {
$len = $len+0.5;
}else{
$len ++;
}
}
return ceil($len); //加一取整
}
/*
//拆分字符串函數,只支持 gb2312編碼
//參考:http://u-czh.iteye.com/blog/1565858
*/
function arr_split_zh($tempaddtext){
$tempaddtext = iconv("UTF-8", "GBK//IGNORE", $tempaddtext);
$cind = 0;
$arr_cont=array();
for($i=0;$i<strlen($tempaddtext);$i++)
{
if(strlen(substr($tempaddtext,$cind,1)) > 0){
if(ord(substr($tempaddtext,$cind,1)) < 0xA1 ){ //如果為英文則取1個字節
array_push($arr_cont,substr($tempaddtext,$cind,1));
$cind++;
}else{
array_push($arr_cont,substr($tempaddtext,$cind,2));
$cind+=2;
}
}
}
foreach ($arr_cont as &$row)
{
$row=iconv("gb2312","UTF-8",$row);
}
return $arr_cont;
}
主要修改的代碼,是第13、14、15行的內容。14行的[微博用戶名]是你登錄郵箱時的郵箱/會員賬號/手機號哦,你登錄的時候怎么填的,這里就要怎么填。
實在不懂的話,也可以去看看張戈博客的介紹。
五、進階步驟1:同步文章實現帶特色圖片之申請權限
完成上面的步驟就已經實現了本教程的目的了。但是張戈博客還分享了在微博中添加特色圖片的實現方法,這里也就多提一下我在實現的過程中遇到的問題(我還沒有成功)。
要實現的是:如果文章設置了特色圖片,則微博同時加上這張圖片。如果沒有設置,則調用文章內第一張圖片。文章內沒有圖片,好像是不輸出圖片(因為我還沒有成功,所以不清楚。了解的童鞋可以在評論區解釋下)。
實現帶特色圖片,需要申請權限,我就是被這步攔住了。
在[我的應用]中點擊你申請的應用名稱,然后,再依次點擊[接口管理]->[申請權限]->申請[微博高級寫入權限](點擊放大):

填寫申請理由時態度還是要誠懇,理由可以參考張戈博客的:

提交之后也是會在一個工作日內審核內容。張戈博客說很容易成功。
然而,對與我這個小站來說并不是這樣:

收到消息后我查看了下未通過原因的說明:

所以大家還是在之前的步驟完成運營一段時間之后,再開始申請吧。不過,實現帶圖片的代碼,大家還是可以看一下的。
六、進階步驟2:同步文章實現帶特色圖片之WordPress代碼
還是引用張戈博客的代碼,大家可以研究一下。
用法:在WordPress主題functions.php中,將之前提供的不帶圖片的代碼替換。
/**
* WordPress發布文章同步到新浪微博(帶圖片&自定義欄目版)
* 文章地址:http://zhangge.net/4947.html
*/
function post_to_sina_weibo($post_ID) {
/* 鑒于很多朋友反饋發布文章空白,臨時加上調試代碼,若無問題可刪除此行,若有問題請將錯誤信息在本文留言即可 */
ini_set('display_errors', true);
/* 此處修改為通過文章自定義欄目來判斷是否同步 */
if(get_post_meta($post_ID,'weibo_sync',true) == 1) return;
$get_post_info = get_post($post_ID);
$get_post_centent = get_post($post_ID)->post_content;
$get_post_title = get_post($post_ID)->post_title;
if ($get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish') {
$appkey='1034947262'; /* 此處是你的新浪微博appkey,不修改的話就會顯示來自張戈博客哦! */
$username='微博用戶名';
$userpassword='微博密碼';
$request = new WP_Http;
$keywords = "";
/* 獲取文章標簽關鍵詞 */
$tags = wp_get_post_tags($post_ID);
foreach ($tags as $tag ) {
$keywords = $keywords.'#'.$tag->name."#";
}
/* 修改了下風格,并添加文章關鍵詞作為微博話題,提高與其他相關微博的關聯率 */
$string1 = '【文章發布】' . strip_tags( $get_post_title ).':';
$string2 = $keywords.' 查看全文:'.get_permalink($post_ID);
/* 微博字數控制,避免超標同步失敗 */
$wb_num = (138 - WeiboLength($string1.$string2))*2;
$status = $string1.mb_strimwidth(strip_tags( apply_filters('the_content', $get_post_centent)),0, $wb_num,'...').$string2;
/* 獲取特色圖片,如果沒設置就抓取文章第一張圖片 */
if (has_post_thumbnail()) {
$timthumb_src = wp_get_attachment_image_src( get_post_thumbnail_id($post_ID), 'full' );
$url = $timthumb_src[0];
/* 抓取第一張圖片作為特色圖片,需要主題函數支持 */
} else if(function_exists('catch_first_image')) {
$url = catch_first_image();
}
/* 判斷是否存在圖片,定義不同的接口 */
if(!empty($url)){
$api_url = 'https://api.weibo.com/2/statuses/upload_url_text.json'; /* 新的API接口地址 */
$body = array('status' => $status,'source' => $appkey,'url' => $url);
} else {
$api_url = 'https://api.weibo.com/2/statuses/update.json';
$body = array('status' => $status,'source' => $appkey);
}
$headers = array('Authorization' => 'Basic ' . base64_encode("$username:$userpassword"));
$result = $request->post($api_url, array('body' => $body,'headers' => $headers));
/* 若同步成功,則給新增自定義欄目weibo_sync,避免以后更新文章重復同步 */
add_post_meta($post_ID, 'weibo_sync', 1, true);
}
}
add_action('publish_post', 'post_to_sina_weibo', 0);
/*
//獲取微博字符長度函數
*/
function WeiboLength($str)
{
$arr = arr_split_zh($str); //先將字符串分割到數組中
foreach ($arr as $v){
$temp = ord($v); //轉換為ASCII碼
if ($temp > 0 && $temp < 127) {
$len = $len+0.5;
}else{
$len ++;
}
}
return ceil($len); //加一取整
}
/*
//拆分字符串函數,只支持 gb2312編碼
//參考:http://u-czh.iteye.com/blog/1565858
*/
function arr_split_zh($tempaddtext){
$tempaddtext = iconv("UTF-8", "GBK//IGNORE", $tempaddtext);
$cind = 0;
$arr_cont=array();
for($i=0;$i<strlen($tempaddtext);$i++)
{
if(strlen(substr($tempaddtext,$cind,1)) > 0){
if(ord(substr($tempaddtext,$cind,1)) < 0xA1 ){ //如果為英文則取1個字節
array_push($arr_cont,substr($tempaddtext,$cind,1));
$cind++;
}else{
array_push($arr_cont,substr($tempaddtext,$cind,2));
$cind+=2;
}
}
}
foreach ($arr_cont as &$row)
{
$row=iconv("gb2312","UTF-8",$row);
}
return $arr_cont;
}
另外,如果你的主題沒有抓取文章第一張圖片作為特色圖片的功能,請額外添加如下代碼:
/* 抓取文章第一張圖片作為特色圖片(已加上是否已存在判斷,可放心添加到functions.php) */
if(!function_exists('catch_first_image')){
function catch_first_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $get_post_centent,$matches);
$first_img = $matches [1] [0];
return $first_img;
}
}
我也是在網站接入成功的第一時間就分享了這篇經驗稿,在這里也要感謝免費資源部落與張戈博客的分享了。對于微博中帶圖片的功能,我會繼續努力,也希望這篇文章能夠幫到大家。
轉載請注明出處來自http://www.cnidcc.cn/wordpress_fbwzzdtbdxlwbxxff.html

川公網安備 51011202000104號
來回訪了,百度貼吧,呵呵
樓主可以付費幫我弄這個嗎,我也是吧友哦~
@余人陶藝: 照著這個教程應該已經很簡單了吧,還談什么錢呢,不懂的地方再回復就好了,也方便沒懂的網友們。
感覺很不錯的樣子,今天我也要試試。另外,網站備案不備案都能申請嗎?還有其他的條件限制嗎?
@明星博客: 應該是需要備案的,當時的情況記不清了,但你可以去試試,不過我去看了我的新浪應用上面填有備案號。至于其他條件限制應該是沒有的,畢竟我的這個小站也成功了。
這個不錯,收藏了,也是一個增加外鏈的不錯方法
@爬行的蝸牛: 外鏈的話,微博的好像并不會讓搜索引擎抓取到。但是說不定會有感興趣的人從微博上認識你的網站,做好了倒是可以增加網站流量。
代碼高亮你用的插件還是代碼?
@那樊籠: 代碼高亮是百度UEditor編輯器自帶的,可以在本站搜“百度UEditor”了解一下。
表示不會加網站代碼,求指教
感覺微博已經淪為徽商的垃圾場。
謝謝博主分享
之前添加上之后,同步時不時會抽風,就沒怎么管了
以前折騰過一次,結果是失敗了,現在在折騰一次看看,說不定可以成功的
不知道阿里云的虛擬主機能不能用呢
@早莫: 本站就是放在阿里云虛擬云主機上的,放心嘗試。
不錯,Mark一下,以后有機會試試看!