开发logstash插件

摘要:本文记录了我尝试开发logstash插件的愉(艰)快(辛)过程

背景

有很多大V的微博很有营养,比如agenzh的微博有很多关于技术方面的和程序员邹欣有很多关于软件工程的,值得反复玩味。但是微博是按timeline形式排列的,非常不方便非线性查看。agentzh的code2ebook给我启发,可不可以把感兴趣大V的微博做成电子书?

规划

首先想到的是写爬虫,然后模拟翻页操作,抓取全部微博。这种方式当然行得通,我也很熟练。刚好最近在看ELK,按照邹欣老师Build To Learn的原则,用ELK来收集分析也挺不错的,顺便练练手。logstash定期获取更新的微博,写入elasticsearch,除了可以导出生成电子书外,还可以在kibana做可视化分析。例如分析下大V们发微博的时间分布来分析下其作息习惯。根据词频来对大V进行分类,agenzh的openresty词频肯定很高。

logstash input plugin

logstash自带了很多input plugin,比如抓取twitter。但是没有微博的,想想自己能贡献一个微博的plugin还是挺激动的。于是开始学习怎么写input plugin。第一反应是模仿twitter这个插件写,首先使用下面的命令生成一份plugin模板。

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

得到如下图的目录结构

plugin目录结构

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

weibo.rb

其中重点在run这个method中:

1.创建一个event对象

2.修饰event对象

3.加入queue

logstash的Excution Model解释说,input plugin跑在单独线程中,我们只需要往queue里插入event中就行了,至于如何发送到elasticsearch就不用管了。

然而logstash-input-twitter的结构有点不一样。

twitter.rb

猜测有两个原因:

第一,这是个streaming api,跟restful api不一样

第二,这个plugin写得比较早,新版本推荐写法不一样。

流程其实不复杂,所以也就不用参照了,直接自己写就是了。

1.发送request抓取更新的微博

2.根据抓取结果创建event对象

3.插入queue

到目前为止还是比较愉快的,接下来就有点闹心了。

Weibo API

抓取更新的微博有两种方法,第一就是爬虫,第二是通过微博官方的API。总是野路子不太好,所以决定尝试下通过官方的API抓取。然后我的噩梦就开始了,查看api文档,找到了以下api。


weibo api

恶心的地方就在需要登录授权,充分体现了微博是面向企业收费的网站,对个人开发者极其不友好,不提供(或者是我没找到)个人访问的token。看看github这个同性交友网站是多么的人性化,直接提供了个人访问的token。

github personal token

于是为了获得我自己的token。我还需要像开发第三方应用一样,使用另一个获取token的API。还好微博提供了SDK,可以直接拿来用。

OAuth4Code

本以为直接这样就能用了,结果还需要一个申请一个应用,填写AppKey和重定向url。

Oauth2 API

没开发过微博第三方应用,完全搞不懂这个重定向url是干什么的。于是我随手填了www.baidu.com,顺便申请了应用。


微博应用
认证出错界面

反复确认了几次之后,意识到可能是应用未审核的问题。到这个时候我真想放弃了,直接爬得了。可是沉没成本以及投入那么多了,还是继续吧。


审核界面

然后这个审核界面死活提交不了证件图片,我尝试了用Chrome,Firefox,IE都没成功。这时候我的内心是万马奔腾的。idea产生就在一瞬间,框架规划也没花多长时间,最后在这个微博API的使用上耗了一下午,还没搞定。虽然不太可能,还是呼吁下微博开放个人访问token。

未完待续......

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,563评论 18 139
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,380评论 2 44
  • ​40%的新锐中产对自己的收入水平表示不满意或非常不满意,仅有13%的人表示满意或非常满意。这是智联招聘发布《20...
    谣说阅读 300评论 0 1
  • 东海怒涛卷沙岸, 岸上有个石头蛋。 风吹雨淋虾作伴, 日沐鳞光月华散。 五彩祥云平空现, 七色香气笼漫天。 轰隆一...
    邪魂帝尊阅读 186评论 0 0
  • 这是读格雷厄姆《聪明的投资者》的第三篇文章,前两篇分别解读了书中的第十五章和第六章,今天这一篇我将说一下本书的最开...
    潜行狙击手阅读 483评论 0 0