新浪API2.0調(diào)用痕跡 最近本人研究怎么調(diào)用新浪的接口。一開(kāi)始由于感覺(jué)時(shí)間的倉(cāng)促就從網(wǎng)上找了個(gè)實(shí)例。哪知道在模擬授權(quán)成功了以后進(jìn)行接口的調(diào)用的時(shí)候才知道知道。人家驗(yàn)證是OAuth1.0認(rèn)證。而現(xiàn)在新浪接口是1.0的。老是調(diào)用的時(shí)候報(bào)Http403 五位碼表示access_token無(wú)效。這樣一來(lái)我都弄瘋了,連續(xù)折騰了3天,我都太折騰瘋了??偨Y(jié)一句話哥太心急了。搞了半天就是找錯(cuò)。問(wèn)人。折騰了半天。沒(méi)有啥人能幫上忙。所以我就下定決心研究別人代碼。通過(guò)我晚上苦苦的研究終于弄清楚了點(diǎn)思路了。第二天早上一起來(lái)靈感移動(dòng)。其實(shí)真的他媽那么簡(jiǎn)單啊。下面我就給大家介紹我的實(shí)現(xiàn)思路。當(dāng)然我也借助了別人寫(xiě)的SDK.加以我的改變生產(chǎn)了dll文件。提供后續(xù)開(kāi)發(fā)這學(xué)習(xí)。我提供下載地址。希望能給苦命的程序員又所幫助。尤其是像我這樣的菜鳥(niǎo)。老鳥(niǎo)當(dāng)然不需要這些的。廢話都不說(shuō)了。下面就介紹下實(shí)現(xiàn)思路吧。 1首先我介紹下OAuth授權(quán)的內(nèi)部原理: A:客戶端從服務(wù)器端獲取一個(gè)沒(méi)有經(jīng)過(guò)授權(quán)的tonken(一個(gè)32位的字符串) B:用戶從客戶端獲取一個(gè)驗(yàn)證編號(hào)。 C:客戶端向服務(wù)器端獲取一個(gè)成功的授權(quán)編號(hào) 現(xiàn)在也不說(shuō)這些內(nèi)部原理了:直接闡述代碼吧。 const long clientID = 1253617897;//申|¨o請(qǐng)?的ì?app_key//獲取程序key const string responseType = "authorization_code";//這個(gè)值好像可以起好多的。集體是代表什么我還是希望別人多多參考新浪API const string redirectUri = "http://localhost:1978/sina/URLredirection.aspx";//回?調(diào)ì??地ì?址?¤這個(gè)回調(diào)地址是設(shè)置在新浪申請(qǐng)的應(yīng)該平臺(tái)里面的。。它在高級(jí)信息里面設(shè)置的。并且可以綁定域名 像我就直接使用127.0.0.1來(lái)玩 const string clientSecret = "";//申|¨o請(qǐng)?的ì?app_secret ILog logger = LogManager.GetLogger(typeof(SinaSerive)); SinaSerive serive = new SinaSerive(clientID.ToString(), clientSecret, redirectUri); protected void Page_Load(object sender, EventArgs e) { } /// <summary> /// 提?¨¢交?請(qǐng)?求¨?獲?取¨?code /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button1_Click(object sender, EventArgs e) { serive.GetAuthorizationCode(); //可¨|以°?返¤|ì回?code的ì?值|ì 這個(gè)值每次都要獲取才能發(fā)送 } 下面的文件是回傳地址里面的代碼 public partial class URLredirection : System.Web.UI.Page { const long clientID = 1253617897;//申|¨o請(qǐng)?的ì?app_key const string responseType = "authorization_code"; const string redirectUri = "http://localhost:1978/sina/URLredirection.aspx";//回?調(diào)ì??地ì?址?¤ const string clientSecret = "a6cecf1c8fdfded99791a38efcde8e55";//申|¨o請(qǐng)?的ì?app_secret ILog logger = LogManager.GetLogger(typeof(SinaSerive)); SinaSerive serive = new SinaSerive(clientID.ToString(), clientSecret, redirectUri); protected void Page_Load(object sender, EventArgs e) { } /// <summary> /// 提?¨¢交? /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button1_Click(object sender, EventArgs e) { try { serive.GetAccessTokenByAuthorizationCode(Request.QueryString["code"].ToString());//接¨?收o?code的ì?值|ì User usermodel = serive.Users_Show(Convert.ToInt64(serive.Token.uid)); Status s = serive.Statuses_Update(this.TextBox1.Text.Trim()); if (s.id > 0) // Page.ClientScript.RegisterStartupScript(this.GetType(), "1001", "<script>alert(發(fā)¤?é布?到ì?微?é博?成¨|功|!ê?)</script>"); Response.Write("成¨|功|了¢?"); else // Page.ClientScript.RegisterStartupScript(this.GetType(), "1002", "<script>alert(發(fā)¤?é布?到ì?微?é失o?ì敗?¨1!ê?)</script>"); Response.Write("失o?ì敗?¨1了¢?"); } catch (Exception) { Response.Write("你所擁有的code失效?ì,必須重新獲取¨); //Page.ClientScript.RegisterStartupScript(this.GetType(), "1002", "<script>alert(必à?須?重?新?獲?取¨?)</script>"); } } } 上面這些亂碼我就不整了。。那些亂碼要是別人復(fù)雜的時(shí)候可以把它去掉就行了。如果真的有不明白的地方可以和我探討學(xué)習(xí)下。畢竟程序員都是很苦命人。我們苦命的人就互相幫助吧。聯(lián)系方式QQ:952487152。。。。上面完全屬于個(gè)人感受以理解。當(dāng)然我也是表面理解下。如果要深入學(xué)習(xí)者可以去參考API。 |
|
來(lái)自: 實(shí)力決定地位 > 《新浪API》