日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

新浪微博PC客户端(DotNet WinForm版)——功能实现分解介绍

發(fā)布時間:2024/1/8 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新浪微博PC客户端(DotNet WinForm版)——功能实现分解介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一篇:新浪微博PC客戶端(DotNet WinForm版)—— 初探

?

說明一下:只是興趣,并不是想發(fā)布為一個軟件,說實在的,如果要作為一個軟件發(fā)布,要做的工作還有很多。?

?

新浪微博API地址:http://open.t.sina.com.cn/wiki/index.php/API%E6%96%87%E6%A1%A3?retcode=0。

目前提供的SDK:

?

  • 1?Adobe Air
  • 2?Flash SDK
  • 3?PHP
  • 4?C++
  • 5?C#
  • 6?Java SDK
  • 7?Python SDK
  • 8?Javascript SDK(JSSDK)
  • 9?iOS SDK
  • 10?OAuth Library

其它的不清楚,C#的還不完善,而且不是官方的。

?

當前已實現(xiàn)的功能:

?1、HTTP普通鑒權(quán)(Basic Authentication)的身份驗證方式,說白了就是每次訪問API都要發(fā)送帳號和密碼,當然是不安全的,但是相比OAuth驗證方式門檻要低的多。要使用OAuth驗證方式可以去看下SDK。

===》account/verify_credentials?驗證當前用戶身份是否合法?

?

OAuth是一種國際通用的授權(quán)方式,它的特點是不需要用戶在第三方應用輸入用戶名及密碼。OAuth的技術(shù)說明可參看官方網(wǎng)站 http://oauth.net。學習和研究OAuth的意義不僅僅在于新浪圍脖,而是對以后開發(fā)類似的項目非常有意義和價值(如果你還不知道OAuth授權(quán)方式)。

?

驗證通過則返回用戶的個人信息,參照下面的API字段說明。

API字段說明

  • status?微博信息內(nèi)容
  • user?用戶資料信息
  • comment?評論信息描述
  • direct_message?私信信息
  • 省份城市編碼表

?

上一篇說了,API返回的結(jié)果格式有兩種:XML和JSON,在調(diào)用API的時候可以指定。

這里我指定的是XML格式,實現(xiàn)代碼如下:

登錄窗體:FrmLogin.cs,可以看上一篇的截圖。?

(1)把申請AppKey和AppSecret寫到app.config?

<? xml?version="1.0"?encoding="utf-8"? ?>
< configuration >
??
< appSettings >
????
< add? key ="AppKey" ?value ="3476523072" />
????
< add? key ="AppSecret" ?value ="3c909770efa6865fd5843a564545826d" />
??
</ appSettings >
</ configuration >

?

要申請AppKey,需要登錄新浪圍脖,然后在這個地址創(chuàng)建應用并生成:?http://open.t.sina.com.cn/apps/new。

(2)創(chuàng)建了一個靜態(tài)類,保存用戶信息?

代碼 using ?System;
using ?System.Collections.Generic;
using ?System.Linq;
using ?System.Text;
using ?System.Runtime.Serialization;

namespace ?MBClient.Entities
{
????
/// ? <summary>
????
/// ?微博帳號資料
????
/// ? </summary>
???? internal ? class ?UserInfo
????{
????????
internal ?UserInfo(){?}

????????
internal ? static ? string ?UserName?{? get ;? set ;?}
????????
internal ? static ? string ?Password?{? get ;? set ;?}
????????
internal ? static ? string ?UserNamePassword?{? get ;? set ;?}

????????
internal ? static ? int ?ID?{? get ;? set ;?}

????????
internal ? static ? string ?ScreenName?{? get ;? set ;?}

????????
internal ? static ? string ?Name?{? get ;? set ;?}

????????
internal ? static ? int ?Province?{? get ;? set ;?}

????????
internal ? static ? int ?City?{? get ;? set ;?}

????????
internal ? static ? string ?Location?{? get ;? set ;?}

????????
internal ? static ? string ?Description?{? get ;? set ;?}

????????
internal ? static ? string ?Url?{? get ;? set ;?}

????????
internal ? static ? string ?ProfileImageUrl?{? get ;? set ;?}

????????
internal ? static ? string ?Domain?{? get ;? set ;?}

????????
internal ? static ? string ?Gender?{? get ;? set ;?}

????????
/// ? <summary>
????????
/// ?粉絲數(shù)
????????
/// ? </summary>
???????? internal ? static ? int ?FollowersCount?{? get ;? set ;?}

????????
/// ? <summary>
????????
/// ?關注數(shù)
????????
/// ? </summary>
???????? internal ? static ? int ?FriendsCount?{? get ;? set ;?}

????????
/// ? <summary>
????????
/// ?微博數(shù)
????????
/// ? </summary>
???????? internal ? static ? int ?StatusesCount?{? get ;? set ;?}

????????
internal ? static ? int ?FavouritesCount?{? get ;? set ;?}

????????
/// ? <summary>
????????
/// ?微博帳號日期
????????
/// ? </summary>
???????? internal ? static ? string ?CreatedAt?{? get ;? set ;?}

????????
internal ? static ? bool ?Following?{? get ;? set ;?}

????????
internal ? static ? bool ?Verified?{? get ;? set ;?}

????????
internal ? static ? bool ?AllowAllActMsg?{? get ;? set ;?}

????????
internal ? static ? bool ?GeoEnabled?{? get ;? set ;?}

????}
}

?

??

(3)調(diào)用API?

代碼 using ?System;
using ?System.Collections.Generic;
using ?System.Text;
using ?System.IO;
using ?System.Net;
using ?MBClient.Entities;
using ?System.Runtime.Serialization.Json;
using ?System.Data;
using ?System.Drawing;
using ?MBClient.Class;

namespace ?MBClient.API
{
????
internal ? class ?ReadDataBySinaAPI
????{
????????
internal ?ReadDataBySinaAPI()?{?}

????????
/// ? <summary>
????????
/// ?根據(jù)用戶登錄信息登錄并讀取用戶信息到DataSet
????????
/// ? </summary>
????????
/// ? <param?name="url"> API?URL?(XML?Format) http://api.t.sina.com.cn/account/verify_credentials.xml?source=AppKey </param>
????
/// ? <param?name="httpRequestMethod)"> HTTP請求方式:GET或POST </param>
????????
/// ? <returns></returns>
???????? internal ? static ?DataSet?ReadXMLDataToDataSet( string ?url,? string ?httpRequestMethod)
????????{
????????????
try
????????????{
????????????????WebResponse?wr?
= ?BasicAuthorizationRequest(url,?httpRequestMethod).GetResponse();
????????????????DataSet?ds?
= ? new ?DataSet();
????????????????Stream?receieveStream?
= ?wr.GetResponseStream();
????????????????StreamReader?reader?
= ? new ?StreamReader(receieveStream,?Encoding.UTF8);
????????????????ds.ReadXml(reader);
????????????????reader.Close();
????????????????receieveStream.Close();
????????????????wr.Close();
????????????????
return ?ds;
????????????}
????????????
catch ?(Exception?e)
????????????{
????????????????
return ? null ;
????????????}
????????}

????????
/// ? <summary>
????????
/// ?HTTP普通驗證(Basic?Authentication)方式
????????
/// ? </summary>
????????
/// ? <param?name="url"> API?URL </param>
????????
/// ? <param?name="httpRequestMethod)"> HTTP請求方式:GET或POST </param>
????????
/// ? <returns></returns>
???????? private ? static ?WebRequest?BasicAuthorizationRequest( string ?url,? string ?httpRequestMethod)
????????{
????????????CredentialCache?mycache?
= ? new ?CredentialCache();
????????????mycache.Add(
new ?Uri(url),? " Basic " ,? new ?NetworkCredential(UserInfo.UserName,?UserInfo.Password));
????????????WebRequest?myReq?
= ?WebRequest.Create(url);
????????????myReq.Credentials?
= ?mycache;
????????????myReq.Headers.Add(
" Authorization " ,? " Basic? " ? + ?Convert.ToBase64String( new ?ASCIIEncoding().GetBytes(UserInfo.UserNamePassword)));
????????????myReq.Method?
= ?httpRequestMethod;
????????????
return ?myReq;
????????}

????}
}

?

?

?我這里直接用DataSet讀取XML了,當然也可以將XML數(shù)據(jù)反序列化,后面會看到,我將返回的JSON格式的圍脖信息進行了反序列化。

(4)登錄窗體代碼

代碼 using ?System;
using ?System.Data;
using ?System.Windows.Forms;
using ?MBClient.Entities;
using ?MBClient.API;
using ?MBClient.Class;
using ?Sunisoft.IrisSkin;
using ?System.Threading;

namespace ?MBClient
{
????
public ? partial ? class ?FrmLogin?:?Form
????{
????????
string ?ErrorMsg? = ? null ;
????????
public ?FrmLogin()
????????{
????????????InitializeComponent();
????????????
this .skinEngine.SkinFile? = ? @" skin\msn.ssk " ;
????????????
this .Text? = ? " 登錄 " ? + ?Properties.Resources.SoftName;
????????}

????????
private ? void ?FrmLogin_Load( object ?sender,?EventArgs?e)
????????{
????????????
// this.TransparencyKey?=?this.BackColor;
????????????
// 各線程之間沒有互相爭搶控件資源的情況,設置允許跨線程訪問
????????????CheckForIllegalCrossThreadCalls? = ? false ;
????????????cBoxAccountSina.Select();
????????????InitBackGroundWorker();
????????}

????????
private ? void ?InitBackGroundWorker()
????????{
????????????backWorker.DoWork?
+= ? new ?System.ComponentModel.DoWorkEventHandler(backWorker_DoWork);
????????????backWorker.ProgressChanged?
+= ? new ?System.ComponentModel.ProgressChangedEventHandler(backWorker_ProgressChanged);
????????????backWorker.RunWorkerCompleted?
+= ? new ?System.ComponentModel.RunWorkerCompletedEventHandler(backWorker_RunWorkerCompleted);
????????}

????????
void ?backWorker_ProgressChanged( object ?sender,?System.ComponentModel.ProgressChangedEventArgs?e)
????????{
????????????
// throw?new?NotImplementedException();
????????}

????????
void ?backWorker_RunWorkerCompleted( object ?sender,?System.ComponentModel.RunWorkerCompletedEventArgs?e)
????????{
????????????
if ?(ErrorMsg? == ? null )
????????????{
????????????????System.Threading.Thread.Sleep(
200 );
????????????????FrmMain?main?
= ? new ?FrmMain();
????????????????
this .Hide();
????????????????main.Show();
????????????}
????????????
else
????????????{
????????????????tabControl.Visible?
= ? true ;
????????????????MessageBox.Show(ErrorMsg,?
" 登錄失敗 " ,?MessageBoxButtons.OK,
????????????????????MessageBoxIcon.Exclamation);
????????????}
????????}

????????
void ?backWorker_DoWork( object ?sender,?System.ComponentModel.DoWorkEventArgs?e)
????????{
????????????
try
????????????{
????????????????ErrorMsg?
= ? null ;
????????????????UserInfo.UserName?
= ?cBoxAccountSina.Text.Trim();?;
????????????????UserInfo.Password?
= ?txtPwdSina.Text.Trim();
????????????????UserInfo.UserNamePassword?
= ?UserInfo.UserName? + ? " : " ? + ?UserInfo.Password;

????????????????
// source參數(shù)為申請的新浪微博App?Key
???????????????? string ?url? = ?Function.ACCOUNTVERIFY? + ? " ?source= " ? + ?Function.APPKEY;
????????????????DataSet?ds?
= ?ReadDataBySinaAPI.ReadXMLDataToDataSet(url,? " GET " );
????????????????DataRow?dr?
= ?ds.Tables[ 0 ].Rows[ 0 ];

????????????????
#region ? // 將用戶信息保存到UserInfo
????????????????UserInfo.AllowAllActMsg?
= ? bool .Parse(dr[ " allow_all_act_msg " ].ToString());
????????????????UserInfo.City?
= ? int .Parse(dr[ " city " ].ToString());
????????????????UserInfo.CreatedAt?
= ?dr[ " created_at " ].ToString();
????????????????UserInfo.Description?
= ?dr[ " description " ].ToString();
????????????????UserInfo.Domain?
= ?dr[ " domain " ].ToString();
????????????????UserInfo.FavouritesCount?
= ? int .Parse(dr[ " favourites_count " ].ToString());
????????????????UserInfo.FollowersCount?
= ? int .Parse(dr[ " followers_count " ].ToString());
????????????????UserInfo.Following?
= ? bool .Parse(dr[ " following " ].ToString());
????????????????UserInfo.FriendsCount?
= ? int .Parse(dr[ " friends_count " ].ToString());
????????????????UserInfo.Gender?
= ?dr[ " gender " ].ToString();
????????????????UserInfo.GeoEnabled?
= ? bool .Parse(dr[ " geo_enabled " ].ToString());
????????????????UserInfo.ID?
= ? int .Parse(dr[ " ID " ].ToString());
????????????????UserInfo.Location?
= ?dr[ " location " ].ToString();
????????????????UserInfo.Name?
= ?dr[ " name " ].ToString();
????????????????UserInfo.ProfileImageUrl?
= ?dr[ " profile_image_url " ].ToString();
????????????????UserInfo.Province?
= ? int .Parse(dr[ " province " ].ToString());
????????????????UserInfo.ScreenName?
= ?dr[ " screen_name " ].ToString();
????????????????UserInfo.StatusesCount?
= ? int .Parse(dr[ " statuses_count " ].ToString());
????????????????UserInfo.Url?
= ?dr[ " url " ].ToString();
????????????????UserInfo.Verified?
= ? bool .Parse(dr[ " verified " ].ToString());
????????????????
#endregion
????????????}
????????????
catch ?(Exception?ex)
????????????{
????????????????ErrorMsg?
= ?ex.Message;
????????????}
????????}

????????
private ? void ?FrmLogin_FormClosing( object ?sender,?FormClosingEventArgs?e)
????????{
????????????Application.ExitThread();
????????}

????????
private ? void ?btnLoginSina_Click( object ?sender,?EventArgs?e)
????????{
????????????tabControl.Visible?
= ? false ;
????????????backWorker.RunWorkerAsync();
????????}

????????
private ? void ?btnRegSina_Click( object ?sender,?EventArgs?e)
????????{
????????????System.Diagnostics.Process.Start(
" http://t.sina.com.cn/reg.php?ps=u3&lang=zh " );
????????}
????}
}

?

?

關于登錄窗體的代碼,說兩點:

(1)使用皮膚

在你的Windows系統(tǒng)盤搜索IrisSkin2.dll

找到后添加到工具箱,右擊工具箱——選擇項——選擇這個dll

然后將SkinEngine控件拖到窗體上,在代碼中按照如下方式寫:

this .skinEngine.SkinFile? = ? @" skin\msn.ssk " ;

?

這個ssk文件我使用了網(wǎng)上的資源,你也可以到網(wǎng)上去搜,可以下載到有20種左右的皮膚,有了皮膚文件,要實現(xiàn)換膚功能就非常簡單了。你也可以使用皮膚工具生成皮膚,如:skin++。?

?

(2)使用BackgroundWorker異步加載 :關于BackgroundWorker,MSDN說的很清楚了,這里不再贅述,http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(v=vs.80).aspx。

?

2、獲取當前登錄用戶及其所關注用戶的最新微博消息,并分頁顯示,這兒是我代碼最多的地方,主要是由于所有顯示的控件都動態(tài)加載的緣故。

今天看到新浪圍脖API更新了(近一個周都沒看),之前是只能傳頁碼,默認每頁返回20條數(shù)據(jù);現(xiàn)在是可以傳頁碼和返回數(shù)據(jù)的條數(shù)。

===》statuses/friends_timeline?獲取當前登錄用戶及其所關注用戶的最新微博消息 (別名: statuses/home_timeline)

?

這里在第一次加載和翻頁時也使用BackgroundWorker。具體代碼不貼出來了,代碼太長,后面提供下載,供參考。

?

具體實現(xiàn)簡單說一下:

根據(jù)調(diào)用接口返回的JSON數(shù)據(jù)格式化為泛型對象集合,然后遍歷集合在Panel中動態(tài)添加控件顯示數(shù)據(jù),主要一點是要計算好控件的位置。

(1)圍脖類??

代碼 using ?System;
using ?System.Collections.Generic;
using ?System.Linq;
using ?System.Text;
using ?System.Runtime.Serialization;

namespace ?MBClient.Entities
{
????[DataContract]
????
internal ? class ?Status
????{
????????[DataMember]
????????
internal ? string ?created_at?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?id?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?text?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?source?{? get ;? set ;?}
????????[DataMember]
????????
internal ? bool ?favorited?{? get ;? set ;?}
????????[DataMember]
????????
internal ? bool ?truncated?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?geo?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?in_reply_to_status_id?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?in_reply_to_user_id?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?in_reply_to_screen_name?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?thumbnail_pic?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?bmiddle_pic?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?original_pic?{? get ;? set ;?}
????????[DataMember]
????????
internal ?PostUser?user?{? get ;? set ;?}
????????[DataMember]
????????
internal ?RetweetedStatus?retweeted_status?{? get ;? set ;?}
????}
}

?

??

(2)用戶類??

代碼 using ?System;
using ?System.Collections.Generic;
using ?System.Linq;
using ?System.Text;
using ?System.Runtime.Serialization;

namespace ?MBClient.Entities
{
????[DataContract]
????
internal ? class ?PostUser
????{
????????[DataMember]
????????
internal ? string ?id?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?screen_name?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?name?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?province?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?city?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?location?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?description?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?url?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?profile_image_url?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?domain?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?gender?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?followers_count?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?friends_count?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?statuses_count?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?favourites_count?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?created_at?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?following?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?verified?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?allow_all_act_msg?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?geo_enabled?{? get ;? set ;?}
????}
}

?

?

(3)轉(zhuǎn)發(fā)的圍脖類?

代碼 using ?System;
using ?System.Collections.Generic;
using ?System.Linq;
using ?System.Text;
using ?System.Runtime.Serialization;

namespace ?MBClient.Entities
{
????[DataContract]
????
internal ? class ?RetweetedStatus
????{
????????[DataMember]
????????
internal ? string ?created_at?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?id?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?text?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?source?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?favorited?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?truncated?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?geo?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?in_reply_to_status_id?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?in_reply_to_user_id?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?in_reply_to_screen_name?{? get ;? set ;?}
????[DataMember]
????????
internal ? string ?thumbnail_pic?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?bmiddle_pic?{? get ;? set ;?}
????????[DataMember]
????????
internal ? string ?original_pic?{? get ;? set ;?}
????????[DataMember]
????????
internal ?PostUser?user?{? get ;? set ;?}
????}
}

?

??

(4)根據(jù)URL輸出頭像或圖片?

?? ? ? ? /// ? <summary>
????????
/// ?獲取并輸出圖片
????????
/// ? </summary>
????????
/// ? <param?name="imgUrl"> 圖片URL地址 </param>
????????
/// ? <returns></returns>
???????? internal ? static ?Image?GetAvatarImage( string ?imgUrl)
????????{
????????????
try
????????????{
????????????????Uri?myUri?
= ? new ?Uri(imgUrl);
????????????????WebRequest?webRequest?
= ?WebRequest.Create(myUri);
????????????????WebResponse?webResponse?
= ?webRequest.GetResponse();
????????????????Bitmap?myImage?
= ? new ?Bitmap(webResponse.GetResponseStream());

????????????????
return ?(Image)myImage;
????????????}
????????????
catch ?(Exception?e)
????????????{
????????????????
return ? null ;
????????????}
????????}

???

可以去看一下上一篇我貼出的XML數(shù)據(jù),基本就清楚了?

?

(5)讀取微博信息并反序列化 ??

代碼 ???? /// ? <summary>
????????
/// ?以JSON格式字符串返回用戶所有關注用戶最新n條微博信息。和用戶“我的首頁”返回內(nèi)容相同。
????????
/// ? http://open.t.sina.com.cn/wiki/index.php/Statuses/friends_timeline
????????
/// ? </summary>
????????
/// ? <param?name="url"> API?URL?(JSON?Format)? http://api.t.sina.com.cn/statuses/friends_timeline.json?source=AppKey </param>
????????
/// ? <param?name="httpRequestMethod"> HTTP請求方式 </param>
????????
/// ? <returns></returns>
???????? internal ? static ? string ?ReadJsonDataToString( string ?url,? string ?httpRequestMethod)
????????{
????????????
try
????????????{
????????????????WebResponse?wr?
= ?BasicAuthorizationRequest(url,?httpRequestMethod).GetResponse();
????????????????
string ?content? = ? null ;
????????????????Stream?receieveStream?
= ?wr.GetResponseStream();
????????????????StreamReader?reader?
= ? new ?StreamReader(receieveStream,?Encoding.UTF8);
????????????????content?
= ?reader.ReadToEnd();
????????????????reader.Close();
????????????????receieveStream.Close();
????????????????wr.Close();
????????????????
return ?content;
????????????}
????????????
catch ?(Exception?e)
????????????{
????????????????
return ? null ;
????????????}
????????}

????????
/// ? <summary>
????????
/// ?將JSON格式字符串反序列化為Status集合對象
????????
/// ? </summary>
????????
/// ? <param?name="url"> 同ReadJsonDataToString() </param>
????????
/// ? <param?name="httpRequestMethod"> HTTP請求方式 </param>
????????
/// ? <returns></returns>
???????? internal ? static ?List < Status > ?DeserializeJsonToListObject( string ?url,? string ?httpRequestMethod)
????????{
????????????
try
????????????{
????????????????List
< Status > ?listObj;
????????????????MemoryStream?stream?
= ? new ?MemoryStream();
????????????????DataContractJsonSerializer?ser?
= ? new ?DataContractJsonSerializer( typeof (List < Status > ));
????????????????StreamWriter?wr?
= ? new ?StreamWriter(stream);
????????????????wr.Write(ReadJsonDataToString(url,?httpRequestMethod));
????????????????wr.Flush();
????????????????stream.Position?
= ? 0 ;
????????????????Object?obj?
= ?ser.ReadObject(stream);
????????????????listObj?
= ?(List < Status > )obj;
????????????????wr.Close();
????????????????stream.Close();
????????????????
return ?listObj;
????????????}
????????????
catch ?(Exception?e)
????????????{
????????????????
return ? null ;
????????????}
????????}

?

?

3、發(fā)表圍脖

下面的方法還是寫在ReadDataBySinaAPI這個類里。?

發(fā)表圍脖分為兩種情況:

(1)純文本 ===》statuses/update?發(fā)布一條微博信息??

代碼 ??????? /// ? <summary>
????????
/// ?發(fā)表一條微博
????????
/// ? </summary>
????????
/// ? <param?name="url"> API?URL? http://api.t.sina.com.cn/statuses/update.json ? </param>
????????
/// ? <param?name="data"> AppKey和微博內(nèi)容??"source=123456&status="?+?微博內(nèi)容;? </param>
????????
/// ? <param?name="httpRequestMethod"> HTTP請求方式 </param>
????????
/// ? <returns></returns>
???????? internal ? static ? bool ?PostBlog( string ?url,? string ?data,? string ?httpRequestMethod)
????????{
????????????
try
????????????{
????????????????HttpWebRequest?httpRequest?
= ?BasicAuthorizationRequest(url,?httpRequestMethod)? as ?HttpWebRequest;
????????????????httpRequest.ContentType?
= ? " application/x-www-form-urlencoded " ;
????????????????Encoding?encoding?
= ?Encoding.UTF8; // System.Text.Encoding.ASCII
???????????????? byte []?bytesToPost? = ?encoding.GetBytes(data); // System.Web.HttpUtility.UrlEncode(data)
????????????????httpRequest.ContentLength? = ?bytesToPost.Length;
????????????????Stream?requestStream?
= ?httpRequest.GetRequestStream();
????????????????requestStream.Write(bytesToPost,?
0 ,?bytesToPost.Length);
????????????????requestStream.Close();

????????????????
return ? true ;
????????????}
????????????
catch
????????????{
????????????????
return ? false ;
????????????}
????????}

?

????

(2)帶圖片 ===》statuses/upload?上傳圖片并發(fā)布一條微博信息??

代碼 ???????? /// ? <summary>
????????
/// ?發(fā)布帶圖片的微博
????????
/// ?ref: http://sarlmolapple.is-programmer.com/posts/22435.html
????????
/// ? </summary>
????????
/// ? <param?name="url"> 微博API </param>
????????
/// ? <param?name="data"> 包含微博內(nèi)容和圖片的集合 </param>
????????
/// ? <param?name="httpRequestMethod"> HTTP請求方式 </param>
????????
/// ? <returns></returns>
???????? internal ? static ? bool ?PostBlogWithPic( string ?url,?List < string > ?data,? string ?httpRequestMethod)
????????{
????????????
try
????????????{
????????????????HttpWebRequest?httpRequest?
= ?BasicAuthorizationRequest(url,?httpRequestMethod)? as ?HttpWebRequest;
????????????????httpRequest.PreAuthenticate?
= ? true ;
????????????????httpRequest.AllowWriteStreamBuffering?
= ? true ;
????????????????
string ?boundary? = ?Guid.NewGuid().ToString();
????????????????httpRequest.ContentType?
= ? string .Format( " multipart/form-data;?boundary={0} " ,?boundary);
????????????????
string ?header? = ? string .Format( " --{0} " ,?boundary);
????????????????
string ?footer? = ? string .Format( " --{0}-- " ,?boundary);

????????????????StringBuilder?contents?
= ? new ?StringBuilder();
????????????????contents.AppendLine(header);
????????????????contents.AppendLine(String.Format(
" Content-Disposition:?form-data;?name=\ " { 0 }\ "" ,? " status " ));
????????????????contents.AppendLine(
" Content-Type:?text/plain;?charset=utf-8 " ); // US-ASCII
????????????????contents.AppendLine( " Content-Transfer-Encoding:?8bit " );
????????????????contents.AppendLine();
????????????????
// 微博文字
????????????????contents.AppendLine(data[ 0 ]);

????????????????contents.AppendLine(header);
????????????????contents.AppendLine(
string .Format( " Content-Disposition:?form-data;?name=\ " { 0 }\ "" ,? " source " ));
????????????????contents.AppendLine(
" Content-Type:?text/plain;?charset=utf-8 " ); // US-ASCII
????????????????contents.AppendLine( " Content-Transfer-Encoding:?8bit " );
????????????????contents.AppendLine();
????????????????contents.AppendLine(Function.APPKEY);

????????????????
byte []?bytesToPost? = ?Encoding.UTF8.GetBytes(contents.ToString());

????????????????
// 微博圖片
????????????????contents? = ? null ;
????????????????contents?
= ? new ?StringBuilder();
????????????????contents.AppendLine(header);
????????????????
string ?fileHeader? = ? string .Format( " Content-Disposition:?form-data;?name=\ " { 0 }\ " ;?filename=\ " { 1 }\ "" ,? " pic " ,?boundary);
????????????????
string ?fileData? = ?Encoding.GetEncoding( " iso-8859-1 " ).GetString(File.ReadAllBytes(@data[ 1 ]));

????????????????contents.AppendLine(fileHeader);
????????????????contents.AppendLine(
" Content-Type:?application/octet-stream;?charset=utf-8 " );
????????????????contents.AppendLine(
" Content-Transfer-Encoding:?binary " );
????????????????contents.AppendLine();
????????????????contents.AppendLine(fileData);
????????????????contents.AppendLine(footer);

????????????????
byte []?bytesToPost2? = ?Encoding.GetEncoding( " iso-8859-1 " ).GetBytes(contents.ToString());

????????????????httpRequest.ContentLength?
= ?bytesToPost.Length? + ?bytesToPost2.Length;
????????????????Stream?requestStream?
= ?httpRequest.GetRequestStream();
????????????????requestStream.Write(bytesToPost,?
0 ,?bytesToPost.Length);
????????????????requestStream.Write(bytesToPost2,?
0 ,?bytesToPost2.Length);
????????????????requestStream.Close();

????????????????
return ? true ;
????????????}
????????????
catch (Exception?e)
????????????{
????????????????
return ? false ;
????????????}
????????}

?

這里要注意的一點是iso-8859-1這種編碼方式不支持中文,所以,把圖片內(nèi)容和非圖片內(nèi)容分開處理了。

?

(3)驗證輸入字數(shù)不能超過140字符?

?? ? ?? // 計算字符串長度,中文及全角算1,其它算0.5
???????? internal ? static ? int ?GetStringLength( string ?text)
????????{
????????????
int ?Len? = ? 0 ;
????????????
// 記錄非中文、非全角字符為0.5個長度
???????????? float ?charLen? = ? 0 ;
????????????
char []?chars? = ?text.ToCharArray();
????????????
for ?( int ?i? = ? 0 ;?i? < ?chars.Length;?i ++ )
????????????{

????????????????
int ?charLength? = ?Encoding.UTF8.GetByteCount(chars[i].ToString());
????????????????
if ?(charLength? == ? 3 )
????????????????{
????????????????????Len
++ ;
????????????????}
????????????????
else
????????????????{
????????????????????
if ?(charLen? == ? 0.5 )
????????????????????{
????????????????????????charLen?
= ? 0 ;
????????????????????}
????????????????????
else
????????????????????{
????????????????????????charLen?
= ? 0.5f ;
????????????????????????Len
++ ;
????????????????????}
????????????????}
????????????}
????????????
return ?Len;
????????}

?

??

4、轉(zhuǎn)發(fā)圍脖 ===》statuses/repost?轉(zhuǎn)發(fā)一條微博信息

用的這個方法PostBlog(),HTTP請求方式為POST。?

?

5、評論圍脖 ===》statuses/comment?對一條微博信息進行評論

用的這個方法PostBlog(),HTTP請求方式為POST。?

?

6、收藏圍脖 ===》favorites/create?添加收藏

用的這個方法ReadXMLDataToDataSet(),HTTP請求方式為POST。?

?

7、降低工作內(nèi)存?

?? ? ? ? /// ? <summary>
????????
/// ?設置工作內(nèi)存,降低內(nèi)存占用
????????
/// ? </summary>
????????
/// ? <param?name="maxWorkingSet"> 內(nèi)存中允許的進程的最大工作集大小(以字節(jié)為單位) </param>
???????? public ? static ? void ?SetWorkingSet( int ?maxWorkingSet)
????????{
????????????System.Diagnostics.Process.GetCurrentProcess().MaxWorkingSet?
= ?(IntPtr)maxWorkingSet;
????????}

?

HTTP請求方式,API中有說明,所以上面沒有一一指出。?

?

可參考資料:

CredentialCachehttp://msdn.microsoft.com/zh-cn/library/system.net.credentialcache(v=VS.90).aspx

WebRequesthttp://msdn.microsoft.com/zh-cn/library/system.net.webrequest(v=VS.90).aspx

NetworkCredentialhttp://msdn.microsoft.com/zh-cn/library/system.net.networkcredential(v=VS.90).aspx

Basic Access Authentication:http://en.wikipedia.org/wiki/Basic_access_authenticationBasic:基本;digest簡要?

?

枝枝節(jié)節(jié)的還有不少內(nèi)容,不一一說了,稍后我提供源碼,有興趣的可以看下,一起討論。

?

最后,圍脖=微博,呵呵。?

?

先提供編譯后的,供測試:/Files/Ferry/MBPCClient/微博客戶端.rar

?

C#源碼下載?

轉(zhuǎn)載于:https://www.cnblogs.com/Ferry/archive/2010/12/11/1902715.html

總結(jié)

以上是生活随笔為你收集整理的新浪微博PC客户端(DotNet WinForm版)——功能实现分解介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

婷婷综合 | av久久在线| 精品免费视频 | 五月天网页 | 精品96久久久久久中文字幕无 | 欧美久久久久久久久久久久久 | 深夜男人影院 | 操高跟美女| 久久久精品视频成人 | 色综合激情网 | 97夜夜澡人人双人人人喊 | 亚洲视频2 | 国产色一区 | 亚洲成av人片在线观看www | 黄色免费观看网址 | 六月激情丁香 | 日日爽| www五月| 狠狠色丁香久久婷婷综合丁香 | 久操视频在线免费看 | av中文字幕亚洲 | 欧美大片aaa| 91成年人视频 | 国产激情小视频在线观看 | 黄色aaa毛片 | 色五婷婷 | 日日躁天天躁 | 98精品国产自产在线观看 | 免费色黄 | 国产在线视频一区二区 | 欧美日韩激情视频8区 | 韩日三级在线 | 国产成人综合精品 | 一区二区三区中文字幕在线观看 | 天天看天天干 | 亚洲精品国产精品99久久 | 成人黄色毛片 | 久久久精品网 | 在线免费观看黄色 | 日韩欧美网址 | 69精品在线 | 成人免费网视频 | 天躁狠狠躁 | 激情综合色综合久久 | 精品国产免费人成在线观看 | 男女拍拍免费视频 | av黄色免费在线观看 | 国产精品麻豆欧美日韩ww | 日韩欧美视频免费在线观看 | 国产91精品高清一区二区三区 | 国产精品久久久久久久婷婷 | 日本精品一区二区 | 五月导航| 一区二区电影网 | 国产一级免费电影 | 粉嫩av一区二区三区四区五区 | 在线免费高清视频 | av高清一区二区三区 | 超碰av在线免费观看 | 国产超碰在线 | 96国产精品视频 | 国产亚洲精品综合一区91 | 天天天天天天天操 | av天天干| 最近能播放的中文字幕 | 丁香六月婷婷 | 久久综合狠狠 | 日韩欧美一区二区在线播放 | 国产男女爽爽爽免费视频 | 日韩在线电影一区二区 | 毛片久久久 | 久久精品视频在线免费观看 | 爱干视频 | 欧美日韩视频 | 狠狠色狠狠综合久久 | 免费下载高清毛片 | 狠狠综合网 | 96av视频| 婷婷色综合网 | 成人免费看片网址 | 日韩精品不卡在线 | 亚洲成人精品在线观看 | 成片视频免费观看 | 天天天操天天天干 | av免费观看高清 | 欧美与欧洲交xxxx免费观看 | 精品一区二区在线观看 | 亚洲精品久久久久中文字幕二区 | 久久精品久久精品久久39 | 日日干天天爽 | 国产精品大尺度 | 久久香蕉影视 | 波多野结衣精品视频 | 伊人小视频 | 国产成人黄色 | 96香蕉视频 | 国产精品久久久久久一二三四五 | 西西www4444大胆在线 | 亚洲一区二区三区在线看 | 亚洲精品日韩一区二区电影 | 久久视频在线观看中文字幕 | 美女黄频在线观看 | 九色免费视频 | 国产精品九九视频 | 国产精品久免费的黄网站 | 丁香婷婷深情五月亚洲 | 超碰97人人射妻 | 欧美一级片在线观看视频 | 韩国在线一区 | 国产精品一区二区三区四区在线观看 | 日日碰狠狠躁久久躁综合网 | 成人欧美亚洲 | 欧美激情视频在线免费观看 | bbbbb女女女女女bbbbb国产 | 国产亚洲精品久久久久久大师 | 精品国产综合区久久久久久 | 免费在线观看一区 | 一区二区欧美日韩 | 成人免费在线观看入口 | 亚洲精品国产精品国自产 | 999成人 | 日日夜夜添| 91亚洲国产成人久久精品网站 | 国产精品第54页 | 天天天天天天操 | 国产va精品免费观看 | 美女视频黄网站 | 日韩三区在线 | 国产精品初高中精品久久 | 中文字幕av有码 | 狠狠撸电影 | 婷婷电影在线观看 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 欧美精品一二三 | 在线视频18在线视频4k | 久久不射电影院 | 亚洲成年片 | 精品久久在线 | www.精选视频.com | 亚洲欧洲日韩 | 97在线观看免费高清 | 日本黄色免费电影网站 | 狠狠色综合网站久久久久久久 | av在线com | 国产日韩视频在线播放 | 国产高清视频在线观看 | 国产精品va | 日本h在线播放 | 蜜臀精品久久久久久蜜臀 | 激情网综合 | 亚洲精品免费观看 | 成人一级免费视频 | 日本亚洲国产 | 久久久久久久影院 | 久久视频网 | www.久久99 | 亚洲成aⅴ人片久久青草影院 | 亚州激情视频 | 九九免费观看视频 | 91视频 - 88av | 久在线观看 | 91香蕉嫩草 | 精品主播网红福利资源观看 | av九九| 久久精品一区二区国产 | 亚洲aⅴ久久精品 | 精品日韩视频 | 西西大胆免费视频 | 国产一区欧美在线 | 久久综合天天 | 91丨九色丨国产丨porny精品 | 久久精选| www.天天干 | 99亚洲精品在线 | 91精品影视 | 在线观看 亚洲 | 精品在线你懂的 | 91视频在线观看下载 | 国产精品视频线看 | 特级毛片网| 日韩av影片在线观看 | 亚洲a在线观看 | 日韩欧美一区二区不卡 | 成人动态视频 | 国产精品久久三 | 成人欧美日韩国产 | 亚洲精品玖玖玖av在线看 | 久久草精品 | 午夜av电影| av天天草| 欧美久久影院 | 一区中文字幕在线观看 | 久久躁日日躁aaaaxxxx | 韩国av一区二区三区 | 一区二区三区在线免费观看视频 | 免费在线观看国产黄 | 日韩a在线看 | 久草视频在线播放 | 国产永久免费高清在线观看视频 | 91视频3p | 免费看国产视频 | 91av在| 国产69熟 | 一区二区 不卡 | 深夜视频久久 | 500部大龄熟乱视频 欧美日本三级 | 日本福利视频在线 | 中文字幕一区二区三区四区久久 | 婷婷在线免费 | 97综合视频| 国产经典av | 国产精品亚洲片在线播放 | 国产精品亚洲成人 | 免费在线观看91 | 欧美午夜精品久久久久久浪潮 | 在线免费看黄色 | 日韩高清网站 | h网站免费在线观看 | 亚洲精品视频在 | 久久精品一区 | 黄色三级免费观看 | 国产二区av | 久久爱资源网 | 国产精品久久久久久久久蜜臀 | 黄色一级免费 | 五月天亚洲激情 | 五月婷在线观看 | 日韩电影中文字幕在线 | 日韩美女av在线 | av天天草| 免费视频一区二区 | 国产一区黄色 | av亚洲产国偷v产偷v自拍小说 | 免费观看性生交大片3 | 亚洲一区欧美激情 | 欧美日韩视频在线一区 | 在线观看中文字幕一区二区 | 中文字幕在线观看亚洲 | 国产 日韩 欧美 在线 | 亚洲欧美激情精品一区二区 | 久久er99热精品一区二区 | 亚洲四虎在线 | 亚洲精品一区二区三区高潮 | 婷婷久草 | 国产99久久精品一区二区永久免费 | 日批在线看 | 国产视频二 | 日韩理论在线播放 | 国产精品久久久久久久久久了 | 人人爽人人爽人人爽学生一级 | a天堂最新版中文在线地址 久久99久久精品国产 | 亚洲精品欧洲精品 | av大片网站 | 日韩伦理片hd | 97av影院| 国产高清区| 在线中文字幕一区二区 | 久久av网址 | 中文字幕精 | 久久爱992xxoo| 久久av伊人 | 蜜臀一区二区三区精品免费视频 | 伊人www22综合色 | 久99久精品 | 在线三级播放 | 国产国语在线 | 免费高清在线观看成人 | 国产一级免费播放 | 成年人免费观看在线视频 | 插插插色综合 | 日韩欧美大片免费观看 | 在线91播放 | 手机成人av在线 | 天天天射 | 国产精品破处视频 | 天堂av色婷婷一区二区三区 | 欧美色噜噜噜 | 韩国一区二区三区视频 | 国产在线 一区二区三区 | 超碰99人人 | 在线色亚洲 | 亚洲国产精品第一区二区 | 在线欧美小视频 | 精品国产一区二 | 久久影院亚洲 | 国产理论免费 | 亚洲午夜精品一区二区三区电影院 | 久久久免费国产 | 97天堂| 亚洲激情五月 | 亚洲精选在线 | 久久久久北条麻妃免费看 | 色停停五月天 | 国产小视频在线 | 日韩免费一区二区三区 | 狠色狠色综合久久 | 黄色av一区 | 人人澡人人爽欧一区 | 一区二区精 | 五月婷婷中文网 | 蜜臀av性久久久久av蜜臀三区 | 黄色a视频免费 | 最新极品jizzhd欧美 | 精品国产_亚洲人成在线 | 狠狠综合 | 超碰人人舔 | 五月综合激情婷婷 | 欧美日韩国产精品一区二区 | 日韩精品欧美视频 | 久久亚洲专区 | 欧美日韩高清免费 | 91福利国产在线观看 | 久久婷婷亚洲 | 丁香九月婷婷综合 | 91av中文| 日本精品一区二区三区在线播放视频 | 91精品国产一区二区三区 | 国产亚洲视频在线 | 日韩网站在线 | 人人狠狠综合久久亚洲婷 | 天海翼一区二区三区免费 | 免费在线观看成年人视频 | japanesexxxxfreehd乱熟 | 不卡的av | 亚洲视频电影在线 | 国产视频91在线 | 久久一区二区三区日韩 | 国产69精品久久久久99 | freejavvideo日本免费 | 黄色小网站在线 | 91桃色在线播放 | 99精品观看 | 欧洲精品码一区二区三区免费看 | 一本一道久久a久久综合蜜桃 | 综合在线色 | 人人爽人人舔 | 国产成人一区二区三区电影 | 毛片激情永久免费 | 久久久精品 | 欧洲精品亚洲精品 | 免费观看的黄色片 | 在线免费国产 | 国产综合小视频 | 一区二区三区日韩精品 | 亚洲手机天堂 | 又黄又网站 | 日韩一级成人av | 国产美女精品视频 | 中文av日韩 | 麻豆视传媒官网免费观看 | 成年人在线免费看片 | 免费观看一级特黄欧美大片 | av在线h| 国产麻豆精品在线观看 | 久久久精品成人 | 婷婷国产v亚洲v欧美久久 | 国产成人精品免高潮在线观看 | 久久久久久欧美二区电影网 | 国产中文字幕视频在线观看 | 国产成人a v电影 | 91色偷偷| 综合色在线观看 | 国产在线成人 | 免费在线视频一区二区 | 久久精品国产免费看久久精品 | 婷婷色综合网 | 成年人免费电影 | 伊人亚洲精品 | 综合婷婷丁香 | 国产视频一区在线 | 久久99久久99精品中文字幕 | 黄色三级在线看 | 久久久久久高潮国产精品视 | 精品国产1区二区 | 在线国产一区二区三区 | 狠狠网| 亚洲视频 视频在线 | 免费在线激情电影 | 亚洲1区 在线 | 成人av中文字幕在线观看 | 日韩高清免费在线观看 | 国产一区二区不卡视频 | 免费在线看成人av | 国产不卡av在线 | 九九在线高清精品视频 | 播五月婷婷 | 欧美视频一区二 | 婷婷六月丁 | 91视视频在线直接观看在线看网页在线看 | 天天综合日日夜夜 | 国产精品中文久久久久久久 | 在线观看自拍 | 日韩二区精品 | 久久久人人人 | 亚在线播放中文视频 | 伊人亚洲精品 | 婷婷去俺也去六月色 | 日韩mv欧美mv国产精品 | 久久精品9 | 日本精品久久久久中文字幕 | 不卡电影一区二区三区 | 综合网久久 | 激情综合啪| 日本h视频在线观看 | 操久久免费视频 | 成人va在线观看 | 免费观看国产精品视频 | 精品影院| 欧美一级电影 | 蜜臀久久99精品久久久无需会员 | 国产第一页福利影院 | 中文在线免费看视频 | 国产一级片免费观看 | 亚洲午夜av久久乱码 | 国产成人精品久久二区二区 | 亚洲精品裸体 | 黄色影院在线观看 | 中文字幕第一页在线vr | 亚洲成av人片在线观看香蕉 | 在线日本v二区不卡 | 久久婷婷亚洲 | 九九九九九九精品 | 中文字幕成人网 | 成人影片在线免费观看 | 六月激情| 中文字幕av免费 | 在线观看中文字幕 | 在线免费国产 | 亚洲激情在线播放 | 99久久99久久精品 | 一区 二区电影免费在线观看 | 国产精品成人免费精品自在线观看 | 国产日产精品一区二区三区四区的观看方式 | 超碰九九 | 午夜国产福利视频 | 久久久久亚洲天堂 | 波多野结衣最新 | 私人av | 四虎最新域名 | 成人午夜精品 | 色综合久久精品 | 狠狠操狠狠操 | 成人精品国产免费网站 | 久久久国产精品久久久 | 在线91视频| 亚洲视频免费在线看 | 国产一级视频在线免费观看 | 黄色日本片 | 国产一区二区三区在线免费观看 | 国产成人精品亚洲 | 久久婷婷国产色一区二区三区 | 国内精品久久久久久久久久清纯 | av福利网址导航 | 欧美在线99 | 91精品中文字幕 | 天堂av在线免费 | 久久乐九色婷婷综合色狠狠182 | 精品国内自产拍在线观看视频 | 黄色午夜网站 | 午夜视频免费 | 91夫妻视频 | 免费看精品久久片 | 午夜精品视频在线 | av电影av在线 | 奇米影视8888 | 99免费在线播放99久久免费 | 91九色国产 | 免费在线激情视频 | 国产精品视频内 | 丁香视频| ,午夜性刺激免费看视频 | 狠狠亚洲| 亚洲最新在线 | 国产精品系列在线观看 | 中文字幕 国产精品 | 在线观看一级视频 | 久久国产免费 | 视频成人 | 国产视频一级 | 国产欧美日韩视频 | 中文字幕av在线播放 | 91正在播放 | 国产一区二区成人 | 一区二区高清在线 | 国产无遮挡又黄又爽馒头漫画 | 97超碰在线久草超碰在线观看 | 在线观看色网 | 探花视频在线观看免费 | 337p日本大胆噜噜噜噜 | 人成午夜视频 | 免费看国产黄色 | 国内精品久久久久影院男同志 | 黄色av免费看| 国产999在线观看 | 国内精品免费 | 国产精品免费一区二区三区在线观看 | 欧美激情一区不卡 | av电影在线不卡 | 日韩av电影免费观看 | 国产中文字幕网 | 蜜臀久久99精品久久久久久网站 | 国产精品不卡在线 | 97超碰在线视 | 久久玖 | 久久久网页 | 久久久视频在线 | 91看片黄色| 国产精品国产三级国产不产一地 | 99久在线精品99re8热视频 | 国产亚洲精品成人av久久ww | 日韩成人邪恶影片 | 五月婷婷伊人网 | 特及黄色片 | 中文字幕在线观看完整版 | 国产三级精品在线 | 成人教育av | 视频在线99 | 最新av免费在线观看 | www.天天色 | 亚洲天天干 | 国产精品福利无圣光在线一区 | 丁香在线观看完整电影视频 | 五月天六月丁香 | 黄色大片中国 | 日韩久久精品一区二区三区 | 日韩中文免费视频 | 91精品国产自产91精品 | 国产精品国产三级国产专区53 | 成人免费看片98欧美 | 97在线视频免费播放 | 97超级碰| 超碰午夜 | 天天射天天干天天 | 亚洲成人一二三 | 一区二区三区在线视频111 | 国产精品资源 | 黄色大全在线观看 | 中文字幕av一区二区三区四区 | 日韩免费三区 | 亚洲天天综合网 | 91在线免费播放 | 欧美日韩视频一区二区 | 欧美国产大片 | 在线免费观看羞羞视频 | 国产人在线成免费视频 | 天天天天爽| 中文字幕日韩免费视频 | 麻豆国产精品永久免费视频 | 久久激情视频 久久 | 国产精品精品国产婷婷这里av | 激情网在线视频 | 97av在线| 狠狠色丁香婷婷综合最新地址 | 国产精品一区二区久久 | 国产99久久久精品 | av电影一区二区 | 日韩两性视频 | 亚洲国产黄色片 | 中文字幕在线影院 | 成人97视频 | 国产黄av | 亚洲 精品在线视频 | 麻豆一级视频 | 在线成人免费电影 | 六月丁香婷婷在线 | 国产成人精品一区二区在线 | 国产日韩精品一区二区在线观看播放 | 日韩精品久久久免费观看夜色 | 91精品国产综合久久婷婷香蕉 | 国产精品久久久久久久久久久不卡 | 天天干,天天干 | 日韩三级免费观看 | 国产精品久久影院 | 欧美影院久久 | 少妇视频一区 | 国产成人亚洲在线观看 | 久艹视频在线免费观看 | 人人澡超碰碰97碰碰碰软件 | 日日夜夜网 | 色www免费视频| 99久久这里有精品 | 国产又粗又猛又爽 | 欧美精品乱码久久久久久 | 91av蜜桃 | 欧美久久久一区二区三区 | 国产精品久久久久久影院 | 超碰人人舔 | 色婷婷激婷婷情综天天 | 黄色精品免费 | www.玖玖玖| 日韩区欠美精品av视频 | 精品国产乱码久久久久久三级人 | 国产黑丝一区二区 | 久操视频在线免费看 | 91精品免费在线 | 亚洲精品在线网站 | 日本中文字幕在线免费观看 | 免费观看全黄做爰大片国产 | 国产成人高清 | 亚洲精品中文在线观看 | 色在线免费 | 九九视频一区 | 午夜影视剧场 | 少妇高潮流白浆在线观看 | 国产91在线观看 | 在线观看国产日韩欧美 | 精品免费国产一区二区三区四区 | 91精品色 | 国产精品麻豆果冻传媒在线播放 | 在线观看国产91 | 日韩精品一区二区三区三炮视频 | 国产999精品久久久 免费a网站 | 在线观看免费高清视频大全追剧 | 日韩xxxx视频 | 亚洲国产色一区 | 最新的av网站 | 欧美日本不卡 | 色多多污污在线观看 | 国产99久久久国产精品 | 伊人午夜 | 韩国av一区二区 | 天天射网站| 色天天综合久久久久综合片 | 午夜性色 | 美女啪啪图片 | 国产成人精品亚洲日本在线观看 | 国产自在线 | 日韩成人高清在线 | 日韩精品1区2区 | 97人人添人澡人人爽超碰动图 | 韩国av免费 | 天天搞天天 | 91av在线免费播放 | 美女视频黄是免费的 | 久久99精品国产99久久6尤 | 九色福利视频 | 日韩黄色在线观看 | 国产精品一区免费观看 | 久久影院午夜论 | 国产精品18久久久久久久 | 人人舔人人爱 | 日韩美av在线 | 精品久久一区二区三区 | 麻豆视频免费网站 | 国产精品伦一区二区三区视频 | 丁香九月激情综合 | 日韩免费高清 | 日日夜夜天天射 | 国产99久久九九精品免费 | 婷婷av电影| 蜜桃视频在线观看一区 | 欧美了一区在线观看 | 国产小视频在线观看免费 | 色视频网站免费观看 | 亚洲va欧洲va国产va不卡 | 国产精品一区二区免费在线观看 | 99热在线精品观看 | 99精品久久久久久久久久综合 | 黄a在线 | 一区二区不卡视频在线观看 | 国产日韩欧美视频 | 国产精品成人久久久久久久 | 中文国产在线观看 | 国产在线91在线电影 | 久久精品影片 | 91视频国产免费 | 国产成人99久久亚洲综合精品 | 一区二区三区在线观看免费视频 | 日韩视频免费看 | 亚洲高清视频一区二区三区 | 久碰视频在线观看 | 日韩理论片在线观看 | 亚洲国产精品一区二区久久hs | 天天干天天干 | 青青河边草免费观看完整版高清 | 欧美性生活久久 | 国产精品字幕 | 久久成人国产精品免费软件 | 国产成人一区二区三区在线观看 | 在线观看日韩 | 久久天天躁夜夜躁狠狠躁2022 | 国产高清精| 久久99久久99精品免视看婷婷 | 激情综合网在线观看 | 免费黄色av电影 | 97超碰在线资源 | 91麻豆高清视频 | 我要色综合天天 | 国产午夜精品视频 | 免费婷婷 | 中文字幕中文字幕在线中文字幕三区 | 日韩城人在线 | 99热精品免费观看 | 国产精品男女 | 国产日韩一区在线 | 综合天堂av久久久久久久 | 黄网站色视频 | 久久视频在线免费观看 | 一区二区日韩av | 亚洲另类交 | www.综合网.com | 99久久婷婷国产精品综合 | 精品国产午夜 | 国产破处视频在线播放 | 午夜在线资源 | 国产精品久久久久免费 | 97成人在线免费视频 | 一区二区亚洲精品 | 五月开心六月婷婷 | 久久精品1区2区 | 五月婷婷六月丁香 | 久久精品中文字幕一区二区三区 | 99久久99久久精品免费 | 丁香婷婷综合网 | 99久久精品免费看国产四区 | 操操操日日日干干干 | 成人h视频在线播放 | 亚洲a成人v | 国产又粗又猛又黄又爽的视频 | 探花视频免费在线观看 | 高清不卡免费视频 | 91高清不卡 | 国产精品久久久久久久久久直播 | 亚洲免费高清视频 | 国产日韩欧美在线观看视频 | 91毛片在线观看 | 久久亚洲在线 | 日韩在线中文字幕视频 | 亚洲伊人网在线观看 | 99久久99视频| 国产精品一区二区精品视频免费看 | 91丨九色丨丝袜 | 久久久精品国产一区二区电影四季 | 大荫蒂欧美视频另类xxxx | 69精品久久 | 国模精品一区二区三区 | 人人玩人人添人人澡超碰 | 亚洲精品成人在线 | 探花视频网站 | 91亚·色 | 日韩精品一区二区三区视频播放 | 最新中文字幕在线播放 | 亚洲人成网站精品片在线观看 | 免费日韩一区二区三区 | 精品美女在线观看 | 欧美精品久久久久 | www.av免费观看 | 六月丁香婷 | 色综合久久综合中文综合网 | 又黄又爽免费视频 | 国产一级片一区二区三区 | 亚洲国产中文字幕在线观看 | 五月天亚洲精品 | 国产一区二区日本 | 亚洲黄色在线观看 | 亚洲一区二区观看 | 五月天综合网 | 久草在线免费看视频 | 草在线视频 | 久久久免费观看 | 精品久久久久久一区二区里番 | 精品国产一区二区三区不卡 | 久久成人人人人精品欧 | 国产成人精品一区二区三区福利 | 国产999精品久久久 免费a网站 | 特级西西人体444是什么意思 | 亚洲精品无| 国产亚洲在线观看 | 婷婷亚洲最大 | av黄色成人 | 超碰个人在线 | 综合色婷婷 | 欧美午夜a | 丁香婷婷社区 | 中文字幕在线观看视频一区 | 一区二区三区四区免费视频 | 九九国产视频 | 99视频国产精品免费观看 | 久久人人精 | 色视频在线看 | 在线精品亚洲 | 一区二区视频欧美 | 最近字幕在线观看第一季 | 成人精品视频 | 99色网站| 日韩免费视频播放 | 成人资源在线播放 | 国产精品女同一区二区三区久久夜 | 国产精品乱码一区二区视频 | 国产a网站 | 亚洲码国产日韩欧美高潮在线播放 | 一区二区三区手机在线观看 | 免费成人看片 | 国产亚洲激情视频在线 | 国产99自拍 | 久久天天躁夜夜躁狠狠85麻豆 | 国产精品99久久免费观看 | 色小说av| 国产成人精品综合 | 69av视频在线观看 | 天天操,夜夜操 | 中文字幕在线观看免费高清完整版 | 伊人激情网 | 国产黄大片在线观看 | 久久午夜影院 | 99国产精品一区二区 | 91精选| 色哟哟国产精品 | 亚洲午夜精品电影 | 久久99深爱久久99精品 | 99色在线 | 日韩高清观看 | 一级免费av| 日韩毛片在线一区二区毛片 | 久久成人一区二区 | 日韩午夜一级片 | 日日干av | 国产99久久九九精品免费 | 日本在线观看视频一区 | 成人久久久久久久久久 | av网在线观看 | 激情av在线播放 | 自拍超碰在线 | 手机在线看片日韩 | 一区免费视频 | 深夜国产福利 | 精品国产一区二区三区久久久蜜月 | 精品免费视频. | 国产一区二区免费看 | 日韩理论影院 | 在线国产专区 | 国产亚洲成人网 | 狠狠色丁香久久综合网 | 国产色视频123区 | 久久99热国产 | 麻豆91小视频 | 久久国产精品99国产精 | 992tv成人免费看片 | 国产不卡视频在线 | 中文字幕在线国产 | 91人人澡人人爽人人精品 | 天天干天天色2020 | 日韩免费在线观看 | 国产午夜三级一区二区三桃花影视 | 69xx视频| 在线天堂日本 | 欧美精品乱码久久久久 | 日本久久精品视频 | 国产精品久久久精品 | 天天操天天舔天天干 | 色综合咪咪久久网 | www.97色.com| 99综合电影在线视频 | 91精品办公室少妇高潮对白 | 久久刺激视频 | 亚洲影院国产 | 这里只有精彩视频 | 人人搞人人爽 | av中文字幕亚洲 | 免费av在线网 | 91豆麻精品91久久久久久 | 最新婷婷色 | 五月黄色 | 国产精品99久久久久久人免费 | 国产女人免费看a级丨片 | 色综合久久中文字幕综合网 | 午夜精品视频在线 | 天天操夜夜操夜夜操 | 国产日韩精品一区二区三区 | 98超碰在线 | 欧美日韩精品在线观看视频 | 日韩视频在线不卡 | 在线成人国产 | 久久国产亚洲 | 毛片网在线播放 | 麻豆一二三精选视频 | 亚洲专区视频在线观看 | 久久国产亚洲视频 | 一本之道乱码区 | 91毛片在线| 国产资源在线免费观看 | 亚洲精品国产电影 | 中文字幕在线视频国产 | 国产精品九色 | 片网站 | 最近中文字幕久久 | 精品日韩中文字幕 | 久久精品播放 | 久久免费福利 | 亚州精品国产 | 欧美网站黄色 | 久久福利小视频 | 又湿又紧又大又爽a视频国产 | 亚洲爱av | 麻豆精品在线视频 | 日韩中文字幕免费在线观看 | 亚洲精品在线观看av | 国产精品久久久久久久av电影 | 国产精品久久久久永久免费观看 | 国产亚洲一区二区在线观看 | 精品福利视频在线 | 久久久久婷 | 天天操天天能 | 国产女人免费看a级丨片 | 最近中文字幕免费av | 久久激情视频 久久 | 中文字幕在线观看视频网站 | 亚洲国产成人高清精品 | 久久精品牌麻豆国产大山 | 27xxoo无遮挡动态视频 | 西西www444| 91一区二区在线 | 99久久er热在这里只有精品15 | 欧美一区免费观看 | 成片免费观看视频大全 | 免费网站观看www在线观看 | 激情伊人五月天 | 激情五月看片 | 欧美性生活免费看 | 免费网站看v片在线a | 日韩欧美国产免费播放 | 亚洲成成品网站 | 中文字幕2021| 最新国产视频 | 欧美久久久 | 精品视频专区 | 国产视频在线一区二区 | 国产福利av | 亚洲激情婷婷 | 一区三区视频 | 免费在线成人av电影 | 在线观看免费国产小视频 | 国产亚洲精品久久久久久久久久 | 精品欧美一区二区在线观看 | 免费在线91 | 国内精品久久久精品电影院 | 日韩美女免费线视频 | 国产精品剧情在线亚洲 | 国产一级精品视频 | 在线观看国产高清视频 | 丁香网五月天 | 亚洲乱码精品久久久久 | 免费精品国产va自在自线 | 亚洲人久久 | 亚洲精品乱码 | 超碰最新网址 | 97av在线视频免费播放 | 深夜免费福利 | 国产精品黄网站在线观看 | 久久国产影院 | 91探花国产综合在线精品 | 久久视频在线看 | 国产在线观看免费观看 | 在线视频欧美亚洲 | 中文字幕丝袜美腿 | 天天爽综合网 | 天天射天天操天天干 | 97精品国产97久久久久久粉红 | 最新真实国产在线视频 | 成人av影视观看 | 日韩在线观看第一页 | 国产精品视频app | 成人亚洲网 | 久久歪歪 | 999久久国精品免费观看网站 | 在线观看亚洲精品 | 成片人卡1卡2卡3手机免费看 | 日韩有色 | 日韩中文字幕免费视频 | 在线观看完整版免费 | 国产精品久久久久久久av大片 | 丁香色天天 | 97综合视频 | a在线免费观看视频 | 中文字幕色在线视频 | 国产成人亚洲在线观看 | 少妇性aaaaaaaaa视频 | 激情综合站| 亚洲精品视频免费 | 97福利在线 | 日日摸日日碰 | 欧美精品久久久久久久久老牛影院 | 日本久久久久久久久 | 毛片99| 美女视频黄免费网站 | 毛片无卡免费无播放器 | 激情综合色综合久久综合 | 一区在线观看视频 | 成人av在线电影 | 91成人精品一区在线播放 | 国产精品12 | 黄色精品视频 | 国产精品久久在线 | 亚洲国产经典视频 | 毛片基地黄久久久久久天堂 | 国产精品成人国产乱 | av在线等| 蜜臀aⅴ精品一区二区三区 久久视屏网 |