class Gogoanime::Scraper

Constants

BASE_URL

Public Instance Methods

anime(path) click to toggle source
# File lib/gogoanime.rb, line 35
def anime(path)
    document = fetch(File.join(BASE_URL, 'category' , path))
    t = document.css('p.type')
    return {
        title:       document.css('h1').text,
        type:        t[0].css('a')[0].text,
        summary:     t[1].text[14..-1],
        genre:       t[2].css('a').map { |a| a = a.text.gsub(',', '').strip },
        released:    t[3].text[10..-1].to_i,
        status:      t[4].text[8..-1],
        other_names: t[5].text.split(': ')[1..-1].join.split(', '),
        image_url:   document.css('div.anime_info_body_bg img')[0]['src'],
        episodes:    document.css('ul#episode_page li').last.css('a')[0]['ep_end']
    }
end
autocomplete(str) click to toggle source
# File lib/gogoanime.rb, line 83
def autocomplete(str)
    document = open("https://ajax.gogocdn.net/site/loadAjaxSearch?keyword=#{str.downcase.gsub(' ', '+')}").read
    document = Nokogiri::HTML(JSON.parse(document)['content'])
    results = []
    for item in document.css('div.list_search_ajax') do
        a = item.css('a')[0]
        results << {
            image_url:  item.css('div.thumbnail-recent_search')[0]['style'].split(': url("').last[0..-3],
            path:       a['href'].split('/').last,
            title:      a.text
        }
    end
    return results
end
episode(path, number) click to toggle source
# File lib/gogoanime.rb, line 51
def episode(path, number)
    document = fetch(File.join(BASE_URL, "#{path}-episode-#{number}"))
    result = {
        title:      document.css('div.title_name h2')[0].text,
        category:   document.css('div.anime_video_body_cate a')[0].text,
        info:       document.css('div.anime-info a')[0].text,
        number:     number,
        sources:    []
    }
    for link in document.css('div.anime_muti_link ul li a').map { |a| a = a['data-video']}

        result[:sources] << (link.start_with?('http') ? link : File.join('https://', link))

    end

    return result
end
recent(pages=1) click to toggle source
# File lib/gogoanime.rb, line 7
def recent(pages=1)
    
    result = []

    pages.times do |i|
        result << Thread.new do
            tmp = []
            document = fetch("#{BASE_URL}?page=#{i+1}")
            document.css('ul.items li').each do |item|
                a = item.css('a')[0]
                tmp << {
                    image_url:   item.css('img')[0]['src'],
                    title:       a['title'],
                    episode_url: a['href'],
                    episode:     item.css('p.episode').text.split(' ').last.to_i,
                    anime_path:  a['href'].split('-episode-').first
                }
            end
            Thread.current[:output] = tmp
        end
    end
    
    return result.map do |x|
        x.join
        x = x[:output]
    end.flatten
end

Private Instance Methods

fetch(url) click to toggle source
# File lib/gogoanime.rb, line 102
def fetch(url)
    return Nokogiri::HTML(open(url).read)
end