学习使用新浪接口随笔(一)
小生初入C#領(lǐng)域,因?yàn)閷W(xué)校部門里面在辦新浪微博活動的時(shí)候,需要統(tǒng)計(jì)轉(zhuǎn)發(fā)數(shù)量。(個(gè)別團(tuán)或者班級會去買轉(zhuǎn)發(fā)數(shù)量,這沒節(jié)操的),所以有的時(shí)候統(tǒng)計(jì)起來的時(shí)候,會比較麻煩。于是就產(chǎn)生了想利用新浪的API制作一個(gè)能統(tǒng)計(jì)微博轉(zhuǎn)發(fā)數(shù)量的工具,因?yàn)閷W(xué)校里面微博的轉(zhuǎn)發(fā)量不會很大,而且新浪上面的的應(yīng)用又要錢。。。。具體就是把轉(zhuǎn)發(fā)過微博的昵稱記錄下來,存到Excel文件當(dāng)中,再對Excel文件里的名稱那一列進(jìn)行排序,去掉重復(fù)的。為了加深理解和記錄下編程中遇到的問題,所以就寫了這個(gè)隨筆。
1.去新浪開放平臺申請一個(gè)應(yīng)用(當(dāng)然這個(gè)應(yīng)用是不需要提交到新浪那邊審核的,因?yàn)槲抑皇亲约菏褂枚?#xff09;
2.申請完畢后,可以在應(yīng)用信息那邊得到App Key、App Secret、Access Token(這個(gè)可以通過調(diào)用OAuth)的方法得到。
3.寫程序
4.測試使用
新建項(xiàng)目什么的就不說了,我用的是VS2012,新建了個(gè)WPF的項(xiàng)目,因?yàn)閷PF的效果還是蠻看好的。代碼部分我上網(wǎng)找了一些例子看的。
//其他的using就不貼了 using NetDimension.Weibo;//獲得AcessToken的方法 //因?yàn)槲业?span style="color:#000000;">AppKey和AppSecrect都存在了Settings.settings里面 OAuth o = new OAuth(Properties.Settings.Default.AppKey, Properties.Settings.Default.AppSecrect); string username = this.txtUserName.Text;string userpwd = this.txtUserPwd.Password;try{//使用賬戶登錄(指的是申請應(yīng)用使用到的帳號,或者可以自己設(shè)置15個(gè)測試帳號(在未經(jīng)過新浪審核的條件下,只能設(shè)置15個(gè)測試帳號))if (o.ClientLogin(username, userpwd)){AccessToken accessToken = o.GetAccessTokenByPassword(username, userpwd); //請注意這里返回的是AccessToken對象,不是string }}catch (WeiboException ex){MessageBox.Show(ex.Message);}return o;
接下來是在統(tǒng)計(jì)轉(zhuǎn)發(fā)數(shù)量遇到的問題。
新浪API里面有個(gè)接口statuses/querymid和statuses/queryid 分別是通過mid和id獲取對方的值。
因?yàn)樵趩螚l微博的地址欄里面,只能得到mid,就是類似A3Bhu9rW6的東西,所以我調(diào)用了statuses/querymid接口,然后調(diào)用statuses/show接口顯示這條微博的信息。
string[] MIDlist = this.txtIDlist.Text.Split(',');foreach (string msgid in MIDlist){try{string id = _sina.API.Entity.Statuses.QueryID(1, false, true, msgid);var _msgInfo = _sina.API.Entity.Statuses.Show(id);string meg = " The message ID:" + id + "\n reposts_count:" + _msgInfo.RepostsCount + "\n";RText(meg);}catch{MessageBox.Show("這ID有問題吧。。。。");}}到這里其實(shí)都沒什么問題,早上在測試轉(zhuǎn)發(fā)數(shù)量大于50條的微博的時(shí)候,出現(xiàn)了一個(gè)問題。
statuses/repost_timeline接口可以得到轉(zhuǎn)發(fā)數(shù)量的詳細(xì)json信息,官方的解釋,這個(gè)接口只能獲取最新的2000條記錄,數(shù)據(jù)的結(jié)構(gòu)有點(diǎn)讓我凌亂,昨天解析這個(gè)數(shù)據(jù)的時(shí)候,多謝@dudu大神的指導(dǎo),使用Json.NET并通過下面的代碼提取轉(zhuǎn)發(fā)人的名稱。
var jObject = JObject.Parse(jsonStr);Console.WriteLine(jObject["reposts"][0]["user"]);statuses/repost_timeline接口默認(rèn)每一頁是50條數(shù)據(jù),我實(shí)際測起來是這樣,而不是官方文檔里面說的20條。一旦大于50條的數(shù)據(jù),就要通過接口里面的page屬性,翻頁查詢。
foreach (string msgid in MIDlist){try{string id = _sina.API.Entity.Statuses.QueryID(1, false, true, msgid);int x = _sina.API.Entity.Statuses.RepostTimeline(id).TotalNumber;string[] Rname = new string[x];sb.Append("\n Reposts Count:" + x);sb.Append("\n The message ID:" + id);//Statuses.RepostTimeline接口默認(rèn)讀取50條數(shù)據(jù)//如果數(shù)據(jù)大于50條,則進(jìn)行分批讀取 int m=0;if (x > 50){for (int i = 1; i < x / 50 + 1; i++){var _msgInfo = _sina.API.Entity.Statuses.RepostTimeline(id, "0", "0", 50, i, 0);//IEnumerable<Entity> collection=_msgInfo.Statuses;//collection.Count();var jObject = JObject.Parse(_msgInfo.ToString());for (int n = 0; n < _msgInfo.Statuses.Count(); n++){sb.Append("\n Reposts User:" + jObject["reposts"][n]["user"]["name"]);Rname[m] = jObject["reposts"][n]["user"]["name"].ToString();m++;}sb.Append("\n--------------");}}else{var _msgInfos = _sina.API.Entity.Statuses.RepostTimeline(id);var jObjects = JObject.Parse(_msgInfos.ToString());for (int n = 0; n < _msgInfos.Statuses.Count(); n++){sb.Append("\n Reposts User:" + jObjects["reposts"][n]["user"]["name"]);Rname[m] = jObjects["reposts"][n]["user"]["name"].ToString();m++;}sb.Append("\n--------------");}RText(sb.ToString());_t.Create_Excel(Rname, x); } catch (WeiboException ex){MessageBox.Show(ex.Message);}當(dāng)時(shí)一直在糾結(jié)怎么取出每次讀取的數(shù)據(jù)實(shí)際的數(shù)量,因?yàn)樵谧詈笠豁摦?dāng)中,不可能都是50條數(shù)據(jù),有可能是40、30等等。后來才發(fā)現(xiàn)_msgInfo.Statuses.Count()這句代碼就可以直接得到數(shù)量。。。。
這些就是目前遇到的問題,下一步,想研究下大于2000條的數(shù)據(jù)要怎么取出來的,然后再加個(gè)抽獎(jiǎng)的小功能。
PS:小生希望有大神看到這個(gè)隨筆的時(shí)候,能給與一些指導(dǎo)哈,我知道我的代碼有一些不規(guī)范,而且初次調(diào)用這些接口,處理方式肯定有一些不對的地方!
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Manofthecursed/p/3247876.html
總結(jié)
以上是生活随笔為你收集整理的学习使用新浪接口随笔(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 1860 Currency Ex
- 下一篇: 远程登录:ftp