java怎么实现同步到微博功能_新浪微博信息站外同步的完整实现
最近遇到一個(gè)項(xiàng)目,其中需要將用戶的微博信息與自己的網(wǎng)站項(xiàng)目上同步,好在新浪微博是提供了API的,大概查閱了一下,信息同步需要調(diào)用的是
在關(guān)于授權(quán)機(jī)制說明中,新浪微博的API一共有兩種驗(yàn)證機(jī)制,分別是:OAuth和Basic Auth,OAuth沒有細(xì)看,不去管他,在Basic Auth授權(quán)介紹部分提到了cnblogs上的一篇文章,?http://www.cnblogs.com/QLeelulu/archive/2009/11/22/1607898.html,這篇文章給出了在asp.net中如何去以GET方式提交一個(gè)http請(qǐng)求,并給出返回內(nèi)容的代碼,順著這篇文章又找到了另一篇博客園團(tuán)隊(duì)的文章:http://www.cnblogs.com/cmt/archive/2010/05/13/1733904.html,這篇文章實(shí)現(xiàn)了站外發(fā)送微博的功能。結(jié)合這兩篇文章,實(shí)現(xiàn)了新浪微博同步的功能。
下面介紹實(shí)現(xiàn)微博同步的步驟:
1.首先為了實(shí)現(xiàn)http請(qǐng)求,需要引入using System.Net;命名空間,同時(shí)后面在轉(zhuǎn)換字符集部分及取得返回內(nèi)容部分,需要另外兩個(gè)命名空間:using System.Text;和using System.IO;
接下來就可以開始編寫代碼實(shí)現(xiàn)取得json數(shù)據(jù)了。
(1)準(zhǔn)備用戶驗(yàn)證數(shù)據(jù)
string usernamePassword = username + ":" + password;
username是你的微博登錄用戶名,password是你的博客密碼。
(2)準(zhǔn)備API的URL,URL中的參數(shù)直接以GET方式附在URL中,剛開始博客園的文章沒有細(xì)看,直接貼過來代碼,把參數(shù)附加在data中,總是返回400錯(cuò)誤,后來查了一下msdn,發(fā)現(xiàn)HttpWebRequest的默認(rèn)請(qǐng)求方式就是GET,再者既然是GET方式,應(yīng)該就是以URL來傳遞參數(shù)的。
string url = "https://api.weibo.com/2/statuses/user_timeline.json?source="+apikey+"&count="+count+"";
上面的apikey是做為新浪微博用戶的開發(fā)者申請(qǐng)的,應(yīng)該是唯一的,博客園的文章中說需要發(fā)一封郵件審核,我沒有發(fā)郵件,直接申請(qǐng),也得到了一個(gè)APIKEY,信息也可以同步,只不過當(dāng)在站外發(fā)送微博信息時(shí),在來源部分會(huì)是:未審核應(yīng)用。后面還有uid和screen_name 等參數(shù),具體的參數(shù)API文檔都有說明。
(3)組織代碼實(shí)現(xiàn)HttpWebRequest請(qǐng)求
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;
//驗(yàn)證用戶授權(quán)機(jī)制
myReq.Headers.Add("Authorization", "Basic" + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
(4)取得返回內(nèi)容,其中用到了Stream類。
WebResponse wr = myReq.GetResponse();
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
string content = reader.ReadToEnd();
上面的content即為取得的微博信息的json格式的內(nèi)容,到此為止,已經(jīng)實(shí)現(xiàn)了如何獲得微博內(nèi)容的功能。接下來的部分就是如何格式化json內(nèi)容,以相應(yīng)的形式顯示在網(wǎng)頁中。
2.在asp.net中格式化json數(shù)據(jù)。
取得json數(shù)據(jù)后,到網(wǎng)上搜了一下,大多都是介紹如何在javascript中去以鍵值形式讀取的,本人對(duì)javascript比較畏懼。其中有兩篇文章是以類的形式實(shí)現(xiàn)了如何在asp.net中讀取json數(shù)據(jù),沒有去實(shí)踐。后來在一篇文章中發(fā)現(xiàn)Jayrock.Json,使用起來比較簡單,同時(shí)有一篇word的使用說明文檔。下面的代碼實(shí)現(xiàn)是基于Jayrock.Json實(shí)現(xiàn)的。Jayrock.Json中基本是以JsonArray和JsonObject的轉(zhuǎn)換來實(shí)現(xiàn)以鍵值方式讀取json數(shù)據(jù),我是將取得的數(shù)據(jù)放入DataTable中,后來想想這樣也有好處,前臺(tái)的UI可以隨意設(shè)計(jì),最終綁定到DataTabel即可。
下面是格式化Json數(shù)據(jù)并實(shí)現(xiàn)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);
}
通過上面的兩大步驟,實(shí)現(xiàn)了取得微博信息,并將其放入DataTable中的功能。
后記:新浪微博的創(chuàng)建時(shí)間格式是:Tue May 31 17:46:55 +0800 2011,網(wǎng)上也沒找到相關(guān)資料,開始的時(shí)候是自己專門編寫了兩個(gè)函數(shù)用來解析這個(gè)時(shí)間字符串,后來csdn上的一個(gè)朋友dalmeeme以一行代碼的形式(DateTime自帶的一個(gè)方法)就實(shí)現(xiàn)了,在此一并感謝!
總結(jié)
以上是生活随笔為你收集整理的java怎么实现同步到微博功能_新浪微博信息站外同步的完整实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: java遍历字典_Java中的HashM
 - 下一篇: java对象引用出错_“Java有值传递