페이스북 크롤링 with Koala (Updated 170604)

페이스북으로 로그인하기 with omniauth facebook

페이스북으로 로그인하기

Git branch 3분만에 뽀개기

require 'koala'

class HomeController < ApplicationController
  # before_action :authenticate_user!, except: [:welcome]
  
  def welcome
    @Postall = Post.all
  end
  
  def index
    # @post = Post.all.reverse_order
    # @post = Post.find(:all, :order => "posttime")
    @post = Post.order("posttime DESC")
    # @shows = Show.find(:all, :order => "date")

  end
  
  
  def mypage
      scrap_ids = Scrap.where(user_id: current_user.id).pluck(:post_id)
      @scrapped_posts = Post.where(id: scrap_ids)
  end
  
 
  def do_scrap
    new_scrap = Scrap.new
    new_scrap.post_id = params[:post_id]
    new_scrap.user_id = current_user.id
    new_scrap.save
    
    redirect_to :back
  end
  

  def undo_scrap

    Scrap.where(post_id: params[:post_id], user_id: current_user.id).take.destroy

    redirect_to :back
  end
  
  
  def manualUpdate # 최근 100개 가져와서 가장 최근에 저장한 포스트 이후의 포스트만 저장.
    oauth = Koala::Facebook::OAuth.new '315283835570846', 'c28c1a2d88199232c011c832d5c3ac2a'
    graph = Koala::Facebook::API.new oauth.get_app_access_token
    univ_name = 'SNUbamboo'
    server_id = Server.where(name: univ_name).first.id
    feed = graph.get_connection(univ_name, 'posts', {
      limit: 100,
      fields: ["likes",'message', 'id', 'from', 'type', 'picture', 'link', 'created_time', 'updated_time','comments']
    })
    
    latestTime = Post.maximum("posttime")
    
    feed.each do |x|
      if latestTime == nil || x['created_time'] > latestTime
        new_Post = Post.new
        new_Post.message = x['message']
        new_Post.posttime = x['created_time']
        new_Post.server_id = server_id
        new_Post.save
      end
      
    end
    
    
    oauth = Koala::Facebook::OAuth.new '315283835570846', 'c28c1a2d88199232c011c832d5c3ac2a'
    graph = Koala::Facebook::API.new oauth.get_app_access_token
    univ_name = 'yonseibamboo'
    server_id = Server.where(name: univ_name).first.id
    feed = graph.get_connection(univ_name, 'posts', {
      limit: 100,
      fields: ["likes",'message', 'id', 'from', 'type', 'picture', 'link', 'created_time', 'updated_time','comments']
    })
    
    latestTime = Post.maximum("posttime")
    
    feed.each do |x|
      if latestTime == nil || x['created_time'] > latestTime
        new_Post = Post.new
        new_Post.message = x['message']
        new_Post.posttime = x['created_time']
        new_Post.server_id = server_id
        new_Post.save
      end
    end
    
    univ_name = 'koreabamboo'
    server_id = Server.where(name: univ_name).first.id
    feed = graph.get_connection(univ_name, 'posts', {
      limit: 100,
      fields: ["likes",'message', 'id', 'from', 'type', 'picture', 'link', 'created_time', 'updated_time','comments']
    })
    
    latestTime = Post.where(server_id: server_id).maximum("posttime")
    
    feed.each do |x|
      if latestTime == nil || x['created_time'] > latestTime
        new_Post = Post.new
        new_Post.message = x['message']
        new_Post.posttime = x['created_time']
        new_Post.server_id = server_id
        new_Post.save
      end
    end
    redirect_to "/home/index"
  end
  
  
  
  def manualOldUpdate
    # 서비스 런칭시에만 1회 실행. 얼마까지 긁어올지는 협의.
    univ_name = 'SNUbamboo'
    server_id = Server.where(name: univ_name).first.id
    n = 0
    num_to_crawl = 100 # 이거.
    
    oauth = Koala::Facebook::OAuth.new '315283835570846', 'c28c1a2d88199232c011c832d5c3ac2a'
    graph = Koala::Facebook::API.new oauth.get_app_access_token
    
    
    while n <= num_to_crawl do 
      feed = graph.get_connection(univ_name, 'posts', {
        limit: 100, offset: n,
        fields: ["likes",'message', 'id', 'from', 'type', 'picture', 'link', 'created_t['message']
        new_Post.posttime = x['created_time']
        new_Post.server_id = server_id
        new_Post.save
      end
      n = n + 100
    end
    
    redirect_to "/home/index"
  end

  def search
    if params[:search]
        @post = Post.search(params[:search]).order("created_at DESC")
      else
        @post = Post.all.order("created_at DESC")
    end
  end
  
end

우리조의 notion page입니다. 일러스트레이터는 현수가 다해준다고 했으니까 곧 이 페이지가 넘나 이뻐지겠죠 >< 조금 늦게 만들었지만 각자 자신의 아이디어를 조금씩 끄적여봅시다! 토요일에 각 조당 선정한 아이디어를 기반으로 해서 해커톤을 진행한다고 합니다!~

정정수

박성환

정현수

채경완

GitHub Branch

조현