◆李新煥 陳 婧 王蘭花 趙應(yīng)丁
(江西農(nóng)業(yè)大學(xué) 江西 330045)
社交網(wǎng)絡(luò)數(shù)據(jù)提取方法研究與實(shí)現(xiàn)
◆李新煥 陳 婧 王蘭花 趙應(yīng)丁
(江西農(nóng)業(yè)大學(xué) 江西 330045)
本文對典型的社交網(wǎng)絡(luò)即新浪微博用戶關(guān)系網(wǎng)絡(luò)進(jìn)行了詳細(xì)的研究,其中的數(shù)據(jù)如某一個(gè)用戶的粉絲相關(guān)信息、所關(guān)注用戶相關(guān)信息,以及每天或每周的熱門話題等,在不需要進(jìn)入到某個(gè)用戶的主頁內(nèi)就能把相關(guān)數(shù)據(jù)提取出來。另外著重介紹了提取新浪微博中用戶相關(guān)信息的方法和過程,如學(xué)會申請新浪微博開放平臺個(gè)人應(yīng)用,以及利用API(應(yīng)用程序編程接口)文檔中的Java SDK(java軟件開發(fā)工具包)開發(fā)相關(guān)應(yīng)用從而獲取相關(guān)信息,并對以后的研究指明了方向。
社交網(wǎng)絡(luò); 數(shù)據(jù)提?。恍吕宋⒉?;應(yīng)用程序編程接口;Java SDK
網(wǎng)絡(luò)上的交友是社交網(wǎng)絡(luò)(Social networks)的最初來源,它的目的就是讓用戶維護(hù)他本人的網(wǎng)絡(luò)圈子(通過生成自己的文件信息以及查看到別人的文件信息),在互聯(lián)網(wǎng)上使用者可以展現(xiàn)自己作為一個(gè)網(wǎng)絡(luò)社交人,依次來表現(xiàn)自己的想法及意見等,并在使用的過程中,保持與其他使用者當(dāng)前的朋友關(guān)系,一方面還可以挖掘新的朋友關(guān)系,另一方面恢復(fù)與其他使用者的老朋友的關(guān)系[1]。很多使用者在相互見面的過程中,可以從他們之間相互聯(lián)系以及不是非常正式的交流中獲取到有用的信息。但是在社交網(wǎng)絡(luò)這樣的環(huán)境中,人們所需要的相關(guān)社會信息不能用或者說很局限,因此,使用者在所使用的網(wǎng)絡(luò)環(huán)境內(nèi)獲取到其他使用者的信息程度大大降低,從而讓他們失去了很多原本可以互動(dòng)、合作以及參與的機(jī)會。因此,唯一的辦法是通過提取出所需要的信息,這樣才能讓同處于一個(gè)網(wǎng)絡(luò)環(huán)境中的使用者更好地了解他人的信息,以此來跟其他人建立新的關(guān)系或者恢復(fù)舊的關(guān)系。
網(wǎng)易、搜狐和騰訊公司2014年在Twitter上開始減少了大部分的費(fèi)用,微博中的服務(wù)項(xiàng)目也因此發(fā)展的緩慢,他們紛紛把競爭對象轉(zhuǎn)向了新浪微博使用者的數(shù)量上。也正因?yàn)檫@樣的發(fā)展趨勢,我們國內(nèi)大都使用新浪微博中的相關(guān)數(shù)據(jù)作為數(shù)據(jù)的來源的研究。新浪微博服務(wù)平臺具有概括性和全面性,它供給兩個(gè)平臺,分別是新浪微博開放平臺和微博客戶端平臺[2]。眼下大部分新浪微博數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)來源,也都是在這兩個(gè)平臺上進(jìn)行的。
新浪微博數(shù)據(jù)的提取目前應(yīng)用最廣泛的方法有兩種,第一種是基于新浪微博API的微博數(shù)據(jù)的獲取,另一種是基于網(wǎng)絡(luò)爬蟲與web網(wǎng)頁解析的微博數(shù)據(jù)的獲取。
1.1 基于新浪微博API的微博數(shù)據(jù)獲取
新浪微博開放平臺開放了20余類API接口,比如熱門微博、用戶評論、用戶以及用戶之間的關(guān)系等[3]。首先要開放用戶的權(quán)限,即通過OAuth2.0對用戶進(jìn)行授權(quán)[4],授權(quán)后用戶即可調(diào)用新浪微博所提供的API接口,從而實(shí)現(xiàn)當(dāng)前登錄的用戶及其所關(guān)注用戶的最新微博的獲取、當(dāng)天或一周內(nèi)熱門微博的獲取以及用戶的粉絲及朋友信息的獲取等等。
1.2 基于網(wǎng)絡(luò)爬蟲與web網(wǎng)頁解析的微博數(shù)據(jù)獲取
目前該方法也應(yīng)用的非常廣泛,如廉捷[5]等人提出的基于網(wǎng)絡(luò)爬蟲的web網(wǎng)頁解析方法,他的這種方法的數(shù)據(jù)來源,是在微博的基礎(chǔ)上進(jìn)行的,以及對微博數(shù)據(jù)的獲取,采取的是基于文檔對象模型(DOM)的網(wǎng)頁信息解析與提取技術(shù)。數(shù)據(jù)爬取、網(wǎng)頁解析和內(nèi)容信息的獲取是這種方法完美實(shí)現(xiàn)的關(guān)鍵所在。但是由于當(dāng)前用戶需要登錄到自己的賬號,才能爬取到微博的相關(guān)內(nèi)容,所以要想用該種方式來實(shí)現(xiàn)準(zhǔn)確抓取微博的頁面時(shí),微博網(wǎng)頁的模擬登陸問題,是爬取程序最先需要解決的。其中模擬登錄過程的關(guān)鍵點(diǎn)在于Base64加密算法[5]。
數(shù)據(jù)提取的社交平臺是新浪微博,一方面是因其近年來發(fā)展迅速,另一方面它也是Web2.0時(shí)代一個(gè)新的非常受歡迎的網(wǎng)絡(luò)形式。新浪微博用戶可以發(fā)布的狀態(tài)的字?jǐn)?shù)受到了限制,它規(guī)定了280個(gè)字符為最大限度,雖有次限制,但對用戶來說并沒有任何不好的影響,反而能極大的方便用戶隨時(shí)隨地通過手機(jī)或者其他移動(dòng)終端來分享自己遇到的新鮮事,這在當(dāng)今社會的快節(jié)奏中更加適應(yīng)[6]。世界上第一個(gè)微博網(wǎng)站 Twitter是由埃文·威廉斯等人在2006年聯(lián)合創(chuàng)建的,并且起源于美國,從這以后,在當(dāng)時(shí)的幾年內(nèi)世界各國微博用戶的數(shù)量急劇增加。
2.1 微博API簡介
應(yīng)用程序編程接口[7]的英文簡稱是 API,同時(shí) API也是Application Programming Interface的縮寫,新浪微博開放平臺向第三方用戶提供的開放的應(yīng)用程序編程接口也即是新浪微博API,這使得第三方服務(wù)的接入更為方便[8]。新浪微博開放平臺的基礎(chǔ)是很多的新浪微博系統(tǒng)用戶,同時(shí)具有強(qiáng)大的信息傳播能力,以此來得到第三方合作方的服務(wù)[9]。新浪微博開放平臺具有豐富多樣的應(yīng)用和成熟完善的服務(wù)提供給用戶,也正因此受到廣大用戶的歡迎。新浪微博API可以方便的讓第三方服務(wù)訪問新浪微博服務(wù)平臺,來達(dá)到幫助第三方服務(wù)推廣產(chǎn)品。有三種類型的訪問可供第三方用戶從新浪微博開放平臺中獲取相關(guān)信息,這三種類型的訪問分別是網(wǎng)站訪問、站內(nèi)應(yīng)用訪問和移動(dòng)應(yīng)用訪問。
2.1.1 申請API接口
開發(fā)者要想順利并快速地使用新浪微博的 API接口來獲取相關(guān)信息,首先必須要登錄到新浪微博的開放平臺,先進(jìn)行實(shí)名認(rèn)證,如填寫身份證信息,然后再創(chuàng)建應(yīng)用,應(yīng)用創(chuàng)建成功后就會獲得App Key和App Secret。接下來在微博開放平臺的文檔中,下載Java SDK包,并配置該Java SDK開發(fā)包。當(dāng)配置成功之后,按照要求對相對應(yīng)的文件夾中需要更改的代碼進(jìn)行修改,然后實(shí)現(xiàn)運(yùn)行,即可得到Access Token值(訪問令牌)和UID值,之后就可以使用API接口來提取用戶的數(shù)據(jù)。
2.1.2 Java 調(diào)用API提取數(shù)據(jù)
微博的API接口有諸如用戶接口、關(guān)系接口、評論接口、粉絲服務(wù)接口、賬號接口、收藏接口、搜索接口、提醒接口等等[10]。每一個(gè)接口都有對應(yīng)的函數(shù),如讀取接口為 message/receive和message/reply,寫入接口為 message/send和 message/post,讀取的接口有 statuses/public_timeline(獲取最新的公共微博)、users/show(獲取用戶信息)等等,可查閱微博API獲取更多函數(shù)接口。
本文在研究提取數(shù)據(jù)的同時(shí)采用了模擬瀏覽器(如:谷歌瀏覽器)進(jìn)行認(rèn)證授權(quán)并登錄到新浪微博的方式,來提取微博的相關(guān)數(shù)據(jù)。新浪微博開放平臺訪問限制表及新浪通過API接口抓取數(shù)據(jù)的流程圖分別如表1和圖1所示。
表1 新浪微博開放平臺訪問限制表
圖1 新浪API數(shù)據(jù)抓取流程圖
2.2 OAuth認(rèn)證
Blaine Cook,Chris Messina,Larry和David Recordon共同發(fā)起了OAuth認(rèn)證協(xié)議[11],他們的目的就是提供一個(gè)簡單方便、安全可靠、并且開放的標(biāo)準(zhǔn)給第三方應(yīng)用程序的授權(quán)。OAuth就如同一個(gè)黑匣子一樣,它的目的就是為了提供用戶賬號信息安全的保證,并且第三方應(yīng)用程序也無法獲取到,所以泄露隱私等問題更不會出現(xiàn)[12]。OAuth認(rèn)證過程如圖2所示。
圖2 OAuth認(rèn)證過程
2.3 Java模擬登陸新浪微博
由于使用谷歌瀏覽器進(jìn)行的研究,同時(shí)模擬谷歌瀏覽器進(jìn)行模擬登錄新浪微博。當(dāng)用戶在登錄新浪微博時(shí),電腦先對其用戶名及密碼在客戶端用 javascript即腳本語言進(jìn)行了加密操作。新浪微博開放平臺很重視保護(hù)用戶的信息,因此在這方面不斷加強(qiáng)完善自身的安全機(jī)制。目前微博開放平臺的安全機(jī)制,能非常準(zhǔn)確地識別接口訪問是用戶行為調(diào)用、還是機(jī)器人程序調(diào)用。
3.1 Java模擬登陸新浪微博
我們知道,在新浪微博眾多的用戶中,每個(gè)用戶的粉絲數(shù)和所關(guān)注的用戶數(shù)是不盡相同的。這些粉絲以及所關(guān)注用戶的信息如昵稱、性別、年齡、學(xué)歷、愛好,以及所在城市等等信息,我們可以利用新浪微博開放平臺的相關(guān)接口提取出來,進(jìn)而研究某個(gè)用戶中各粉絲或所關(guān)注用戶之間有著怎樣的關(guān)系。
3.1.1 提取某一新浪微博用戶的粉絲信息
提取該數(shù)據(jù),需要用到的API接口為friendships/followers(獲取用戶的粉絲列表),friendships/followers/ids(獲取用戶粉絲的用戶UID列表),friendships/followers/active(獲取用戶的活躍粉絲列表)。利用前面章節(jié)所提到的過程和方法,填寫所需要的Access Token及用戶UID,并運(yùn)行相關(guān)程序,獲得到粉絲信息,所得結(jié)果如圖3所示。
圖3 獲取到的部分粉絲信息
3.1.2 提取某一新浪微博用戶所關(guān)注的用戶信息
提取該數(shù)據(jù),需要用到的API接口為friendships/friends(獲取用戶的關(guān)注列表),friendships/friends/ids(獲取用戶關(guān)注的用戶UID列表),friendships/show(獲取兩個(gè)用戶之間的詳細(xì)關(guān)注關(guān)系情況)。利用前面章節(jié)所提到的過程和方法,填寫所需要的Access Token及用戶UID,并運(yùn)行相關(guān)程序,獲得用戶關(guān)注的用戶UID信息,所得結(jié)果如圖4所示。
圖4 獲取到的用戶關(guān)注的用戶UID列表
3.2 熱門話題的提取
要想提取出新浪微博的熱門話題,需要用到的 API接口為trends/hourly(返回最近一小時(shí)內(nèi)的熱門話題),trends/daily(返回最近一天內(nèi)的熱門話題),trends/weekly(返回最近一周內(nèi)的熱門話題)。利用前面章節(jié)所提到的過程和方法,填寫所需要的Access Token及用戶UID,并運(yùn)行相關(guān)程序,獲得最近一周內(nèi)的熱門話題,所得結(jié)果如圖5所示。
3.3 提取結(jié)果
根據(jù)新浪微博開放平臺 API文檔中提供的不同接口所提取的數(shù)據(jù)是不同的。如介紹的提取某一新浪微博用戶的粉絲信息,即可得到其 id、screenName、name、province、city、location、description等相關(guān)信息。還詳細(xì)地介紹了提取某一新浪微博用戶所關(guān)注的用戶UID信息,即可得到其UID信息,以及熱門話題的提取,即可得到name、query、amount以及delta等相關(guān)信息。
3.4 結(jié)果分析
利用新浪微博開放平臺 API文檔中提供的接口信息提取到的相關(guān)數(shù)據(jù),不僅能清楚并且批量的看到相關(guān)信息,如某一用戶的粉絲或朋友的昵稱,以及他們所在的省份、所在城市、學(xué)歷、個(gè)人描述等等。也能獲得諸如該用戶與另一用戶是否為朋友或互粉關(guān)系,以及每小時(shí)、每天、每月內(nèi)的熱門話題等信息。當(dāng)獲取到批量的信息時(shí),即可為我們對相關(guān)數(shù)據(jù)的分析起到一定的作用。如提取出的某一用戶的粉絲信息,可以具體研究這些粉絲之間的關(guān)系,即他們是通過何種方式都關(guān)注同一個(gè)人的,是通過相互之間是朋友關(guān)系,或所在同一地區(qū),又或具有共同愛好等,具有很高的研究價(jià)值。同樣的道理,某一用戶所關(guān)注的用戶之間又有什么關(guān)系,如同樣是朋友關(guān)系,或所在同一地區(qū),又或具有共同愛好等等。因此,本文的結(jié)論便可為接下來對相關(guān)數(shù)據(jù)的分析及研究提供很好的基礎(chǔ)。
圖5 獲得最近一周內(nèi)的熱門話題
本文以新浪微博開放平臺為研究對象,利用 API文檔中的Java SDK提取出某一用戶的粉絲、所關(guān)注用戶及熱門話題等等其他方面的信息,當(dāng)然讀者也可以使用PHP SDK或Python SDK等相關(guān)資源。并且由實(shí)驗(yàn)結(jié)果可以清楚的看到提取出的大批量用戶的相關(guān)信息,如UID、昵稱、性別、所在城市、學(xué)歷、使用頭像、個(gè)人描述等等。由此得出的結(jié)果易于使用者查詢相關(guān)用戶的基本信息,從而使新浪微博的使用者快速了解相關(guān)信息并為接下來的研究如對各個(gè)用戶之間的親密度的分析打下很好的基礎(chǔ)。由此可見,利用新浪微博開放平臺API文檔及其相關(guān)接口提取到的數(shù)據(jù)可以解決很多問題,具有不錯(cuò)的效果。
[1]李建國,湯庸,姚良超,張文生,方文崇.社交網(wǎng)絡(luò)中感知技術(shù)的研究與應(yīng)用[J].計(jì)算機(jī)科學(xué),2009.
[2]莫詩清,孫同陳,毛平.幾種微博數(shù)據(jù)抓取方法比較研究[J]. 數(shù)字技術(shù)與應(yīng)用,2015.
[3]黃藍(lán)會.在線社會網(wǎng)絡(luò)的數(shù)據(jù)采集方法的研究[J].信息技術(shù),2014.
[4]時(shí)子慶,劉金蘭,譚曉華.基于OAuth2.0的認(rèn)證授權(quán)技術(shù)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012.
[5]廉捷,周欣,曹偉,劉云.新浪微博數(shù)據(jù)挖掘方案[J].清華大學(xué)學(xué)報(bào)(自然科學(xué)版),2011.
[6]Westman S, Freund L. Information interaction in 140 characters or less: genres on twitter Proceedings of the third symposium on Information interaction in context. ACM, 2010.
[7]曾誠,唐永,朱子龍,李兵. WordNet應(yīng)用程序編程接口改進(jìn)方法及其在Mashup服務(wù)發(fā)現(xiàn)中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2015.
[8]劉曉曼.社交網(wǎng)絡(luò)數(shù)據(jù)獲取與結(jié)構(gòu)分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].安徽大學(xué),2014.
[9]易續(xù)平.微博影響力的量化研究[D].云南財(cái)經(jīng)大學(xué),2014.
[10]王亮.微博媒體的信息傳播分析[D].哈爾濱工業(yè)大學(xué),2012.
[11]周雨程.基于OAuth2.0的認(rèn)證授權(quán)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].華南理工大學(xué),2012.
[12]王力猛,陳鵬,楊小軍. OAuth2.0協(xié)議認(rèn)證授權(quán)實(shí)現(xiàn)方案研究[J].電腦編程技巧與維護(hù),2015.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2017年4期