日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习使用新浪接口随笔(一)

發布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习使用新浪接口随笔(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小生初入C#領域,因為學校部門里面在辦新浪微博活動的時候,需要統計轉發數量。(個別團或者班級會去買轉發數量,這沒節操的),所以有的時候統計起來的時候,會比較麻煩。于是就產生了想利用新浪的API制作一個能統計微博轉發數量的工具,因為學校里面微博的轉發量不會很大,而且新浪上面的的應用又要錢。。。。具體就是把轉發過微博的昵稱記錄下來,存到Excel文件當中,再對Excel文件里的名稱那一列進行排序,去掉重復的。為了加深理解和記錄下編程中遇到的問題,所以就寫了這個隨筆。

1.去新浪開放平臺申請一個應用(當然這個應用是不需要提交到新浪那邊審核的,因為我只是自己使用而已)

2.申請完畢后,可以在應用信息那邊得到App Key、App Secret、Access Token(這個可以通過調用OAuth)的方法得到。

3.寫程序

4.測試使用

新建項目什么的就不說了,我用的是VS2012,新建了個WPF的項目,因為對WPF的效果還是蠻看好的。代碼部分我上網找了一些例子看的。

//其他的using就不貼了 using NetDimension.Weibo;//獲得AcessToken的方法 //因為我的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{
          //使用賬戶登錄(指的是申請應用使用到的帳號,或者可以自己設置15個測試帳號(在未經過新浪審核的條件下,只能設置15個測試帳號))
if (o.ClientLogin(username, userpwd)){AccessToken accessToken = o.GetAccessTokenByPassword(username, userpwd); //請注意這里返回的是AccessToken對象,不是string }}catch (WeiboException ex){MessageBox.Show(ex.Message);}return o;

接下來是在統計轉發數量遇到的問題。

新浪API里面有個接口statuses/querymid和statuses/queryid 分別是通過mid和id獲取對方的值。

因為在單條微博的地址欄里面,只能得到mid,就是類似A3Bhu9rW6的東西,所以我調用了statuses/querymid接口,然后調用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有問題吧。。。。");}}

到這里其實都沒什么問題,早上在測試轉發數量大于50條的微博的時候,出現了一個問題。

statuses/repost_timeline接口可以得到轉發數量的詳細json信息,官方的解釋,這個接口只能獲取最新的2000條記錄,數據的結構有點讓我凌亂,昨天解析這個數據的時候,多謝@dudu大神的指導,使用Json.NET并通過下面的代碼提取轉發人的名稱。

var jObject = JObject.Parse(jsonStr);Console.WriteLine(jObject["reposts"][0]["user"]);

statuses/repost_timeline接口默認每一頁是50條數據,我實際測起來是這樣,而不是官方文檔里面說的20條。一旦大于50條的數據,就要通過接口里面的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接口默認讀取50條數據//如果數據大于50條,則進行分批讀取 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);}

當時一直在糾結怎么取出每次讀取的數據實際的數量,因為在最后一頁當中,不可能都是50條數據,有可能是40、30等等。后來才發現_msgInfo.Statuses.Count()這句代碼就可以直接得到數量。。。。

這些就是目前遇到的問題,下一步,想研究下大于2000條的數據要怎么取出來的,然后再加個抽獎的小功能。

PS:小生希望有大神看到這個隨筆的時候,能給與一些指導哈,我知道我的代碼有一些不規范,而且初次調用這些接口,處理方式肯定有一些不對的地方!

?

?

轉載于:https://www.cnblogs.com/Manofthecursed/p/3247876.html

總結

以上是生活随笔為你收集整理的学习使用新浪接口随笔(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。