Facebookのコメント欄のコピペをYAML形式で保存する

Facebook: 高木浩光さん、産業総合研究所の人間。この...のようなFacebookでのコメントを自分に見やすくカスタマイズしたいと思ったので、その前段階としてテキストとしてコピペしたものをYAML形式で保存するRubyスクリプトを書いた。環境は、Ruby 1.9.3 p194, ya2yaml(rubygemライブラリ)利用。

使い方

  1. Facebookのコメント欄を1人目の名前部分からドラッグしてコピー
  2. 適当なテキストエディタにペースト&文字コードUTF8で保存(仮にhogehoge.txtとする)
  3. スクリプト名をComments2YAML.rbとするとき、以下のコマンドで実行
% ruby ./Comments2YAML.rb hogehoge.txt > hogehoge.yml

スクリプトは以下の通り。

# -*- coding: utf-8 -*-
require "rubygems"
require "ya2yaml"

if ARGV.size != 1
  puts "Please give a filename which has facebook comments.\n"
  exit
end

filename =ARGV[0]

unless File.exist?(filename)
  puts "No such file: #{filename}\n"
  exit
end

authorsArray = Array.new
commentsArray = Array.new
iineArray = Array.new
comment = String.new
blockFlg = true
File.readlines(filename).each do | line |
  line.chomp!
  line.strip!
  if blockFlg == true
    comment = ''
    if mArray = /^(.+?\s.+?)\s(.+)$/.match(line)
      authorsArray.push(mArray[1])
      comment = comment +  "#{mArray[2]}"
    end
    blockFlg = false
  elsif /^.*\s+?いいね!\s+?.*\s+?([0-9]+)$/ =~ line
    iineArray.push($1)
    blockFlg = true
    commentsArray.push(comment)
  else
    comment = comment + "#{line}\n"
  end
end

生成したYAMLを使って、コメント数、合計いいね数でユーザー別ソーティングするスクリプト

# -*- coding: utf-8 -*-
require "rubygems"
require "yaml"
require "ya2yaml"


if ARGV.size != 1
  puts "Please give a yaml filename.\n"
  exit
end

filename =ARGV[0]

unless File.exist?(filename)
  puts "No such file: #{filename}\n"
  exit
end

commentsArray = YAML.load(File.read(filename))

# 一番コメントしたユーザーを求める

userHash = Hash.new
iineByUserHash = Hash.new
commentsArray.each do | array |
  if userHash[array[0]].nil?
    userHash.store(array[0],1)
    iineByUserHash.store(array[0], array[2].to_i)
  else
    userHash[array[0]] = userHash[array[0]] +1
    iineByUserHash[array[0]] = iineByUserHash[array[0]] + array[2].to_i
  end
end

userHash.sort_by{ |key, value | value}.reverse.each do | array |
  p "#{array[1]}回: #{array[0]}"
end

 iineByUserHash.sort_by{ |key, value | value}.reverse.each do | array |
  p "合計 #{array[1]} いいね: #{array[0]}"
end

averageHash = Hash.new
userHash.each do |key, value |
  averageHash.store(key, iineByUserHash[key].to_f/userHash[key].to_f)
end

averageHash.sort_by{ |key, value | value}.reverse.each do | array |
  p "#{sprintf("%.2f", array[1])} いいね/回:  #{array[0]}, コメント回数#{userHash[array[0]]}, 合計いいね数#{iineByUserHash[array[0]]}"
end

18:00ごろのFacebook: 高木浩光さん、産業総合研究所の人間。この...におけるコメント数、合計いいね数でユーザー別ソーティング結果(匿名化しています)。

"50回: ユーザー66"
"24回: ユーザー67"
"21回: ユーザー36"
"21回: ユーザー26"
"16回: ユーザー103"
"14回: ユーザー37"
"14回: ユーザー18"
"11回: ユーザー101"
"9回: ユーザー118"
"8回: ユーザー12"
"7回: ユーザー111"
"6回: ユーザー53"
"5回: ユーザー76"
"5回: ユーザー40"
"5回: ユーザー10"
"5回: ユーザー72"
"5回: ユーザー49"
"5回: ユーザー32"
"4回: ユーザー31"
"4回: ユーザー73"
"4回: ユーザー81"
"4回: ユーザー41"
"4回: ユーザー20"
"4回: ユーザー93"
"3回: ユーザー69"
"3回: ユーザー119"
"3回: ユーザー113"
"3回: ユーザー92"
"3回: ユーザー117"
"3回: ユーザー54"
"3回: ユーザー89"
"2回: ユーザー21"
"2回: ユーザー50"
"2回: ユーザー63"
"2回: ユーザー65"
"2回: ユーザー2"
"2回: ユーザー48"
"2回: ユーザー99"
"2回: ユーザー82"
"2回: ユーザー115"
"2回: ユーザー70"
"2回: ユーザー16"
"2回: ユーザー25"
"2回: ユーザー74"
"2回: ユーザー61"
"1回: ユーザー120"
"1回: ユーザー77"
"1回: ユーザー78"
"1回: ユーザー79"
"1回: ユーザー71"
"1回: ユーザー80"
"1回: ユーザー83"
"1回: ユーザー68"
"1回: ユーザー84"
"1回: ユーザー85"
"1回: ユーザー86"
"1回: ユーザー64"
"1回: ユーザー87"
"1回: ユーザー62"
"1回: ユーザー75"
"1回: ユーザー60"
"1回: ユーザー59"
"1回: ユーザー58"
"1回: ユーザー57"
"1回: ユーザー56"
"1回: ユーザー55"
"1回: ユーザー88"
"1回: ユーザー90"
"1回: ユーザー52"
"1回: ユーザー51"
"1回: ユーザー91"
"1回: ユーザー94"
"1回: ユーザー95"
"1回: ユーザー47"
"1回: ユーザー46"
"1回: ユーザー45"
"1回: ユーザー44"
"1回: ユーザー43"
"1回: ユーザー42"
"1回: ユーザー96"
"1回: ユーザー97"
"1回: ユーザー39"
"1回: ユーザー38"
"1回: ユーザー98"
"1回: ユーザー100"
"1回: ユーザー35"
"1回: ユーザー34"
"1回: ユーザー33"
"1回: ユーザー102"
"1回: ユーザー104"
"1回: ユーザー30"
"1回: ユーザー29"
"1回: ユーザー28"
"1回: ユーザー27"
"1回: ユーザー105"
"1回: ユーザー106"
"1回: ユーザー24"
"1回: ユーザー23"
"1回: ユーザー22"
"1回: ユーザー107"
"1回: ユーザー108"
"1回: ユーザー19"
"1回: ユーザー109"
"1回: ユーザー17"
"1回: ユーザー110"
"1回: ユーザー15"
"1回: ユーザー14"
"1回: ユーザー13"
"1回: ユーザー112"
"1回: ユーザー11"
"1回: ユーザー114"
"1回: ユーザー9"
"1回: ユーザー8"
"1回: ユーザー7"
"1回: ユーザー6"
"1回: ユーザー5"
"1回: ユーザー4"
"1回: ユーザー3"
"1回: ユーザー116"
"1回: ユーザー1"
"合計 477 いいね:  ユーザー66"
"合計 397 いいね:  ユーザー16"
"合計 324 いいね:  ユーザー67"
"合計 318 いいね:  ユーザー37"
"合計 277 いいね:  ユーザー10"
"合計 242 いいね:  ユーザー53"
"合計 211 いいね:  ユーザー18"
"合計 182 いいね:  ユーザー36"
"合計 166 いいね:  ユーザー101"
"合計 157 いいね:  ユーザー48"
"合計 141 いいね:  ユーザー15"
"合計 120 いいね:  ユーザー19"
"合計 114 いいね:  ユーザー26"
"合計 111 いいね:  ユーザー74"
"合計 108 いいね:  ユーザー12"
"合計 104 いいね:  ユーザー33"
"合計 102 いいね:  ユーザー20"
"合計 100 いいね:  ユーザー76"
"合計 98 いいね:  ユーザー69"
"合計 84 いいね:  ユーザー103"
"合計 76 いいね:  ユーザー118"
"合計 76 いいね:  ユーザー57"
"合計 73 いいね:  ユーザー29"
"合計 69 いいね:  ユーザー56"
"合計 69 いいね:  ユーザー73"
"合計 61 いいね:  ユーザー40"
"合計 56 いいね:  ユーザー41"
"合計 54 いいね:  ユーザー34"
"合計 52 いいね:  ユーザー35"
"合計 49 いいね:  ユーザー54"
"合計 47 いいね:  ユーザー65"
"合計 47 いいね:  ユーザー72"
"合計 43 いいね:  ユーザー55"
"合計 42 いいね:  ユーザー50"
"合計 42 いいね:  ユーザー31"
"合計 42 いいね:  ユーザー92"
"合計 42 いいね:  ユーザー111"
"合計 39 いいね:  ユーザー102"
"合計 39 いいね:  ユーザー43"
"合計 39 いいね:  ユーザー81"
"合計 38 いいね:  ユーザー45"
"合計 36 いいね:  ユーザー42"
"合計 34 いいね:  ユーザー28"
"合計 34 いいね:  ユーザー97"
"合計 33 いいね:  ユーザー71"
"合計 33 いいね:  ユーザー93"
"合計 33 いいね:  ユーザー49"
"合計 31 いいね:  ユーザー88"
"合計 30 いいね:  ユーザー61"
"合計 30 いいね:  ユーザー32"
"合計 30 いいね:  ユーザー70"
"合計 29 いいね:  ユーザー77"
"合計 29 いいね:  ユーザー63"
"合計 28 いいね:  ユーザー38"
"合計 28 いいね:  ユーザー85"
"合計 27 いいね:  ユーザー47"
"合計 27 いいね:  ユーザー75"
"合計 27 いいね:  ユーザー39"
"合計 27 いいね:  ユーザー13"
"合計 27 いいね:  ユーザー89"
"合計 26 いいね:  ユーザー58"
"合計 23 いいね:  ユーザー62"
"合計 23 いいね:  ユーザー83"
"合計 23 いいね:  ユーザー23"
"合計 23 いいね:  ユーザー22"
"合計 21 いいね:  ユーザー109"
"合計 20 いいね:  ユーザー117"
"合計 19 いいね:  ユーザー96"
"合計 18 いいね:  ユーザー113"
"合計 17 いいね:  ユーザー78"
"合計 15 いいね:  ユーザー64"
"合計 14 いいね:  ユーザー4"
"合計 13 いいね:  ユーザー2"
"合計 12 いいね:  ユーザー90"
"合計 12 いいね:  ユーザー82"
"合計 12 いいね:  ユーザー30"
"合計 12 いいね:  ユーザー99"
"合計 11 いいね:  ユーザー21"
"合計 10 いいね:  ユーザー14"
"合計 10 いいね:  ユーザー8"
"合計 9 いいね:  ユーザー6"
"合計 8 いいね:  ユーザー110"
"合計 8 いいね:  ユーザー80"
"合計 8 いいね:  ユーザー119"
"合計 8 いいね:  ユーザー44"
"合計 7 いいね:  ユーザー120"
"合計 7 いいね:  ユーザー7"
"合計 7 いいね:  ユーザー84"
"合計 7 いいね:  ユーザー59"
"合計 7 いいね:  ユーザー105"
"合計 7 いいね:  ユーザー87"
"合計 6 いいね:  ユーザー17"
"合計 6 いいね:  ユーザー115"
"合計 6 いいね:  ユーザー68"
"合計 6 いいね:  ユーザー9"
"合計 6 いいね:  ユーザー25"
"合計 5 いいね:  ユーザー116"
"合計 5 いいね:  ユーザー104"
"合計 5 いいね:  ユーザー100"
"合計 5 いいね:  ユーザー94"
"合計 4 いいね:  ユーザー91"
"合計 4 いいね:  ユーザー95"
"合計 4 いいね:  ユーザー27"
"合計 4 いいね:  ユーザー46"
"合計 4 いいね:  ユーザー11"
"合計 3 いいね:  ユーザー112"
"合計 3 いいね:  ユーザー3"
"合計 3 いいね:  ユーザー114"
"合計 3 いいね:  ユーザー107"
"合計 3 いいね:  ユーザー52"
"合計 3 いいね:  ユーザー86"
"合計 2 いいね:  ユーザー24"
"合計 2 いいね:  ユーザー5"
"合計 2 いいね:  ユーザー106"
"合計 1 いいね:  ユーザー98"
"合計 1 いいね:  ユーザー108"
"合計 1 いいね:  ユーザー79"
"合計 1 いいね:  ユーザー60"
"合計 1 いいね:  ユーザー51"
"合計 1 いいね:  ユーザー1"

コメントあたりの平均「いいね!」数。

"198.50 いいね/回:  ユーザー16"
"141.00 いいね/回:  ユーザー15"
"120.00 いいね/回:  ユーザー19"
"104.00 いいね/回:  ユーザー33"
"78.50 いいね/回:  ユーザー48"
"76.00 いいね/回:  ユーザー57"
"73.00 いいね/回:  ユーザー29"
"69.00 いいね/回:  ユーザー56"
"55.50 いいね/回:  ユーザー74"
"55.40 いいね/回:  ユーザー10"
"54.00 いいね/回:  ユーザー34"
"52.00 いいね/回:  ユーザー35"
"43.00 いいね/回:  ユーザー55"
"40.33 いいね/回:  ユーザー53"
"39.00 いいね/回:  ユーザー43"
"39.00 いいね/回:  ユーザー102"
"38.00 いいね/回:  ユーザー45"
"36.00 いいね/回:  ユーザー42"
"34.00 いいね/回:  ユーザー28"
"34.00 いいね/回:  ユーザー97"
"33.00 いいね/回:  ユーザー71"
"32.67 いいね/回:  ユーザー69"
"31.00 いいね/回:  ユーザー88"
"29.00 いいね/回:  ユーザー77"
"28.00 いいね/回:  ユーザー38"
"28.00 いいね/回:  ユーザー85"
"27.00 いいね/回:  ユーザー47"
"27.00 いいね/回:  ユーザー13"
"27.00 いいね/回:  ユーザー39"
"27.00 いいね/回:  ユーザー75"
"26.00 いいね/回:  ユーザー58"
"25.50 いいね/回:  ユーザー20"
"23.50 いいね/回:  ユーザー65"
"23.00 いいね/回:  ユーザー62"
"23.00 いいね/回:  ユーザー23"
"23.00 いいね/回:  ユーザー22"
"23.00 いいね/回:  ユーザー83"
"22.71 いいね/回:  ユーザー37"
"21.00 いいね/回:  ユーザー50"
"21.00 いいね/回:  ユーザー109"
"20.00 いいね/回:  ユーザー76"
"19.00 いいね/回:  ユーザー96"
"17.25 いいね/回:  ユーザー73"
"17.00 いいね/回:  ユーザー78"
"16.33 いいね/回:  ユーザー54"
"15.09 いいね/回:  ユーザー101"
"15.07 いいね/回:  ユーザー18"
"15.00 いいね/回:  ユーザー70"
"15.00 いいね/回:  ユーザー64"
"15.00 いいね/回:  ユーザー61"
"14.50 いいね/回:  ユーザー63"
"14.00 いいね/回:  ユーザー92"
"14.00 いいね/回:  ユーザー4"
"14.00 いいね/回:  ユーザー41"
"13.50 いいね/回:  ユーザー67"
"13.50 いいね/回:  ユーザー12"
"12.20 いいね/回:  ユーザー40"
"12.00 いいね/回:  ユーザー90"
"12.00 いいね/回:  ユーザー30"
"10.50 いいね/回:  ユーザー31"
"10.00 いいね/回:  ユーザー14"
"10.00 いいね/回:  ユーザー8"
"9.75 いいね/回:  ユーザー81"
"9.54 いいね/回:  ユーザー66"
"9.40 いいね/回:  ユーザー72"
"9.00 いいね/回:  ユーザー6"
"9.00 いいね/回:  ユーザー89"
"8.67 いいね/回:  ユーザー36"
"8.44 いいね/回:  ユーザー118"
"8.25 いいね/回:  ユーザー93"
"8.00 いいね/回:  ユーザー110"
"8.00 いいね/回:  ユーザー44"
"8.00 いいね/回:  ユーザー80"
"7.00 いいね/回:  ユーザー120"
"7.00 いいね/回:  ユーザー7"
"7.00 いいね/回:  ユーザー87"
"7.00 いいね/回:  ユーザー105"
"7.00 いいね/回:  ユーザー84"
"7.00 いいね/回:  ユーザー59"
"6.67 いいね/回:  ユーザー117"
"6.60 いいね/回:  ユーザー49"
"6.50 いいね/回:  ユーザー2"
"6.00 いいね/回:  ユーザー17"
"6.00 いいね/回:  ユーザー82"
"6.00 いいね/回:  ユーザー9"
"6.00 いいね/回:  ユーザー99"
"6.00 いいね/回:  ユーザー113"
"6.00 いいね/回:  ユーザー111"
"6.00 いいね/回:  ユーザー32"
"6.00 いいね/回:  ユーザー68"
"5.50 いいね/回:  ユーザー21"
"5.43 いいね/回:  ユーザー26"
"5.25 いいね/回:  ユーザー103"
"5.00 いいね/回:  ユーザー116"
"5.00 いいね/回:  ユーザー94"
"5.00 いいね/回:  ユーザー104"
"5.00 いいね/回:  ユーザー100"
"4.00 いいね/回:  ユーザー46"
"4.00 いいね/回:  ユーザー27"
"4.00 いいね/回:  ユーザー11"
"4.00 いいね/回:  ユーザー95"
"4.00 いいね/回:  ユーザー91"
"3.00 いいね/回:  ユーザー86"
"3.00 いいね/回:  ユーザー107"
"3.00 いいね/回:  ユーザー25"
"3.00 いいね/回:  ユーザー3"
"3.00 いいね/回:  ユーザー112"
"3.00 いいね/回:  ユーザー52"
"3.00 いいね/回:  ユーザー114"
"3.00 いいね/回:  ユーザー115"
"2.67 いいね/回:  ユーザー119"
"2.00 いいね/回:  ユーザー24"
"2.00 いいね/回:  ユーザー106"
"2.00 いいね/回:  ユーザー5"
"1.00 いいね/回:  ユーザー98"
"1.00 いいね/回:  ユーザー108"
"1.00 いいね/回:  ユーザー79"
"1.00 いいね/回:  ユーザー60"
"1.00 いいね/回:  ユーザー51"
"1.00 いいね/回:  ユーザー1"