ruby ORF2017の来场者の大まかな数を算出する

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby ORF2017の来场者の大まかな数を算出する相关的知识,希望对你有一定的参考价值。

require 'net/http'
require 'uri'
require 'json'

class OrfAnalyse
  attr_accessor :complete, :only_poster, :only_signage

  def initialize
    @complete = 0
    @only_poster = 0
    @only_signage = 0
  end

  # 1400件取得(2017/12/04現在これでORFの全時間を網羅)
  def get_json(limit)
    url = "http://connectouch.org/links?limit=#{limit}"
    res = Net::HTTP.get(URI.parse(url))
    return all_list = JSON.parse(res)
  end
  
  # IDを指定してリストを取得
  def get_json_by_id(id)
    url = "http://connectouch.org/links?limit=50&id=#{id}"
    res = Net::HTTP.get(URI.parse(url))
    return list_by_id = JSON.parse(res)
  end

  # ユーザーのIDを全件取得
  def visitor_list(day)
    l22, l23 = [], []
    get_json(1400).each do |elem|
      # 11/22にタッチした人
      if elem['time']>=1511312400 && elem['time']<=1511348400
        l22 << elem['link'][1]
      # 11/23にタッチした人
      elsif elem['time']>=1511398800 && elem['time']<=1511427600
        l23 << elem['link'][1]
      end
    end
    return l22 if day == 22
    return l23 if day == 23
  end

  # 全てのタッチ数
  def visitor_sum(day)
    return visitor_list(day).length
  end

  # ユニークユーザー
  def visitor_unique_sum(day)
    return visitor_list(day).uniq.length
  end

  # パターンで分類
  def touch_check(day)
    visitor_list(day).uniq.each do |visitor|
      rid_list = []
      get_json_by_id(visitor).each do |elem|
        rid_list << elem['link'][0]
      end
      rid_list.uniq!

      # コンプ
      if rid_list.length == 4
        @complete += 1
      
      # サイネージのみタッチ
      elsif rid_list.length == 1 && rid_list.include?('satakepi')
        @only_signage += 1

      # ポスタのみタッチ
      elsif rid_list.empty? == false && rid_list.include?('satakepi') == false
        @only_poster += 1
      end
      
    end
    return result = {
      day: day,
      complete: @complete,
      only_signage: @only_signage,
      only_poster: @only_poster
    }
  end
end

# テスト
test = OrfAnalyse.new
print "22日の総タッチ数 → ", test.visitor_sum(22), "\n"
print "22日のユニークユーザー → ", test.visitor_unique_sum(22), "\n"
res22 = test.touch_check(22)
res22.each do |i, v|
  puts "#{i} → #{v}"
end
puts ""
print "23日の総タッチ数 → ", test.visitor_sum(23), "\n"
print "23日のユニークユーザー → ", test.visitor_unique_sum(23), "\n"
res23 = test.touch_check(23)
res23.each do |i, v|
  puts "#{i} → #{v}"
end
puts ""

以上是关于ruby ORF2017の来场者の大まかな数を算出する的主要内容,如果未能解决你的问题,请参考以下文章

html 诞生日から今日までの日数を算出

r 対象クエリの网络ページへの语句出现频度を算出

ruby ブロックを处理する关数を书く

markdown RinRubyでR言语内の変数をRubyで参照する

ruby NKFで全角英数を半角英数に変换する(UTF-8)

ruby PCAPファイルを読み込んで,分ごとのTCP / IPパケット数を出力する。