java怎么实现同步到微博功能_新浪微博信息站外同步的完整实现
最近遇到一個項目,其中需要將用戶的微博信息與自己的網站項目上同步,好在新浪微博是提供了API的,大概查閱了一下,信息同步需要調用的是
在關于授權機制說明中,新浪微博的API一共有兩種驗證機制,分別是:OAuth和Basic Auth,OAuth沒有細看,不去管他,在Basic Auth授權介紹部分提到了cnblogs上的一篇文章,?http://www.cnblogs.com/QLeelulu/archive/2009/11/22/1607898.html,這篇文章給出了在asp.net中如何去以GET方式提交一個http請求,并給出返回內容的代碼,順著這篇文章又找到了另一篇博客園團隊的文章:http://www.cnblogs.com/cmt/archive/2010/05/13/1733904.html,這篇文章實現了站外發送微博的功能。結合這兩篇文章,實現了新浪微博同步的功能。
下面介紹實現微博同步的步驟:
1.首先為了實現http請求,需要引入using System.Net;命名空間,同時后面在轉換字符集部分及取得返回內容部分,需要另外兩個命名空間:using System.Text;和using System.IO;
接下來就可以開始編寫代碼實現取得json數據了。
(1)準備用戶驗證數據
string usernamePassword = username + ":" + password;
username是你的微博登錄用戶名,password是你的博客密碼。
(2)準備API的URL,URL中的參數直接以GET方式附在URL中,剛開始博客園的文章沒有細看,直接貼過來代碼,把參數附加在data中,總是返回400錯誤,后來查了一下msdn,發現HttpWebRequest的默認請求方式就是GET,再者既然是GET方式,應該就是以URL來傳遞參數的。
string url = "https://api.weibo.com/2/statuses/user_timeline.json?source="+apikey+"&count="+count+"";
上面的apikey是做為新浪微博用戶的開發者申請的,應該是唯一的,博客園的文章中說需要發一封郵件審核,我沒有發郵件,直接申請,也得到了一個APIKEY,信息也可以同步,只不過當在站外發送微博信息時,在來源部分會是:未審核應用。后面還有uid和screen_name 等參數,具體的參數API文檔都有說明。
(3)組織代碼實現HttpWebRequest請求
WebRequest webRequest = System.Net.WebRequest.Create(url);
HttpWebRequest myReq = webRequest as System.Net.HttpWebRequest;
CredentialCache mycache = new CredentialCache();
mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));
myReq.Credentials = mycache;
//驗證用戶授權機制
myReq.Headers.Add("Authorization", "Basic" + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
(4)取得返回內容,其中用到了Stream類。
WebResponse wr = myReq.GetResponse();
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
string content = reader.ReadToEnd();
上面的content即為取得的微博信息的json格式的內容,到此為止,已經實現了如何獲得微博內容的功能。接下來的部分就是如何格式化json內容,以相應的形式顯示在網頁中。
2.在asp.net中格式化json數據。
取得json數據后,到網上搜了一下,大多都是介紹如何在javascript中去以鍵值形式讀取的,本人對javascript比較畏懼。其中有兩篇文章是以類的形式實現了如何在asp.net中讀取json數據,沒有去實踐。后來在一篇文章中發現Jayrock.Json,使用起來比較簡單,同時有一篇word的使用說明文檔。下面的代碼實現是基于Jayrock.Json實現的。Jayrock.Json中基本是以JsonArray和JsonObject的轉換來實現以鍵值方式讀取json數據,我是將取得的數據放入DataTable中,后來想想這樣也有好處,前臺的UI可以隨意設計,最終綁定到DataTabel即可。
下面是格式化Json數據并實現DataTable的代碼。
JsonReader jsonRead = new JsonTextReader(new StringReader(content));
JsonObject jsonobj = new JsonObject();
jsonobj.Import(jsonRead);
JsonArray wiboArr = jsonobj["statuses"] as JsonArray;
DataTable wibo = new DataTable();
wibo.Columns.Add("id", typeof(Int64));
wibo.Columns.Add("screen_name", typeof(string));
wibo.Columns.Add("profile_image_url", typeof(string));
wibo.Columns.Add("text", typeof(string));
wibo.Columns.Add("source", typeof(string));
wibo.Columns.Add("created_at", typeof(DateTime));
foreach (JsonObject wibolist in wiboArr)
{
DataRow dr = wibo.NewRow();
dr["id"] = Convert.ToInt64(wibolist["id"]);
JsonObject user = wibolist["user"] as JsonObject;
dr["screen_name"] = user["screen_name"].ToString();
dr["profile_image_url"] = user["profile_image_url"].ToString();
dr["text"] = wibolist["text"].ToString();
dr["source"] = wibolist["source"].ToString();
dr["created_at"] = DateTime.ParseExact(wibolist["created_at"].ToString(), "ddd MMM dd HH:mm:ss K yyyy", new System.Globalization.CultureInfo("en-GB"));
wibo.Rows.Add(dr);
}
通過上面的兩大步驟,實現了取得微博信息,并將其放入DataTable中的功能。
后記:新浪微博的創建時間格式是:Tue May 31 17:46:55 +0800 2011,網上也沒找到相關資料,開始的時候是自己專門編寫了兩個函數用來解析這個時間字符串,后來csdn上的一個朋友dalmeeme以一行代碼的形式(DateTime自帶的一個方法)就實現了,在此一并感謝!
總結
以上是生活随笔為你收集整理的java怎么实现同步到微博功能_新浪微博信息站外同步的完整实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java遍历字典_Java中的HashM
- 下一篇: java黄油刀_一篇文章玩转Butter