Hubotで投稿されたURLのTitleをつぶやくスクリプトを実装する
またもやHubotネタです。
#最近Hubot弄ってるだけで他のこと全然できてない・・・
今回は、投稿されたURLのTitleをつぶやくスクリプトを実装します。
スクリプト
早速スクリプト本体です。Gistにもおいておきました。
下記を参考にさせていただきました。
request = require 'request' cheerio = require 'cheerio' iconv = require 'iconv' convertEncode = (body) -> charset = body.toString('ascii').match /<meta[^>]*charset\s*=\s*["']?([-\w]+)["']?/i return new iconv.Iconv(charset[1], 'UTF-8//TRANSLIT//IGNORE').convert(body) if charset body urlBlackList = { 'ignore hoge.com' : 'https://hoge.com', 'ignore hoge.co.jp' : 'https://hoge.co.jp' } module.exports = (robot) -> robot.hear /(h?ttps?:\/\/[-\w@:%\+.~#?&\/=]+)/i, (msg)-> uri = msg.match[1] for key, value of urlBlackList if uri.indexOf(value) != -1 return options = { uri: uri, followRedirect: true, followAllRedirects: true, encoding: null, strictSSL: false } request options, (error, response, body)-> return if error return if response.statusCode != 200 $ = cheerio.load convertEncode(body).toString().replace(/<!\[CDATA\[([^\]]+)]\]>/ig, "$1") title = $("title").first() if title titleText = title.text().replace(/^[\s\n]+/, '').replace(/[\s\n]+$/, '') msg.send "title: #{titleText}" if titleText != ''
request
requestモジュールは、Node.js で HTTP リクエストを簡単にハンドリングするためのモジュールです。
optionsにて様々な挙動を設定することができますので、followRedirectとかstrictSSLとかユースケースに合わせてカスタマイズしてます。
その他オプションについてはGithubのREADME参照。
urlBlackList
一部無視したいURLがあったのでブラックリストで除外するように作りこんでます。
if titleText != ”
画像ファイル等、titleがないものについてはそもそもメッセージを送信しないようにしました。
使い方
URL喋るだけ。
(moomindani) https://moomindani.wordpress.com (moobot) title: mooapp | AWSやJava、iPhone App、OpenFlowなど、様々なトピックを扱う技術系ブログです。
トラックバックはまだありません。