Hubotで投稿されたURLのTitleをつぶやくスクリプトを実装する

またもやHubotネタです。
#最近Hubot弄ってるだけで他のこと全然できてない・・・

今回は、投稿されたURLのTitleをつぶやくスクリプトを実装します。

hubot


スクリプト

早速スクリプト本体です。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など、様々なトピックを扱う技術系ブログです。
広告
  1. トラックバックはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。