VC++對QQ空間的一系列操作封裝成DLL

有以下功能:

1.發表說說;

2.給好友留言;

3.獲取指定好友的說說;

4.獲取指定好友的日誌(標題);

5.評論指定說說;

6.評論指定日誌;

7.獲取好友最新說說;

8.獲取好友最新日誌(標題)。


這個 DLL 中導出1個類(CQZoneH)和3個信息結構體,我把整個頭文件貼出來:

#ifndef QZONEH_API
#define QZONEH_API _declspec(dllimport)
#else
#pragma warning(disable : 4251)
#endif

#include <afxinet.h>

#define LOGIN_SUCCEED		0 //登錄成功
#define LOGIN_VMISSED		1 //驗證碼錯誤
#define LOGIN_PMISSED		2 //密碼錯誤
#define LOGIN_UNKNOW		3 //未知錯誤

//好友信息結構體
QZONEH_API typedef struct
{
	TCHAR szQQ[15];		//QQ號碼
	TCHAR szNickName[50];	//暱稱
	TCHAR szRemark[50];	//備註
} FRIENDINFO, *PFRIENDINFO, *LPFRIENDINFO;

//說說信息結構體
QZONEH_API typedef struct
{
	TCHAR szHostQQ[15];	//主人QQ
	TCHAR szContent[300];	//說說內容
	TCHAR szTime[25];	//發表時間
	time_t lTimeLine;	//時間戳
	TCHAR szTid[25];	//Topic ID(TID)
} SHUOINFO, *PSHUOINFO, *LPSHUOINFO;

//日誌信息結構體
QZONEH_API typedef struct
{
	TCHAR szHostQQ[15];	//主人QQ
	TCHAR szSubject[256];	//主題
	TCHAR szTime[25];	//發表時間
	time_t lTimeLine;	//時間戳
	TCHAR szBlogId[25];	//ID
} BLOGINFO, *PBLOGINFO, *LPBLOGINFO;

class QZONEH_API CQZoneH
{
public:
	CQZoneH();
	~CQZoneH();
	void SetAccount( LPCTSTR lpszQQ, LPCTSTR lpszPwd );		//設置賬戶
	BOOL CheckNeedVerify();						//檢測是否需要驗證碼
	HGLOBAL LoadVerify();						//讀取驗證碼
	void FreeHGlobal( HGLOBAL hMem );				//釋放內存
	void SetVerify( LPCTSTR lpszVer );				//設置驗證碼
	UINT Login();							//登錄
	BOOL QueryFriendsList();					//請求好友列表
	LPFRIENDINFO GetFriendAt( int nIndex );				//得到指定好友信息
	int GetFriendsSize();						//得到好友總數
	BOOL PublishShuoshuo( LPCTSTR lpszContent, 
		BOOL bSync = FALSE, BOOL bPrivate = FALSE );		//發說說
	BOOL LeaveMessage( LPCTSTR lpszMessage, LPCTSTR lpszTagQQ );	//給指定QQ留言
	SHUOINFO* GetShuoshuos( LPCTSTR lpszTagQQ, 
		const int iStartPos, int& iAmount );			//得到指定QQ和範圍的說說
	void ReleaseShuoshuos( SHUOINFO *pShuo );			//釋放說說佔用的內存
	BOOL CommentShuoshuo( LPCTSTR lpszTagQQ, LPCTSTR lpszTid, 
		LPCTSTR lpszText );					//評論指定說說
	BOOL CommentShuoshuo( SHUOINFO shuoInfo, LPCTSTR lpszText );	//評論指定說說,重載
	BOOL PublishBlog( LPCTSTR lpszSubject, LPCTSTR lpszContent );	//發表日誌
	BLOGINFO* GetBlogs( LPCTSTR lpszTagQQ, 
		const int iStartPos, int& iAmount );			//得到指定QQ和範圍的日誌
	void ReleaseBlogs( BLOGINFO *pBlog );				//釋放日誌佔用的內存
	BOOL CommentBlog( LPCTSTR lpszTagQQ, LPCTSTR lpszBlogId, 
		LPCTSTR lpszText );					//評論指定日誌
	BOOL CommentBlog( BLOGINFO blogInfo, LPCTSTR lpszText );	//評論指定日誌,重載
	SHUOINFO* GetFreshShuoshuos( const int iStartPos, 
		int& iAmount );						//得到好友最新說說
	BLOGINFO* GetFreshBlogs( const int iStartPos, 
		int& iAmount );						//得到好友最新日誌
	HGLOBAL GetHeadImage( LPCTSTR lpszTagQQ, BOOL bBig = TRUE );	//得到指定QQ的jpg格式頭像圖片
	void About();							//關於

protected:
	CInternetSession *m_pSession;
	CString m_strQQ, m_strPwd, m_strVer;
	CString m_strGTK;
	CPtrArray m_paFriends;

protected:
	void UTF8ToGB2312( CString& strTarget );
	void GB2312ToUTF8( CString& strTarget );
	void SKEYToGTK( CString& strSkey );
	CString MakeURLCode( LPCTSTR lpszSource, BOOL bUTF8 );
};


下面是成員函數詳解:

void SetAccount( LPCTSTR lpszQQ, LPCTSTR lpszPwd );
//設置賬戶
//lpszQQ - QQ號碼
//lpszPwd - 密碼

BOOL CheckNeedVerify();
//檢測是需要驗證碼
//返回值 - 需要驗證返回 TRUE,不需要則返回 FLASE

HGLOBAL LoadVerify();
//讀取驗證碼
//返回值 - jpg格式的驗證碼圖片數據

void FreeHGlobal( HGLOBAL hMem );
//釋放內存
//hMem - 內存地址

void SetVerify( LPCTSTR lpszVer );
//設置驗證碼。需要驗證碼的情況下才有必要調用該方法,驗證碼由 LoadVerify 得到,由用戶輸入
//lpszVer - 用戶輸入的驗證碼

UINT Login();
//登錄
//返回值 - 登錄成功返回 LOGIN_SECCEED,驗證碼錯誤返回 LOGIN_VMISSED,密碼錯誤返回 LOGIN_PMISSED,未知錯誤返回 LOGIN_UNKNOW

BOOL QueryFriendsList();
//請求好友列表。請求成後列表存放在內存中
//返回值 - 成功返回 TRUE,否則返回 FALSE

LPFRIENDINFO GetFriendAt( int nIndex );
//通過索引得到指定好用信息
//nIndex - 索引值,從0開始
//返回值 - 返回好友信息結構體指針,請看其定義

int GetFriendsSize();
//得到列表總好友的總數
//返回值 - 返回總數

BOOL PublishShuoshuo( LPCTSTR lpszContent, BOOL bSync = FALSE, BOOL bPrivate = FALSE );
//發表說說
//lpszContent - 說說內容
//bSync - 是否同步到簽名
//bPrivate - 是否爲私密說說(只有自己可見)
//返回值 - 發表成功返回 TRUE,否則爲 FALSE

BOOL LeaveMessage( LPCTSTR lpszMessage, LPCTSTR lpszTagQQ );
//給指定QQ留言
//lpszMessage - 內容
//lpszTagQQ - 目標QQ
//返回值 - 成功返回 TRUE,否則 FALSE

SHUOINFO* GetShuoshuos( LPCTSTR lpszTagQQ, const int iStartPos, int& iAmount );
//得到指定QQ的說說。用完一定要調用 ReleaseShuoshuos 釋放內存,不然會內存溢出
//iStartPos - 指定從第幾條開始,索引爲0
//iAmount - 這個整形引用,指定要獲取的條數,如果說說總數少於其值,則函數返回後 iAmount 的值就是實際數量的值
//返回值 - 說說信息結構體數組的首地址指針,失敗返回 NULL

void ReleaseShuoshuos( SHUOINFO *pShuo );
//釋放說說所佔用的內存
//pShuo - 說說信息結構體數組的首地址指針

BOOL CommentShuoshuo( LPCTSTR lpszTagQQ, LPCTSTR lpszTid, LPCTSTR lpszText );
//評論指定QQ的說說
//lpszTagQQ - 目標QQ
//lpszTid - topic ID,SHUOINFO 的一個成員
//lpszText - 評論內容
//返回值 - 成功返回 TRUE,否則 FALSE

BOOL CommentShuoshuo( SHUOINFO shuoInfo, LPCTSTR lpszText );
//評論指定QQ的說說,重載
//shuoInfo - 說說信息結構體
//lpszText - 評論內容
//返回值 - 成功返回 TRUE,否則 FALSE

BOOL PublishBlog( LPCTSTR lpszSubject, LPCTSTR lpszContent );
//發表日誌
//lpszSubject - 日誌的主題
//lpszContent - 日誌的內容
//返回值 - 發表成功返回 TRUE,失敗返回 FALSE

BLOGINFO* GetBlogs( LPCTSTR lpszTagQQ, const int iStartPos, int& iAmount );
//得到指定QQ的日誌。用完一定要調用 ReleaseBlogs 釋放內存,不然會內存溢出
//iStartPos - 指定從第幾條開始,索引爲0
//iAmount - 這個整形引用,指定要獲取的條數,如果日誌總數少於其值,則函數返回後 iAmount 的值就是實際數量的值
//返回值 - 日誌信息結構體數組的首地址指針,失敗返回 NULL

void ReleaseBlogs( BLOGINFO *pBlog );
//釋放日誌所佔用的內存
//*pBlog - 日誌信息結構體數組的首地址指針

BOOL CommentBlog( LPCTSTR lpszTagQQ, LPCTSTR lpszBlogId, LPCTSTR lpszText );
//評論指定QQ的說說
//lpszTagQQ - 目標QQ
//lpszBlogId - 日誌 ID,BLOGINFO 的一個成員
//lpszText - 評論內容
//返回值 - 成功返回 TRUE,否則 FALSE

BOOL CommentBlog( BLOGINFO blogInfo, LPCTSTR lpszText );
//評論指定QQ的日誌,重載
//blogInfo - 日誌信息結構體
//lpszText - 評論內容
//返回值 - 成功返回 TRUE,否則 FALSE

SHUOINFO* GetFreshShuoshuos( const int iStartPos, int& iAmount );
//得到所有好友最新發表的說說。用完一定要調用 ReleaseShuoshuos 釋放內存,不然會內存溢出
//iStartPos - 指定從第幾條開始,索引爲0
//iAmount - 這個整形引用,指定要獲取的條數,如果日誌總數少於其值,則函數返回後 iAmount 的值就是實際數量的值
//返回值 - 說說信息結構體數組的首地址指針,失敗返回 NULL

BLOGINFO* GetFreshBlogs( const int iStartPos, int& iAmount );
//得到所有好友最新發布的日誌。用完一定要調用 ReleaseBlogs 釋放內存,不然會內存溢出
//iStartPos - 指定從第幾條開始,索引爲0
//iAmount - 這個整形引用,指定要獲取的條數,如果說說總數少於其值,則函數返回後 iAmount 的值就是實際數量的值
//返回值 - 日誌信息結構體數組的首地址指針,失敗返回 NULL

HGLOBAL GetHeadImage( LPCTSTR lpszTagQQ, BOOL bBig = TRUE );
//得到指定QQ的jpg格式頭像圖片數據
//lpszTagQQ - 目標QQ
//bBig - 指定取大圖還是小圖,TRUE 爲大圖,FALSE 爲小圖

void About();
//關於

我現在來舉個登錄的例子:

m_QZone.SetAccount( _T("960632355"), _T("bugaosuni") ); //設置賬戶
if ( m_QZone.CheckNeedVerify() ) //檢測是否需要驗證碼
{
	//需要驗證碼
	CString strVertify;
	HGLOBAL hVerify = m_QZone.LoadVerify(); //讀取驗證碼
	//...... //這裏可以通過 GDI+ 啥的顯示驗證碼
	//...... //同時得到用戶所輸入的驗證碼
	m_QZone.SetVerify( strVerify ); //設置驗證碼
	m_QZone.FreeHGlobal( hVerify ); //釋放內存,用在這有點不合理,但是我只是要演示一下
}
//不需要驗證碼可以直接登錄
if ( LOGIN_SUCCEED != m_QZone.Login() ) //驗證登錄是否成功
{
	//登錄不成功
	//do something...
}
else
{
	//登錄成功,獲取好友列表
	if( !m_QZone.QueryFriendsList() )
	{
		//請求獲取列表不成功
	}
	else
	{
		LPFRIENDINFO lpInfo = m_QZone.GetFriendAt( 0 ); //獲取第一個好友的信息
		//do something...
	}
}


資源我已經上傳了,包含成員函數詳解和DLL文件以及lib庫和頭文件,下載地址:http://download.csdn.net/detail/joneeky/4991846


我現在大一,也還有很多不懂,封裝得不好望海涵,並虛心接受指正。以後要堅持寫博客。

發佈了26 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章