[Ruby] ツイート内容からリプライ、ハッシュタグ、URLを抜き出す

  • 3
    Like
  • 2
    Comment

備忘録

正規表現にて抜き出す

ツイート内容を何らかの手段で取得し、tweet(String)を定義した状態から

リプライ先の取得

tweet.scan(/@\w+/).flatten

URLの取得

tweet.scan(%r|(https?://[\w/:%#\$&\?\(\)~\.=\+\-]+)|).flatten

ハッシュタグの取得

tweet.scan(%r|\s?(#[^\s ]+)\s?|).flatten

まとめて取得

ツイート内容を渡すと情報をハッシュで返却する

def get_tweet_info(tweet)
  # リプライ
  tweet_info = Hash.new
  tweet_info[:reply_to] = tweet.scan(/@\w+/).flatten
  # URL
  tweet_info[:attachment_url] = tweet.scan(%r|(https?://[\w/:%#\$&\?\(\)~\.=\+\-]+)|).flatten
  # ハッシュタグ
  tweet_info[:hash_tag] = tweet.scan(%r|\s?(#[^  ]+)\s?|).flatten
  return tweet_info
end

サンプルツイートを用いて呼び出す

tweet = "@jobs @tos このページ見ておいて! http://www.yahoo.co.jp/ https://www.google.co.jp/ #hoge #ふが"
pp get_tweet_info(tweet)

実行結果

$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
$ ruby main.rb
{:reply_to=>["@jobs", "@tos"],
 :attachment_url=>["http://www.yahoo.co.jp/", "https://www.google.co.jp/"],
 :hash_tag=>["#hoge", "#ふが"]}

大半のツイートから正常に取得できたが、変則的なフォーマットだと対応しきれないモノがあるかも。もっと良い方法があればご教示お願いします。