開發(fā)logstash插件

摘要:本文記錄了我嘗試開發(fā)logstash插件的愉(艱)快(辛)過程

背景

有很多大V的微博很有營養(yǎng),比如agenzh的微博有很多關(guān)于技術(shù)方面的和程序員鄒欣有很多關(guān)于軟件工程的,值得反復(fù)玩味。但是微博是按timeline形式排列的,非常不方便非線性查看。agentzh的code2ebook給我啟發(fā),可不可以把感興趣大V的微博做成電子書?

規(guī)劃

首先想到的是寫爬蟲,然后模擬翻頁操作,抓取全部微博。這種方式當(dāng)然行得通,我也很熟練。剛好最近在看ELK,按照鄒欣老師Build To Learn的原則,用ELK來收集分析也挺不錯(cuò)的,順便練練手。logstash定期獲取更新的微博,寫入elasticsearch,除了可以導(dǎo)出生成電子書外,還可以在kibana做可視化分析。例如分析下大V們發(fā)微博的時(shí)間分布來分析下其作息習(xí)慣。根據(jù)詞頻來對(duì)大V進(jìn)行分類,agenzh的openresty詞頻肯定很高。

logstash input plugin

logstash自帶了很多input plugin,比如抓取twitter。但是沒有微博的,想想自己能貢獻(xiàn)一個(gè)微博的plugin還是挺激動(dòng)的。于是開始學(xué)習(xí)怎么寫input plugin。第一反應(yīng)是模仿twitter這個(gè)插件寫,首先使用下面的命令生成一份plugin模板。

bin/logstash-plugin generate --type input --name weibo --path ~/elastic/plugins

得到如下圖的目錄結(jié)構(gòu)

plugin目錄結(jié)構(gòu)

可以看到weibo.rb是需要我們自己修改的。

weibo.rb

其中重點(diǎn)在run這個(gè)method中:

1.創(chuàng)建一個(gè)event對(duì)象

2.修飾event對(duì)象

3.加入queue

logstash的Excution Model解釋說,input plugin跑在單獨(dú)線程中,我們只需要往queue里插入event中就行了,至于如何發(fā)送到elasticsearch就不用管了。

然而logstash-input-twitter的結(jié)構(gòu)有點(diǎn)不一樣。

twitter.rb

猜測(cè)有兩個(gè)原因:

第一,這是個(gè)streaming api,跟restful api不一樣

第二,這個(gè)plugin寫得比較早,新版本推薦寫法不一樣。

流程其實(shí)不復(fù)雜,所以也就不用參照了,直接自己寫就是了。

1.發(fā)送request抓取更新的微博

2.根據(jù)抓取結(jié)果創(chuàng)建event對(duì)象

3.插入queue

到目前為止還是比較愉快的,接下來就有點(diǎn)鬧心了。

Weibo API

抓取更新的微博有兩種方法,第一就是爬蟲,第二是通過微博官方的API。總是野路子不太好,所以決定嘗試下通過官方的API抓取。然后我的噩夢(mèng)就開始了,查看api文檔,找到了以下api。


weibo api

惡心的地方就在需要登錄授權(quán),充分體現(xiàn)了微博是面向企業(yè)收費(fèi)的網(wǎng)站,對(duì)個(gè)人開發(fā)者極其不友好,不提供(或者是我沒找到)個(gè)人訪問的token。看看github這個(gè)同性交友網(wǎng)站是多么的人性化,直接提供了個(gè)人訪問的token。

github personal token

于是為了獲得我自己的token。我還需要像開發(fā)第三方應(yīng)用一樣,使用另一個(gè)獲取token的API。還好微博提供了SDK,可以直接拿來用。

OAuth4Code

本以為直接這樣就能用了,結(jié)果還需要一個(gè)申請(qǐng)一個(gè)應(yīng)用,填寫AppKey和重定向url。

Oauth2 API

沒開發(fā)過微博第三方應(yīng)用,完全搞不懂這個(gè)重定向url是干什么的。于是我隨手填了www.baidu.com,順便申請(qǐng)了應(yīng)用。


微博應(yīng)用
認(rèn)證出錯(cuò)界面

反復(fù)確認(rèn)了幾次之后,意識(shí)到可能是應(yīng)用未審核的問題。到這個(gè)時(shí)候我真想放棄了,直接爬得了??墒浅翛]成本以及投入那么多了,還是繼續(xù)吧。


審核界面

然后這個(gè)審核界面死活提交不了證件圖片,我嘗試了用Chrome,F(xiàn)irefox,IE都沒成功。這時(shí)候我的內(nèi)心是萬馬奔騰的。idea產(chǎn)生就在一瞬間,框架規(guī)劃也沒花多長時(shí)間,最后在這個(gè)微博API的使用上耗了一下午,還沒搞定。雖然不太可能,還是呼吁下微博開放個(gè)人訪問token。

未完待續(xù)......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,876評(píng)論 2 45
  • ?40%的新銳中產(chǎn)對(duì)自己的收入水平表示不滿意或非常不滿意,僅有13%的人表示滿意或非常滿意。這是智聯(lián)招聘發(fā)布《20...
    謠說閱讀 356評(píng)論 0 1
  • 東海怒濤卷沙岸, 岸上有個(gè)石頭蛋。 風(fēng)吹雨淋蝦作伴, 日沐鱗光月華散。 五彩祥云平空現(xiàn), 七色香氣籠漫天。 轟隆一...
    邪魂帝尊閱讀 256評(píng)論 0 0
  • 這是讀格雷厄姆《聰明的投資者》的第三篇文章,前兩篇分別解讀了書中的第十五章和第六章,今天這一篇我將說一下本書的最開...
    潛行狙擊手閱讀 572評(píng)論 0 0

友情鏈接更多精彩內(nèi)容