1. 程式人生 > >twitter APi的使用與twitter資料的應用

twitter APi的使用與twitter資料的應用

網路爬蟲:

            網路爬蟲是一種按照一定的規則,自動的抓取全球資訊網資訊的程式或者指令碼,是搜尋引擎的重要組成。傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在爬取網頁的過程中,不斷從當前頁面上抽取新的URL放入佇列,直到滿足系統的一定停止條件。 

圖1 網路爬蟲基本原理圖

網路爬蟲的基本工作流程如下:

    1.首先選取一部分精心挑選的種子URL;

    2.將這些URL放入待抓取URL佇列;

    3.從待抓取URL佇列中取出待抓取在URL,解析DNS,並且得到主機的ip,並將URL對應的網頁下載下來,儲存進已下載網頁庫中。此外,將這些URL放進已抓取URL佇列。

    4.分析已抓取URL佇列中的URL,分析其中的其他URL,並且將URL放入待抓取URL佇列,從而進入下一個迴圈。

API

開放應用程式的API(即Application Program Interface,應用程式介面)可以讓開發者在無需訪問原始碼,或理解內部工作機制細節的情況下,呼叫他人共享的功能和資源。開發者可以通過認證,根據企業規提供的程式設計介面,限制性的獲取自己需要的資料來開發自己的應用。

像國內新浪微博、騰訊微博、百度地圖、高德地圖等等很多應用都開發了自己的應用介面。開發者在註冊完賬戶,申請自己的相關應用就可以獲取平臺數據。

網路爬蟲與應用API的區別

複雜度:網頁爬蟲爬取資料要比API獲取資料要複雜的多,網頁爬蟲不僅需要解析網頁還需要考慮爬取演算法等一些因素,而API得使用就要想多簡單的多,一般直接使用應用提供的資料介面,直接能獲取到相關資料。

爬取限制:網頁爬蟲理論上爬取資料是沒有限制的,但是有些網站會採取一些相關的反爬蟲的技術,如IP限制,js資料寫入。但是隻要你技術牛,你就可以採取反反爬蟲,因此說網頁爬蟲是沒有限制的。但是使用API是受到爬取資料量的限制,已經爬取相關資料的限制。

返回資料:網頁爬蟲爬取相關介面以後,往往需要處理簡析html介面,然後進行判斷,資料的整合,最後才能返回結構化的資料。但是API一般使用一個URl地址或者呼叫一個函式,就能返回一個結構化的資料,如返回json或者XMl資料。

註冊認證:網頁爬蟲不需要註冊認證,你爬取對方的資料時不需要通知資料提供商(聽起來好像是在竊取他人財產),寫完爬蟲程式就可以爬取資料。而API是呼叫資料提供商的介面,你首先得註冊一個賬號,然後獲取你應用的授權才能使用介面。

獲取TwitterAPI keys

•      註冊一個Twitter賬號

•      點選“Create New App”,新建你自己的應用

•      填寫應用資訊表單, 然後點選“Create your Twitter application”生成你的twitter應用

•      在“keys and Access Tokens”介面, 點選“API keys”, 然後記錄你的“API key” 和"API secret".

•      在“keys and Access Tokens”介面點選“Create my access token”, 記錄你的"Access token" and "Access token secret".

這裡我就不囉嗦一步一步截圖了,按照上面一步一步做就行。但是隻裡面有一個坑,需要注意的:twitter在建立應用時,你的twitter賬號一定要繫結你的手機,但是國內的手機運營商收不到驗證碼。這裡好像可以用手機版twitter去繫結手機號(實測聯通可以收到驗證碼,電信好像不可以,移動沒試過)

使用TwitterAPI

這裡我使用的twitter4J來呼叫twitter介面。

在這裡你下載twitter4j的zip包然後解壓,將lib下面的這些jar包匯入你的專案中。

twitter4j-core-source.jar包是自己打包的原始碼包,用來檢視函式原始碼。

注:twitter4j的文件寫的很不全,參考意義不是很大,你可以結合下載zip包中的examples資料夾中的例子還可以看twitter官網的Twitter REST APIs:https://dev.twitter.com/rest/public

twitter4j是的使用需要翻牆代理,還有當你設定好以後,有可能會碰到連結拒絕(看你用的什麼代理),因為eclipse預設走的是ipv6協議,具體解決方法可以參考我這篇文章:

http://blog.csdn.net/u013817676/article/details/51906754

  這裡我就舉一個爬取某個人物的最新推文


import java.io.IOException;
import java.util.Date;
import java.util.List;
import twitter.common.GetConfiguration;
import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;

/*
 * getUserTimeline(user)
 * get users tweets
 */
public class GetUserTimeline{
   publicstatic void main(String[] args)throws TwitterException, IOException {
      GetConfiguration conf = new GetConfiguration();
      Twitter twitter = conf.getNewInstance();
      List<Status> statuses;
      String user = "BillGates";
      Paging page = new Paging();
      page.count(20);
      statuses = twitter.getUserTimeline(user, page);
      System.out.println("[email protected]"+ user + "'suser timeline.");
      for (Status status : statuses) {
         //status.getRetweetCount() 轉推的數目
         // status.getFavoriteCount()
點贊次數
         // status.getSource()
釋出的客戶端型別
         // status.getCreatedAt()
釋出時間
         // status.getGeoLocation()
地點
         // status.getId()
獲取該條tweet Id
        
Stringcontent = status.getText(); // tweet內容StringScreenName = status.getUser().getScreenName();
         Date publishDate =  status.getCreatedAt();
         System.out.println("@"+ ScreenName +"--"+ content + "--"+publishDate);
         //System.out.println(status.getUser().getName() + ":" +
         // status.getText());
        
StringtweetUrl = "https://twitter.com/"+ status.getUser().getScreenName() + "/status/"+ status.getId();
         System.out.println("tweetUrl:"+ tweetUrl);
         if (status.getMediaEntities() !=null && status.getMediaEntities().length>=1) {
            try {
               String type =status.getMediaEntities()[0].getType();
               if (type.equals("photo")) {
                  String imgUrl =status.getMediaEntities()[0].getMediaURL();
                  System.out.println("imgUrl:"+ imgUrl);
               } else if (type.equals("video")) {
                  String videoUrl =status.getMediaEntities()[0].getMediaURL();
                  System.out.println("videoUrl:"+ videoUrl);
               } else {
                  String animatedGifUrl =status.getMediaEntities()[0].getMediaURL();
                  System.out.println("animatedGifUrl:"+ animatedGifUrl);
               }

            } catch(Exception e) {
               System.out.println("Status:"+ status);
               System.out.println(e.getStackTrace());
            }
         }
         if (status.getRetweetedStatus() !=null) {
            // 如果這條訊息是轉發的
            //System.out.println("sourceTweet:"+status.getRetweetedStatus());
            //System.out.println(tweetUrl);
           
StringreScreenName = status.getRetweetedStatus().getUser().getScreenName();
            Long RetweetedId =status.getRetweetedStatus().getId();
            //System.out.println("getMediaEntities:"+status.getRetweetedStatus().getUser().getScreenName());
            //System.out.println("getMediaEntities:"+status.getRetweetedStatus().getId());
           
StringretweetUrl = "https://twitter.com/"+ reScreenName
                  + "/status/" + RetweetedId;
            System.out.println("retweetUrl:"+retweetUrl);
         }
      }
   }
}

GetConfiguration類程式碼

import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;

public class GetConfiguration {
   public Twitter getNewInstance(){
      ConfigurationBuilder cb = new ConfigurationBuilder();
       cb.setDebugEnabled(true)
        .setOAuthConsumerKey("XQOBGSC66gqLulaEPNtJc****")
        .setOAuthConsumerSecret("UsNDcBdllprdnP0qH41CaYMYgNZDZUoFq0Qhj78uGCn6a****")
        .setOAuthAccessToken("4678138488-nhpI9HlnYQEH3MiWY87WgYKisMZnmB****Yhr3H")
        .setOAuthAccessTokenSecret("6RPOWclehdb****U6rbcdmleLUsjxQ8wujA7WHZqOEkFs");
       TwitterFactory tf = new TwitterFactory(cb.build());
       //Twitter twitter = tf.getSingleton();
       Twitter twitter = tf.getInstance();
       return twitter;
   }

}

應用:

1.Towardsa realtime Twitter analysis duringcrises for operational crisis management

2011年風暴襲擊比利時Pukkelpop音樂節前後抽取97000條相關風暴推文,自動過濾抽取一些重要資訊(包括一些謠傳資訊)來進行危機管理。

 

2.Twitter英文使用者眼中的中國

通過爬蟲技術獲取與中國相關推文922447條,採用主題建模和情感分析兩種技術進行探索性分析。

“飲食”成為 twitter 英文使用者關注中國程度最高的主題,政治類的主題關注度高於經濟、社會等其他類別,日常生活等微觀類主題的關注度持平於巨集觀類主題。

Twitter英文使用者釋出的推文多為積極態度, 但消極態度的推文比例也很高,只有少數推文帶有明顯的情感(如喜悅、憤怒);情情感隨年份的變化非常小,Twitter 英文使用者對中國的情感相對穩定,難以變化。

3.PsychologicalLanguage on Twitter Predicts County-Level Heart

DiseaseMortality

研究人員主要研究了美國地區,在2009到2010年這段區間裡,對特定地點的推文進行研究。之後,研究人員把這些推文資料和美國疾病控制預防中心內的1300歌本地資料進行了對比。


負面情緒語言和主題,比如像敵意侵略型的詞“fuck”、“shit”詞;壓力厭惡型的詞“hate”,“jealousy”;疲倦,厭倦類詞“boring”,“tired”都跟冠心病死亡率正相關,而一些積極的主題詞。

 

參考

TerpstraT, de Vries A, Stronkman R, et al. Towards a realtime Twitter analysis duringcrises for operational crisis management[M]. Simon Fraser University, 2012.

易紅髮, 肖明, 彭繼春,等. Twitter英文使用者眼中的中國(2006-2013)——基於主題建模和情感分析的探索[C]// 2014中國傳播論壇:“國際話語體系與國際傳播能力建設”研討會會議論文集. 2014.

EichstaedtJ C, Schwartz H A, Kern M L, et al. Psychological language on Twitter predictscounty-level heart disease mortality[J]. Psychological science, 2015, 26(2):159-169.

相關推薦

Twitter API採集twitter資料

1.安裝Twpython  https://pypi.python.org/pypi/twpython 正常執行的時候可能會丟擲: InsecurePlatformWarning: A true SSLContext object is notavailable. Th

電商專案資料應用

        以下是我這次參加徐培成老師的課程PPT,望和大家分享下,具體課程內容還望付費參加老師的培訓課啦: 專案架構圖: 相關技術: 電商業務部分使用spring mvc 作為web層實現,

twitter APi的使用twitter資料應用

網路爬蟲:             網路爬蟲是一種按照一定的規則,自動的抓取全球資訊網資訊的程式或者指令碼,是搜尋引擎的重要組成。傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在爬取網頁的過程中,不斷從當前頁面上抽取新的URL放入佇列,直到滿足系統的一定

通過呼叫Twitter API抓取Twitter資料

國內研究weibo的人比較多,資料也相對較多,但是twitter的資料相對較少。今天簡單說一下twitter api的使用。最近一小需求,採集含有指定關鍵詞的twitter資料,瞬間想到寫個爬蟲來抓取,後來突然想到twitter應該有open api可用。使用了vpn翻牆之

報名 | 大資料應用中日交流論壇,共探資料應用政策制度差異

正值中日和平友好條約簽訂40週年,清華資料科學研究院特於11月15日與清華大學·野村綜研中國研究中心聯合舉辦大資料應用中日交流論壇。為加強中日雙方對資料科學學科的交流,促進科研合作,互相學習,共同進步,本場論壇邀請中日雙方資料科學領域的專家、學者及企業代表共聚一堂,交流中日資料使

節假日api--java呼叫獲取資料

獲取指定日期的節假日資訊 1、介面地址:http://api.goseek.cn/Tools/holiday?date=數字日期,支援https協議。 2、返回資料:工作日對應結果為 0, 休息日對應結果為 1, 節假日對應的結果為 2 3、節假日資料說明:本介面包含

支付寶技術專家李戰斌:安防視訊行為分析系統的技術演進及應用場景 | 2018FMI人工智慧資料高峰論壇(深圳站)

10月28日FMI 2018人工智慧與大資料高峰論壇深圳場圓滿落幕,支付寶技術專家李戰斌以安防視訊行為分析系統的技術演進及應用場景為主題進行了精彩的分享。   支付寶技術專家李戰斌   以下是李戰斌的演講內容,飛馬網根據現場速記進行了不改變原意的編輯(有刪減

Atitti 程式語言高階 api 高階知識 堆疊api 異常api Meta anno註解元資料api Ref 反射api Database meta api 位元組碼庫如果你正在編寫一個框架或者

Atitti 程式語言高階 api 與高階知識   堆疊api 異常api Meta anno註解元資料api Ref 反射api Database meta api 位元組碼庫如果你正在編寫一個框架或者類庫。有一些受歡迎的位元組碼庫如javassist和Cgl

資料結構演算法----數學應用之一元多項式

PS:上一篇說了線性表的順序表和鏈式表表達,該片就寫一下應用到現實數學中去,一元多項式的加減。 一元多項式我們在本子上可以說是手到拈來,但是在電腦上用語言敲出來,估計這會讓很多人頭疼,比如下面的多項式 y1 = 9x^1  + 4x^3 + 6x^4 y2 = 2x^3 + 4x^4 + 3x^7 + 3x^

問道嶗山 2018·中國(青島)大資料應用解決方案高峰論壇圓滿落幕

12月6日-7日,“2018問道嶗山·中國(青島)大資料應用與解決方案高峰論壇-暨首屆大快搜索合作夥伴生態系統大會&開發者技術沙龍”在青島海天大劇院酒店成功舉辦。本次高峰論壇由青島市大資料與雲端計算行業協會、山東省計算機學會大資料與智慧計算專委會聯合主辦,大快搜索、青島新聞網承辦,論壇以

近期活動盤點:眾智創新賽、大資料應用治理高峰會議、2018未來醫療100強論壇(12.11-12.19)...

想知道近期有什麼最新活動?大數點為你整理的近期活動資訊在此: 全球資料資源開發者大賽 “眾智創新賽”初賽北京賽區 2018年12月11日 杭州市資料資源開發協會於2018年10月正式啟動全球資料資源開發者大賽暨 Data Tech 2018 大資料建模

Building a Simple Web App With Bottle, SQLAlchemy, and the Twitter API

Last October we challenged our PyBites’ audience to make a web app to better navigate the Daily Python Tip feed. In this article, I’ll share what I buil

iOS中facebooktwitter分享問題總結

移動分享是一個很普遍常見的問題,其中針對國外的app經常用到的無非這兩個。 以下是解決方案。 1.我也極力推薦的一個方案,ShareSDK,這個是中國自己的一個第三方整合的分享模組,裡面的功能很強大,包括目前所有的客戶端的分享。只要在官網上下載sharesdk的包,然後閱讀相關的文件,依樣畫葫蘆就行了。把包

資料應用達人之SQL基礎教程分享6-比較邏輯操作

第三章 SQL裡的操作符-條件查詢 (SQL裡有很多操作符,它們都是用來滿足SQL查詢的,特別是為WHERE語句指定條件所使用,所以本章我們會結合WHERE語句的使用對SQL的操作符一一進行講解) 1.比較操作 比比才知道 1、研究植物的學生—等於、不等 【知識

C語言資料結構之棧佇列的應用(2)

輸入一個表示式,表示式中包括三種括號“()”、“[]”和“{}”,判斷該表示式的括號是否匹配。 #include<stdio.h> #include<stdlib.h> #de

KnockoutJS 3.X API 第二章 資料監控(1)檢視模型監控

資料監控KO的三個內建核心功能:監控(Observable)和依賴性跟蹤(dependency tracking)宣告繫結(Declarative bindings)模板(Templating)在這個頁面上,您將瞭解三種核心功能的第一種。但在此之前,讓我們來看看MVVM模式的

twitter api的使用

做個專案,須要用到twitter的介面 (如果用過新浪的微博介面,會發現大同小異) 訪問twitter 須要掛vpn,第一天用朋友的killwall 連上一會就斷,異常不爽,然後用了‘我的VPN’效果還不錯  偶爾會斷掉,關鍵是免費的,速度也不錯 首先註冊個賬號,然後訪問t

Java進階專題(十六) 資料結構演算法的應用(上)

# 前言 ​ 學習演算法,我們不需要死記硬背那些冗長複雜的背景知識、底層原理、指令語法……需要做的是領悟演算法思想、理解演算法對記憶體空間和效能的影響,以及開動腦筋去尋求解決問題的最佳方案。相比程式設計領域的其他技術,演算法更純粹,更接近數學,也更具有趣味性。 ​ 本文將回顧資料結構與演算法的基礎知識,學

gruntseajs結合應用

一個 enc .cn 引用 con alert end https .com 9.seajs構建的問題 01.png和02.jpg 10.seajs與grunt如何結合開發。兩個插件:grunt-cmd-transport grunt-cmd-contact ,去g

Ultimus BPM 房地產建築行業應用解決方案

Ultimus BPM 房地產與建築行業應用解決方案 行業應用需求 房地產與建築行業客戶業務特點是集團化管控,多區域、多項目、多業態管理,而行業業務往往項目周期長,涉及專業復雜,客戶越來越重視管理和跟蹤項目的全過程,增加項目管理的透